Hi Ron, Thank you for your message. I apologize that I was not answering for such long time. Now I'm extremely busy with adopting my programs to SAF-T in Poland: https://www.pwc.ch/news/en/26707/poland-introduce-standard-audit-file-tax-saf-t-1-july-2016 http://www.internationaltaxreview.com/Article/3549775/Poland-Incoming-reporting-changes-in-Poland.html and this will not change in next weeks. As soon I'll find spare time (I hope in a month) I would like to return to this subject and I'll comment your message. Sorry again.
best regards, Przemek On Fri, 29 Apr 2016, Ron Pinkas wrote: > Dear Przemek, > > My sincere thanks, for your kind and generous email and suggestions. > > I personally agree with practically all of your observations and suggestions, > with just few reservations. > > 1. GLOBAL scope ( which is also directly accessible by C code). > > 2. Name spaces. > > 3. I never believed that [x]Harbour must be ERROR compatible with Clipper. > Which is a conceptual principal difference. For example, for me supporting > NEGATIVE arguments in Array functions, seems a simple and intuitive extension > (which in my arrogant mind, Nantucket itself would have surely introduced > along those years). in Harbour such extension were refused, and blocked. Just > to give you some idea, if I remember correctly,the actual straw that made me > decide to fork Harbour was when I suggested simple extensions to the Clipper > At() function (by means of ADDITIONAL OPTIONAL ARGUMENTS), which would still > keep it 100% backward compatible, yet Victor managed to convince the group to > REFUSE even such simple extensions, and instead force the introduction of a > “new” HB_At() with such extended functionality. Thus, xHarbour was born, and > there were many places where different decisions were taken in the > implementation of specific extensions (Ironically, many of them were imported > back to Harbour, when it was stagnant). and I sincerely can not imagine > remembering almost any of them. But I do remember few were vital (at least in > my mind). Naturally one could use an xHB.lib which overrides the default RTL > in such cases. and/or maybe an #ifdef can be used, etc., the problem is I am > not sure anyone has a COMPLETE LIST of all such INTENTIONAL DIFFERENCES, and > some could even be Compiler level, and or requiring collaboration of the > Compiler. > > Yet, in retrospect, having lost the desire/willingness to program in general, > and having stopped contributing to the development of xHarbour, and since no > one else really assumed an active roll in keeping it responsive. I must admit > that current Harbour is probably a better choice than the stagnant xHarbour, > and its probably worth it, giving up what ever issues do exists, in return > for a much improved overall product. > > In response to your question, I would vote YES, but I believe it should be a > community decision, made by the current active members on this developer list. > > Again, my most sincere thanks, for your many years of so many great > contributions, as well as your kindness and consideration of xHarbour. > > Ron > > > On Apr 26, 2016, at 5:52 PM, Przemyslaw Czerpak <dru...@poczta.onet.pl> > > wrote: > > > > Hi Ron, > > > > Sorry for late response. I'm very busy recently. > > Because my message below I address to all xHarbour developers > > I'm setting CC to xHarbour devel list. > > > > I do not think it's worth to port single modifications from > > Harbour to xHarbour. Just simply it's full time job for many > > months. There are many different things which should be ported > > and it will be very hard to avoid bugs in this process. Much > > simpler would be take current Harbour code and add xHarbour > > extensions which are missing. There are only few of them > > which we decided to not add to Harbour core code. Many of > > them where implemented in Harbour in XHB library without > > touching the core code though in some cases with a little > > bit changed behavior. If you want to add it to core code > > then I have nothing against I would only want to cover them > > by #ifdef __XHARBOUR__ macro just simply to keep the code > > as close as possible for future synchronization. I can help > > in this process but only if other xHarbour developers agree > > with this idea and can help at least reporting differences. > > What are the main drawbacks of such synchronization: > > - in Harbour we hide internal HVM structures so 3-rd > > party C code programmers which want to access them > > directly have to include hbvmint.h > > - there are some differences between internal structures > > so 3-rd party C code which exploits them have to be > > updated. > > Above are the simplest methods to update existing 3-rd > > party xHarbour C code though not suggested one. As > > preferred solution I strongly suggest to use only > > documented API because it does not block adding new > > [x]Harbour improvements and extensions. Just simply > > most of things in core code can be changed and such > > modifications do not break exiting code using official > > API (this functionality allows Harbour to have only > > one library HVM which is needed to chose between ST and > > MT modes). This API is also precisely defined (i.e. const > > attribute) so it helps programmers to find potential > > bugs and create correct code. Because core structures > > are not directly accessed then Harbour users does not > > have to replicate the same C compiler switches as the > > ones used to compile core code just to keep the same > > alignment. The visible structures where slightly changed > > just to force the same alignment though this part is not > > finished yet - so far I haven't changed some structures > > which would force 3-rd party code upgrades, I plan to > > make it but to not increase the cost for Harbour users > > I want to make it once probably with some stable release. > > What are the main profits: > > - Harbour gives much better optimized PCODE and faster > > HVM code. On pure PCODE evaluation Harbour is nearly > > twice faster then xHarbour. > > - Much cleaner API which does not block introducing new > > modifications due to backward compatibility. > > - Smaller memory overhead, i.e. depending on used alignment > > and 32/64 bit mode even simple HB_ITEM structure is > > between 25% to 50% smaller so less memory is used and > > many operation faster, i.e. ADel() or AIns() because > > smaller memory blocks have to be updated (it also gives > > better CPU cache usage). Also memory fragmentation in > > Harbour is noticeable smaller then in xHarbour. > > - Completed and in practice finished MT mode which allows > > to write big production ready servers. > > Only one library have to be replaced to converts ST > > program to MT one: HVM -> HVMMT. The overhead of MT > > mode is also much smaller the total speed difference > > between Harbour and xHarbour so Harbour MT programs > > are still much faster then xHarbour ST ones. > > - Automatic optimization of many operations which are > > not optimized in xHarbour at all or optimized only > > when programmer explicitly add code to enable such > > optimization, i.e. array resizing or hash tables which > > do not need separate associative array functionality > > because it exists by default and the implementation > > is faster then xHarbour one. > > - Many new features like socket filters, replaceable > > file IO drivers, etc. > > - Really big number of fixes and much better Cl*pper > > compatibility. > > - Support for new platforms, i.e. WinCE/Mobile, Android, > > OSX, AIX, Minix, QNX, BEOS/Haiku. > > - Rewritten compiler code which is reentant and MT safe > > without any memory leaks so Harbour compiler can be > > used in user code to compile and execute PRG code though > > here programmer should remember that compiler library is > > pure GPL code. > > Basic HBRUN which uses Harbour compiler library and > > gives all xbscript functionality but with really native > > speed was written in few lines. > > - Many others things - the total list is really long, read: > > https://github.com/harbour/core/blob/master/doc/xhb-diff.txt > > <https://github.com/harbour/core/blob/master/doc/xhb-diff.txt> > > if you need more information and ask about details if > > necessary. > > > > So my final question is: > > Are you interesting in taking current Harbour code and adding > > xHarbour extensions which were not ported to Harbour core code > > and you think are important just to keep base code for both > > compilers as close as possible. In practice it would mean also > > that well written 3-rd party code for both compilers is > > compatible. I can help in many places though I hope that some > > standalone contrib libraries can be ported by their authors > > or at least active users. > > > > best regards, > > Przemek > > > > > > On Thu, 21 Apr 2016, Ron Pinkas wrote: > >> Many thanks for your help Przemek. :-) > >> > >> Please fell welcome to import your compiler expression GCs to xHarbour. We > >> would all be very grateful. > >> > >> Best regards, > >> > >> Ron > >> > >>> On Apr 20, 2016, at 1:02 PM, Przemyslaw Czerpak <dru...@poczta.onet.pl> > >>> wrote: > >>> > >>> Hi Ron and Walter. > >>> > >>> The problem can be exploited by many different > >>> syntax errors. > >>> When syntax error appears we cannot trust that > >>> our expression destructor is executed because > >>> we do not know where exactly the error was > >>> detected by bison and if all sub expressions > >>> created so far have internal bindings which > >>> allow to free them all. > >>> Bison has %destructor directive which can help > >>> to resolve such problems with memory leaks but > >>> it needs well defined grammar rules which do > >>> not overwrite expressions on the bison stack > >>> and expressions which are still on bison stack > >>> do have internal bindings used in their > >>> destructors. In [x]Harbour none of the above > >>> is true so %destructor cannot be used. > >>> > >>> I left this note in harbour.y: > >>> > >>> /* > >>> We cannot use destructors for expressions. The internal bison logic > >>> cannot > >>> detect properly if the expression was used or not in our grammar > >>> definition > >>> so it's possible that destructors will never be executed or executed for > >>> expressions which we freed ourselves. > >>> > >>> %destructor { > >>> HB_COMP_EXPR_FREE( $$ ); > >>> } > >>> Argument ArgList ElemList ... > >>> */ > >>> > >>> For this example you can change grammar rules > >>> just to force execution of expression destructor. > >>> But it's not general solution because in a while > >>> someone else may create other example with completely > >>> different code with syntax syntax error, i.e.: > >>> &( "a[1" ) // one not freed expression > >>> or > >>> &( "a(b(c(d(e" ) // four not freed expressions > >>> > >>> The simplest solution for this problem is > >>> implementing garbage collector for generated > >>> expressions in macrocompiler and also in > >>> compiler if you ever plan to add support for > >>> runtime PRG code compilation and evaluation. > >>> I implemented such GC-es in Harbour about 10 > >>> years ago so you can port them to xharbour. > >>> BTW There are many other things which should > >>> be fixed in xHarbour macrocompiler. Just look > >>> at ChangeLog in Harbour for modifications > >>> related to macro/macro.y > >>> > >>> best regards, > >>> Przemek > >>> > >>> > >>> On Wed, 20 Apr 2016, Walter Negro wrote: > >>>> Hi, Ron > >>>> > >>>> I'm fine, many responsability, working with xHarbour. > >>>> > >>>> Adding debug to parser I have this sequence: > >>>> > >>>> > >>>> *** New Macro: >>>(file_alias = $1)<<< Len: 17 > >>>> Starting parse > >>>> Entering state 0 > >>>> Reading a token: > >>>> Reducing Delimiter: '(' As: 40 > >>>> Passing through: 40 > >>>> Returning: 40 > >>>> Next token is token '(' () > >>>> Shifting token '(' () > >>>> Entering state 23 > >>>> Reading a token: > >>>> Checking 4 Streams for E At: >e_alias = $1)< > >>>> Token: "FILE_ALIAS" Ommited: ' ' > >>>> Pre-Scaning Words for Token: FILE_ALIAS at Positions: 1-1 > >>>> iLenMatch 10 > >>>> iKeyLen: 5 iLen2Match: 10 comparing: [FILE_ALIAS] with: [FIELD?WS?->] > >>>> Trying Next Word Pattern... [FILE_ALIAS] > [FIELD?WS?->] > >>>> Continue with: [HAS] > >>>> Reducing Element: "FILE_ALIAS" > >>>> Element "FILE_ALIAS" is 258 > >>>> Passing through: 258 > >>>> Returning: 258 > >>>> Next token is token IDENTIFIER () > >>>> Shifting token IDENTIFIER () > >>>> Entering state 86 > >>>> Reducing stack by rule 8 (line 379): > >>>> $1 = token IDENTIFIER () > >>>> -> $$ = nterm IdentName () > >>>> Stack now 0 23 > >>>> Entering state 26 > >>>> Reading a token: > >>>> Checking 28 Selfs for = At: >= $1)< > >>>> Reducing Delimiter: '=' As: 1085 > >>>> Returning Dont Reduce 61 > >>>> Returning: 61 > >>>> Next token is token '=' () > >>>> Reducing stack by rule 30 (line 533): > >>>> $1 = nterm IdentName () > >>>> -> $$ = nterm Variable () > >>>> Stack now 0 23 > >>>> Entering state 38 > >>>> Next token is token '=' () > >>>> Reducing stack by rule 109 (line 820): > >>>> $1 = nterm Variable () > >>>> -> $$ = nterm SimpleExpression () > >>>> Stack now 0 23 > >>>> Entering state 57 > >>>> Reducing stack by rule 126 (line 839): > >>>> $1 = nterm SimpleExpression () > >>>> -> $$ = nterm Expression () > >>>> Stack now 0 23 > >>>> Entering state 106 > >>>> Next token is token '=' () > >>>> Shifting token '=' () > >>>> Entering state 197 > >>>> Reading a token: > >>>> Reducing Delimiter: '$' As: 1060 > >>>> Returning Dont Reduce 36 > >>>> Returning: 36 > >>>> Next token is token '$' () > >>>> Error: popping token '=' () > >>>> Stack now 0 23 106 > >>>> Error: popping nterm Expression () > >>>> Stack now 0 23 > >>>> Error: popping token '(' () > >>>> Stack now 0 > >>>> Shifting token error () > >>>> Entering state 1 > >>>> Reducing stack by rule 7 (line 359): > >>>> $1 = token error () > >>>> Cleanup: discarding lookahead token '$' () > >>>> Stack now 0 > >>>> > >>>> source\vm\fm.c:971: HB_TR_ERROR Block 1 00923AA8 (size 11) MAIN(10), > >>>> "FILE_ALIAS." > >>>> source\vm\fm.c:971: HB_TR_ERROR Block 2 00A5A2D0 (size 40) MAIN(10), > >>>> "A83A92000000000010D6E80000000000010002008000000000000000010000001A00000000000000" > >>>> > >>>> > >>>> Testing several expression to force error and reduce stack by rule 7, i > >>>> found that other expression free memory using s_Pending. > >>>> > >>>> If code is: > >>>> > >>>> file_alias = $1 > >>>> > >>>> the stack is reduced by rule 6 > >>>> > >>>> I test adding a rule > >>>> > >>>> | '(' Expression error > >>>> > >>>> similar to > >>>> > >>>> | Expression error > >>>> > >>>> and the parser reduce in this rule instead of rule > >>>> > >>>> | error > >>>> > >>>> and now no more memory leaks, but is this a correct solution? > >>>> > >>>> Thank you > >>>> > >>>> > >>>> > >>>> > >>>> *Walter Negro* > >>>> Desarrollo e Investigación > >>>> VsTour - Softmagic S.R.L. > >>>> ( 54 ) ( 11 ) 5218-6616 > >>>> Av. Corrientes 2294 Piso 7 Of.33 > >>>> C1046AAN - Buenos Aires - Argentina > >>>> wne...@vstour.com > >>>> -------------------------------------------------------------------------------- > >>>> *:: VSTour.COM <http://vstour.com/> <http://vstour.com/ > >>>> <http://vstour.com/>> <http://www.vstour.com <http://www.vstour.com/> > >>>> <http://www.vstour.com/ <http://www.vstour.com/>>> :: * > >>>> > >>>> 2016-04-19 16:53 GMT-03:00 Ron Pinkas <ron.pin...@xharbour.com > >>>> <mailto:ron.pin...@xharbour.com> <mailto:ron.pin...@xharbour.com > >>>> <mailto:ron.pin...@xharbour.com>>>: > >>>> > >>>>> Hey Walter, :-) > >>>>> > >>>>> (How are you?) > >>>>> > >>>>> How much memory, and what is stored int it? > >>>>> > >>>>> We need to follow the EXPRESSION TREE, and find which element is not > >>>>> released. > >>>>> > >>>>> It should be a Parenthesized Exp, which has a single element, being an > >>>>> EQUATION where the left side is the IDENTIFIER file_alias, and the right > >>>>> side is where the syntax error occurs as $ was encountered. > >>>>> > >>>>> We must be sure that the pending expression (the Parenthesis ) is > >>>>> released > >>>>> as well as the expression of the current token (the $ operator). > >>>>> > >>>>> Ron > >>>>> > >>>>>> On Apr 7, 2016, at 12:35 AM, Walter Negro <wne...@vstour.com > >>>>>> <mailto:wne...@vstour.com> <mailto:wne...@vstour.com > >>>>>> <mailto:wne...@vstour.com>>> wrote: > >>>>>> > >>>>>> > >>>>>> Procedure Main() > >>>>>> > >>>>>> TRY > >>>>>> // ? &( "file_alias = $1" ) // No memory leaks > >>>>>> ? &( "(file_alias = $1)" ) // Memory leaks > >>>>>> CATCH > >>>>>> ? "Catched" > >>>>>> END > >>>>>> > >>>>>> Return > >>>>>> > >>>>>> --------------------------- > >>>>>> This code > >>>>>> &( "file_alias = $1" ) > >>>>>> > >>>>>> End in the rule (macro.y) > >>>>>> Main : Expression error > >>>>>> > >>>>>> --------------------------- > >>>>>> This code > >>>>>> &( "(file_alias = $1)" ) > >>>>>> > >>>>>> End in the rule (macro.y) > >>>>>> Main : error > >>>>>> > >>>>>> I not understand how to fix the rule or > >>>>>> > >>>>>> Walter Negro > >>> > >>> ------------------------------------------------------------------------------ > >>> Find and fix application performance issues faster with Applications > >>> Manager > >>> Applications Manager provides deep performance insights into multiple > >>> tiers of > >>> your business applications. It resolves application problems quickly and > >>> reduces your MTTR. Get your free trial! > >>> https://ad.doubleclick.net/ddm/clk/302982198;130105516;z > >>> <https://ad.doubleclick.net/ddm/clk/302982198;130105516;z> > >>> <https://ad.doubleclick.net/ddm/clk/302982198;130105516;z > >>> <https://ad.doubleclick.net/ddm/clk/302982198;130105516;z>> > >>> _______________________________________________ > >>> xHarbour-developers mailing list > >>> xHarbour-developers@lists.sourceforge.net > >>> <mailto:xHarbour-developers@lists.sourceforge.net> > >>> <mailto:xHarbour-developers@lists.sourceforge.net > >>> <mailto:xHarbour-developers@lists.sourceforge.net>> > >>> https://lists.sourceforge.net/lists/listinfo/xharbour-developers > >>> <https://lists.sourceforge.net/lists/listinfo/xharbour-developers> > >>> <https://lists.sourceforge.net/lists/listinfo/xharbour-developers > >>> <https://lists.sourceforge.net/lists/listinfo/xharbour-developers>> > ------------------------------------------------------------------------------ What NetFlow Analyzer can do for you? Monitors network bandwidth and traffic patterns at an interface-level. Reveals which users, apps, and protocols are consuming the most bandwidth. Provides multi-vendor support for NetFlow, J-Flow, sFlow and other flows. Make informed decisions using capacity planning reports. https://ad.doubleclick.net/ddm/clk/305295220;132659582;e _______________________________________________ xHarbour-developers mailing list xHarbour-developers@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/xharbour-developers