2017-10-04 9:48 GMT+02:00 Guillermo Polito <guillermopol...@gmail.com>:

> I'd even call them First class pragmas from that point of view :P
>

Yes.
But we decided avoid pragma related names here. Because in future it can be
possible to add normal pragmas into the class definition.


>
> I wonder what are the side-effects of instantiating the annotation
> yourself in a method.
>
> specialAnnotationExample
>     <classAnnotation>
>     ^MySpecialAnnotation new
>

I not understand the question. You supposed to return an *instance* of the
annotation from the "annotating method".


>
> I mean, I understand we can use the class state to initialize the
> annotation. But the fact that the annotation is cached after its first
> instantiation means that the annotation will not necessarily evolve as the
> class evolves.
>

Cache is updated after related class changes: method added, removed and so
on (driven by PragmaCollector logic). So outdated annotations should not
exist.
Is it what you ask?


> Do we want annotations to be stateless? Or depend only in literals?
>

I want annotations to be any object with any state inside. Of course you
will be restricted by what is visible from the class side. But in
"annotating method" you can create any complex object (see below).


> I wonder then what is the main difference with
>
> specialAnnotationExample
>     <classAnnotation: MySpecialAnnotation>
>
> And what is the impact of having an annotation with parameters.
>

Generally it is same like having pragma with parameters.
But with annotation you are not restricted by literal objects. So
annotation parameters can be anything.

And it is important feature for Commander.
For example I need instance of KMKeyCombination to define shortcut for
command. So I just use normal expression for this:

RenamePackageCommand class>>packageBrowserShortcutActivation

<classAnnotation>

^CmdShortcutCommandActivation by: *$r meta* for: ClyPackageBrowserContext


It will be very complicated to express it with method pragma and it will be
restricted anyway.

Another important point is that class annotation is first class object
which means that you can add behaviour to it. With method pragma you can
not.
For example shortcut annotation includes method to check given key event
and execute command if it is satisfied.

Is it now clear?


> On Tue, Oct 3, 2017 at 9:02 PM, Sean P. DeNigris <s...@clipperadams.com>
> wrote:
>
>> Denis Kudriashov wrote
>> > If you will use method pragma then you will repeat logic of this
>> library:
>> > In your code you will need...
>>
>> So it sounds like it's pragmas++ - the functionality of pragmas plus some
>> other stuff you may need that you'd have to roll on your own
>>
>>
>>
>> -----
>> Cheers,
>> Sean
>> --
>> Sent from: http://forum.world.st/Pharo-Smalltalk-Developers-f1294837.html
>>
>>
>
>
> --
>
>
>
> Guille Polito
>
> Research Engineer
>
> Centre de Recherche en Informatique, Signal et Automatique de Lille
>
> CRIStAL - UMR 9189
>
> 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>
>

Reply via email to