Yes. Also simple solution can be to override compiler of problem classes to return old compiler.
I know it is better to rewrite code but it can be not simple task when there are a lot of ffi-methods. 2017-08-17 13:17 GMT+02:00 Guillermo Polito <guillermopol...@gmail.com>: > > > On Thu, Aug 17, 2017 at 1:09 PM, Denis Kudriashov <dionisi...@gmail.com> > wrote: > >> >> Sorry, but we will not accept old pragma format (as I said, is invalid… >>> and ugly ;) ). >> >> >> But we will be able load old compiler (when it will be removed from >> standard image) to support such old code >> > > But then you should compile such code with the old compiler, not make opal > compatible, no? > > >> >> 2017-08-17 11:48 GMT+02:00 Esteban Lorenzano <esteba...@gmail.com>: >> >>> hi, >>> >>> Old way to do FFI calls is no longer supported on Pharo, but this >>> deprecation is very old (since Pharo 2). Now, in Pharo 4 we replaced the >>> compiler (for OpalCompiler) and we no longer supported “pragma-like” calls, >>> in part because they are “invalid” pragma calls (they do not agrees with >>> pragma syntax) and in part because the way to go in pharo is using UFFI >>> (before UFFI it was NB which was largely compatible). >>> >>> I don’t know why ZeroMQ bindings are made using old format, but the way >>> to advance them is to >>> >>> > On 16 Aug 2017, at 23:31, bdurin <bruno.du...@gmail.com> wrote: >>> > >>> > Hi, >>> > >>> > I stumbled upon what seems to me a strange issue in Pharo 5. The >>> RBParser >>> > fails to correctly parse the legacy FFI pragmas. This completely >>> breaks down >>> > the browser, the inspector and debugger (because as far as I >>> understand all >>> > use RBParser to correctly highlight syntax). I had the image crashed >>> and >>> > some red boxes at some point while insisting to inspect and debug. >>> Overall >>> > this is not a big issue but it raises some more general bells to me. >>> > >>> > In order to reproduce this: >>> > - load the official Pharo 5 (curl get.pharo.org/50+vm | bash) >>> > - launch the image (./pharo-ui Pharo.image &) >>> > - add the following repository >>> > MCSmalltalkhubRepository >>> > owner: 'panuw' >>> > project: 'zeromq' >>> > user: '' >>> > password: '' >>> > - load the last versions of ZeroMQ and ConfigurationOfZeroMQ (not sure >>> if >>> > the latter is needed) >>> > - open a Nautilus Browser and look at the class method apiZmqBind:to: >>> of the >>> > ZmqApi class in the ZeroMQ package: you get a MessageNotUnderstood >>> error >>> > (receiver of keywords is nil). You can get past this by clicking on >>> > "Abandon" but the source code is displayed in a corrupted way: >>> > apiZmqBind: s >>> > ocket to: endpoint <cdecl >>> > - repeat a few times by looking at other methods until you get a red >>> box: >>> > then you cannot look at source code any more with this browser. If you >>> are >>> > obstinate and "lucky" you will succeed in crashing the image. >>> > - you can pin the problem by running in a Playground >>> > RBParser parseFaultyMethod: 'apiZmqBind: socket to: endpoint >>> > <cdecl: long ''zmq_bind'' (ZmqApiSocket* char*) >>> module:''zmq''> >>> > ^self externalCallFailed'. >>> > and you'll see that the pragmas is not correctly parsed. (The root >>> cause is >>> > that the legacy adapter RBFFICallPragma does not follow the API >>> defined by >>> > its super class RBPragmaNode (selector, arguments, positions) and so >>> is not >>> > a properly defined node. I corrected the problem by computing and >>> setting >>> > the corresponding instance variables.) >>> > >>> > 1) As a beginner at Pharo, I find it difficult to deal with the various >>> > versions of Pharo. ZeroMQ is the (only) Smalltalk-Pharo binding for >>> zmq. It >>> > dates back to Feb 2014 so I expected it to work in Pharo as of 3 years >>> and a >>> > half later (Pharo 6 dates back to June 2017). >>> > I naively tried to load the package in a Pharo 6 image and it failed >>> because >>> > of a syntax error. As I had read a lot about the various FFI >>> mechanisms, I >>> > quickly understood that it must be because the FFI declarations in >>> pragma >>> > are not supported anymore. >>> > I then loaded the package in a Pharo 5 image and I got the error that I >>> > described. After finding the error and solving it, I guess that the FFI >>> > declaration in pragma was barely supported in Pharo 5, which has >>> already >>> > switched to UFFI and that it is something dating back to Pharo 4. (I >>> did not >>> > try with Pharo 4 as I do not want to work with versions before 5). >>> > Is there a way to know for a package what the compatible Pharo version >>> is? >>> > It seems that currently I have to look at dates, look at the features >>> used >>> > by the package and look for the history of development (fortunately the >>> > mailing lists are easy to search) to understand which version is >>> likely to >>> > work. >>> > Are not deprecations a bit too fast if a package written 3 years ago >>> cannot >>> > work in the latest Pharo version and trigger bugs in Pharo 5, which >>> dates >>> > back to May 2016 (so only a bit more than 2 years after)? >>> > I find it a bit too fast as compared to mainstream languages. To my >>> mind, >>> > either deprecations should be slower or a version/dependencies system >>> should >>> > be there to help users. >>> >>> Most of Pharo is largely compatible. Now, we cannot keep compatibility >>> in some areas more than a couple of versions back because the effort of >>> advance Pharo *and* keep compatibility is just too much. >>> - FFI changed a lot. >>> - Morphic changed something. >>> - Most of the rest is basically the same (just better). >>> >>> > 2) Another question about versions: Pharo 6 is out since June, Pharo 7 >>> is >>> > under development. What is the status of Pharo 5? Already history or >>> still >>> > relevant? >>> > I am asking because I corrected the problem of FFI declaration in >>> pragma, >>> > but it seems to me that it is not useful to publish this change as >>> starting >>> > from Pharo 6 this way to do FFI is not supported. So should I >>> contribute? If >>> > yes, how to "attach" the patch to Pharo 5? >>> >>> Pharo5 is history. >>> We keep one version back (now Pharo6) >>> Again, a matter of effort and resources. >>> >>> > 3) As explained above, in Pharo 5, looking at the source trigger an >>> error. >>> > Even if this looks like a rare corner case, I think that the developer >>> tools >>> > should not trigger bugs when looking at source code, even less trigger >>> a red >>> > box in the source code viewer (in the browser, but the problem also >>> occurs >>> > --less strongly-- when looking at the object in an inspector: there >>> should >>> > not be "error printing" when it is only a syntax highlight problem). >>> If the >>> > code is malformed and the parser used to highlight syntax fails, there >>> > should be a fallback such as the source code being displayed without >>> any >>> > highlight. It sends a very bad impression to have this kind of bugs >>> when one >>> > simply wants to look at code, not even running it. >>> > I have not dug enough in this area of Pharo, but it seems to me that >>> the >>> > parser that is used to build the AST for code execution / method >>> compilation >>> > should not be the same as the parser used to highligh syntax. (Of >>> course I >>> > am not saying that there should be 2 distincts code base for the 2 >>> parsers, >>> > but they should at least run differently.) The first one must be >>> strict with >>> > errors as a malformed AST cannot be executed. The second one must be >>> > lenient, as a malformed AST does not prevent to print the string of the >>> > source code. Of course, at the end if the code is malformed there will >>> be an >>> > error at execution, but if the source code can be displayed even when >>> it is >>> > malformed, at least I have the opportunity to correct it so that it >>> runs >>> > correctly. (In this case, convert the old FFI pragma declaration into a >>> > fficall:) >>> > I may be missing something here but if this works the same in the most >>> > up-to-date version of Pharo, the same kind of error might appear again. >>> > What do you think? >>> >>> Sorry, but we will not accept old pragma format (as I said, is invalid… >>> and ugly ;) ). >>> What I suggest is to rewrite the bindings of ZeroMQ to UFFI: it should >>> be very straight forward and you will be contributing to the community in a >>> way that will remain quite some years at least. >>> > >>> > 4) A final remark: let us classify people as Beginner/Confirmed in >>> > programming and B/C in Pharo (A BB is a beginner in programming and in >>> > Pharo, a CC confirmed in both, a BC cannot exists and CB are those who >>> > discover Pharo while knowing well other languages). Pharo seems to be >>> great >>> > for BB and CC. I went through the MOOC and the various books which are >>> > great. My first steps in Pharo environment were great. >>> > As a CC it seems to be great also as in the very small area of the >>> system >>> > where I took the time to drill into all the details, I could very >>> easily >>> > change things (and correct a bug), that would have been very difficult >>> to >>> > understand and change in a lot of other languages. Even hacking the VM >>> seems >>> > to be possible for a non-VM expert. >>> > But I consider myself rather as a CB. As such I tend to try and do >>> complex >>> > things that I usually do in other languages and run into tricky >>> problems. >>> > These problems are rather dealt with and corrected by Pharo developers >>> but >>> > that as a user I would expect them to remain hidden to me or to be >>> clearly >>> > advertised in the docs. As compared to a BB, a CB is not going to stay >>> in a >>> > well delimited area where everything is smooth. >>> > True, in a way it is a very strong incentive to become a Pharo expert! >>> But I >>> > am wondering if this aspect could be improved. >>> >>> thing is… non OO programmers will have problems to understand a pure OO >>> language. >>> people working with Java, C#, C++ and others may think they do OO, but >>> they don’t most of the time… then, switching paradigms is hard work. >>> even worst, smalltalk syntax is considered “alien” to people used to >>> algol-based languages. >>> >>> but we cannot do much more than we are trying to achieve in this area: >>> make Pharo more compatible with “the rest of the world” when it make sense, >>> but strongly stay in our “alieness” when it has sense (syntax, pureness, >>> etc.). >>> >>> Esteban >>> >>> > >>> > Thanks, >>> > Bruno >>> > >>> > >>> > >>> > -- >>> > View this message in context: http://forum.world.st/Parser-f >>> ailure-on-FFI-pragmas-declaration-in-Pharo-5-tp4961737.html >>> > Sent from the Pharo Smalltalk Users mailing list archive at Nabble.com. >>> > >>> >>> >>> >> > > > -- > > > > Guille Polito > > > Research Engineer > > French National Center for Scientific Research - *http://www.cnrs.fr* > <http://www.cnrs.fr> > > > > *Web:* *http://guillep.github.io* <http://guillep.github.io> > > *Phone: *+33 06 52 70 66 13 <+33%206%2052%2070%2066%2013> >