[Pharo-dev] [Ann] Class meta annotations

Guillermo Polito guillermopolito at gmail.com
Wed Oct 4 08:43:56 EDT 2017


On Wed, Oct 4, 2017 at 10:51 AM, Denis Kudriashov <dionisiydk at gmail.com>
wrote:

> 2017-10-04 9:48 GMT+02:00 Guillermo Polito <guillermopolito at 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?
>

Nope, imagine you do


RenamePackageCommand class>>packageBrowserShortcutActivation

<classAnnotation>

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


If your someInstVarOfMyClass changes its value after the creation of the
Annotation object, you're dead.


>
>> 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.
>

Yes, I get that and I like the idea that the Annotation is not just a
command pattern with an execute method. It can be more than that and that's
the interesting part of it. Otherwise a normal pragma can just replace 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 <sean at 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.ht
>>> ml
>>>
>>>
>>
>>
>> --
>>
>>
>>
>> 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>
>>
>
>


-- 



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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.pharo.org/pipermail/pharo-dev_lists.pharo.org/attachments/20171004/c0d8f57d/attachment-0002.html>


More information about the Pharo-dev mailing list