Stef, all, 

the post below was written by me, not by Stef as it looks.
Due to some funny bug, my email client messed up with headers when I
saved unfinished mail to "Drafts" and then come back to it later.
Time to change email client. 

I'm very sorry for the confusion this caused. 

Jan


On Wed, 2016-06-29 at 11:21 +0100, stepharo wrote:
> 
> 
> On Tue, Jun 28, 2016 at 8:53 PM, stepharo <steph...@free.fr> wrote:
> > When I implemented annotation support I was initially thinking the
> > same - let's create an instance of CoolAnnotationClass when the
> > code is accepted
> > and then one can add arbitrary code to his CoolAnnotationClass. I
> > quickly realized this is a (very) bad idea. Or, to be precise, it
> > is a bad idea given the
> > environment. So I'd be very careful..
> > can you explain your statement?
> 
> Let me try, this is tricky for me as I'm not good at explaining :-) 
> 
> The problems pop out when one need to load the code back. If
> <coolish: 100> gets parsed and stored in
> an annotation container as instance of class Coolish (at compilation
> time),  this means that you just
> introduced a dependency from package of the method which contains the
> annotation to the package of
> Coolish class. This is not (or rather was not in my case) desirable,
> because I need/want to annotate
> methods in kernel with annotations for tools. Kernel should not
> depend or tools - I believe we agree on
> that :-) Note, that this is less of a problem for Java since Java
> loads all code lazily, on demand and in a defined
> way. I personally found it very nice  - though it has some
> (solvable?) issues when this lazy loading is used in Smalltalkish 
> environment such as STX:LIBJAVA)
> 
> You can indeed parse them and store them as raw data and convert them
> on demand in reflective
> API. Then, if the class is not available what to do? Return an
> instance of generic Pragma? 
> Throw an error? When one starts to put an arbitrary code into the
> annotation object itself it's either
> processing  code only access data  or it somehow fiddles about the
> annotation itself and/or (worse!)
> about the method itself. The latter results in difficult to debug
> problems as the time the code is executed
> is undefined (if you use lazy instantiation to avoid dependency
> problem). This may be fine with 
> most Smalltalkers as there are other pieces of code that execute
> randomly in an undefined order and still 
> very few complain :-) but I did not want to make things even worse. 
> For the former, mere data-accessing processing code, I don't see much
> of a difference by putting it 
> somwhere else. Follows the same logic as visitor, instead of putting
> code to nodes, you put them
> to extra visitor class. 
> 
> Eliot's design elegantly avoid these problems (the same way Java does
> :-) by simply having one defined
> structure which keeps the logical type of the annotation as data (the
> selector of the message send).
> It has other problems, but not the one above. 
> 
> Not sure if it makes sense, but I did my best :-) I'm not saying it's
> not solvable and you cannot have
> class per annotation type, but it is not **that** easy to get it
> right. This is my experience over the years. 
> 
> HTH, Jan
> 
> > 
> > Stef
> > 
> > 
> > 
> > Jan
> > 
> > P.S.: As for "which always forced me to hate Java": I found myself
> > a very enlightening to think carefully about why somebody else
> > do things differently before I start to hate her/him. Besides,
> > there's whole lot of things that Java guys got right...
> > 
> > 
> > 

Reply via email to