<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Oct 4, 2017 at 10:51 AM, Denis Kudriashov <span dir="ltr"><<a href="mailto:dionisiydk@gmail.com" target="_blank">dionisiydk@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><span class="gmail-">2017-10-04 9:48 GMT+02:00 Guillermo Polito <span dir="ltr"><<a href="mailto:guillermopolito@gmail.com" target="_blank">guillermopolito@gmail.com</a>></span>:<br></span><div class="gmail_extra"><div class="gmail_quote"><span class="gmail-"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr">I'd even call them First class pragmas from that point of view :P</div></blockquote><div><br></div></span><div>Yes.</div><div>But we decided avoid pragma related names here. Because in future it can be possible to add normal pragmas into the class definition.</div><span class="gmail-"><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div><br></div><div>I wonder what are the side-effects of instantiating the annotation yourself in a method.</div><div><br></div><div><div>specialAnnotationExample<div>    <classAnnotation><div>    ^MySpecialAnnotation new</div></div></div></div></div></blockquote><div><br></div></span><div>I not understand the question. You supposed to return an <b>instance</b> of the annotation from the "annotating method".</div><span class="gmail-"><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div><br></div><div>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. </div></div></blockquote><div><br></div></span><div>Cache is updated after related class changes: method added, removed and so on (driven by PragmaCollector logic). So outdated annotations should not exist.</div><div>Is it what you ask?</div></div></div></div></blockquote><div><br></div><div>Nope, imagine you do</div><div><br></div><div><div class="gmail_extra"><div class="gmail_quote"><br class="gmail-Apple-interchange-newline">RenamePackageCommand class>><wbr>packageBrowserShortcutActivati<wbr>on</div></div><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px"><div class="gmail_extra"><div class="gmail_quote"><classAnnotation> </div></div></blockquote><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px"><div class="gmail_extra"><div class="gmail_quote">^CmdShortcutCommandActivation by: <b>$r meta</b> for: someInstVarOfMyClass</div><div class="gmail_quote"><br></div></div></blockquote></div><div> </div><div>If your someInstVarOfMyClass changes its value after the creation of the Annotation object, you're dead.<br></div><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><span class="gmail-"><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div>Do we want annotations to be stateless? Or depend only in literals?</div></div></blockquote><div><br></div></span><div>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).</div><span class="gmail-"><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div><br></div><div>I wonder then what is the main difference with<br></div><div><br></div><div>specialAnnotationExample<div>    <classAnnotation: MySpecialAnnotation></div><div><br></div></div><div>And what is the impact of having an annotation with parameters.</div></div></blockquote><div><br></div></span><div>Generally it is same like having pragma with parameters. </div><div>But with annotation you are not restricted by literal objects. So annotation parameters can be anything.</div><div><br></div><div>And it is important feature for Commander. </div><div>For example I need instance of KMKeyCombination to define shortcut for command. So I just use normal expression for this:</div><div><br></div></div></div><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px"><div class="gmail_extra"><div class="gmail_quote"><div>RenamePackageCommand class>><wbr>packageBrowserShortcutActivati<wbr>on</div></div></div><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px"><div class="gmail_extra"><div class="gmail_quote"><div><classAnnotation> </div></div></div></blockquote><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px"><div class="gmail_extra"><div class="gmail_quote"><div>^CmdShortcutCommandActivation by: <b>$r meta</b> for: ClyPackageBrowserContext</div></div></div></blockquote></blockquote><div class="gmail_extra"><div class="gmail_quote"><div> </div><div>It will be very complicated to express it with method pragma and it will be restricted anyway.</div><div><br></div><div>Another important point is that class annotation is first class object which means that you can add behaviour to it. </div></div></div></div></blockquote><div><br></div><div>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.</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><div>With method pragma you can not.</div><div>For example shortcut annotation includes method to check given key event and execute command if it is satisfied.</div><div><br></div><div>Is it now clear?</div><span class="gmail-"><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div class="gmail_extra"><div><div class="gmail-m_-931290205056579644gmail-h5"><br><div class="gmail_quote">On Tue, Oct 3, 2017 at 9:02 PM, Sean P. DeNigris <span dir="ltr"><<a href="mailto:sean@clipperadams.com" target="_blank">sean@clipperadams.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Denis Kudriashov wrote<br>
> If you will use method pragma then you will repeat logic of this library:<br>
> In your code you will need...<br>
<br>
So it sounds like it's pragmas++ - the functionality of pragmas plus some<br>
other stuff you may need that you'd have to roll on your own<br>
<br>
<br>
<br>
-----<br>
Cheers,<br>
Sean<br>
--<br>
Sent from: <a href="http://forum.world.st/Pharo-Smalltalk-Developers-f1294837.html" rel="noreferrer" target="_blank">http://forum.world.st/Pharo-Sm<wbr>alltalk-Developers-f1294837.ht<wbr>ml</a><br>
<br>
</blockquote></div><br><br clear="all"><div><br></div></div></div><span class="gmail-m_-931290205056579644gmail-">-- <br><div class="gmail-m_-931290205056579644gmail-m_-1456277388619170048gmail_signature"><div dir="ltr"><div><div dir="ltr"><table cellspacing="0" cellpadding="0" style="border-collapse:collapse">
<tbody>
<tr>
<td valign="top" style="width:86px;height:84px;border-style:solid;border-width:0px 1px 0px 0px;border-color:transparent rgb(0,0,0) transparent transparent;padding:4px">
<p style="margin:0px;min-height:14px"><font face="Helvetica" color="#000000" style="font-stretch:normal;font-size:10px;line-height:normal;font-family:Helvetica;color:rgb(0,0,0)"> </font><span style="font-family:Helvetica;font-size:10px"> </span><span style="font-family:Helvetica;font-size:10px"> </span><img src="https://www.cristal.univ-lille.fr//videos/presentation.jpg" width="200" height="112"><img src="https://intranet.cnrs.fr/Cnrs_pratique/communiquer/guides/PublishingImages/CNRS-filaire-Bichro-CMJN.jpg" alt="" style="font-size: 12.8px; margin: 5px;" width="96" height="96"></p>















</td><td valign="top" style="width:378px;height:84px;border-style:solid;border-width:0px 0px 0px 1px;border-color:transparent transparent transparent rgb(0,0,0);padding:4px"><p style="margin:0px"><font face="Helvetica" color="#000000" style="font-stretch:normal;font-size:10px;line-height:normal;font-family:Helvetica;color:rgb(0,0,0)">Guille Polito</font></p><p style="margin:0px"><span style="color:rgb(0,0,0);font-family:Helvetica;font-size:10px">Research Engineer</span></p><p style="margin:0px;font-stretch:normal;font-size:10px;line-height:normal;font-family:Helvetica;color:rgb(0,0,0);min-height:10px"><font></font></p><p style="margin:0px"><font face="Helvetica" color="#000000" style="font-stretch:normal;font-size:10px;line-height:normal;font-family:Helvetica;color:rgb(0,0,0)">Centre de Recherche en Informatique, Signal et Automatique de Lille</font></p><p style="margin:0px"><font face="Helvetica" color="#000000" style="font-stretch:normal;font-size:10px;line-height:normal;font-family:Helvetica;color:rgb(0,0,0)">CRIStAL - UMR 9189</font></p>
<p style="margin:0px"><font face="Helvetica" color="#000000" style="font-stretch:normal;font-size:10px;line-height:normal;font-family:Helvetica;color:rgb(0,0,0)">French National Center for Scientific Research - <font><u><a href="http://www.cnrs.fr" target="_blank">http://www.cnrs.fr</a></u></font></font></p><p style="margin:0px;font-stretch:normal;font-size:10px;line-height:normal;font-family:Helvetica;color:rgb(0,0,0);min-height:10px"><br></p>
<p style="margin:0px"><font face="Helvetica" color="#000000" style="font-stretch:normal;font-size:10px;line-height:normal;font-family:Helvetica;color:rgb(0,0,0)"><b>Web:</b> <a href="http://guillep.github.io" target="_blank"><font><u>http://guillep.github.io</u></font></a></font></p>
<p style="margin:0px"><font face="Helvetica" color="#000000" style="font-stretch:normal;font-size:10px;line-height:normal;font-family:Helvetica;color:rgb(0,0,0)"><b>Phone: </b><a href="tel:+33%206%2052%2070%2066%2013" value="+33652706613" target="_blank">+33 06 52 70 66 13</a></font></p>
</td>
</tr>
</tbody>
</table></div></div></div></div>
</span></div>
</blockquote></span></div><br></div></div>
</blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature"><div dir="ltr"><div><div dir="ltr"><table cellspacing="0" cellpadding="0" style="border-collapse:collapse">
<tbody>
<tr>
<td valign="top" style="width:86px;height:84px;border-style:solid;border-width:0px 1px 0px 0px;border-color:transparent rgb(0,0,0) transparent transparent;padding:4px">
<p style="margin:0px;min-height:14px"><font face="Helvetica" color="#000000" style="font-stretch:normal;font-size:10px;line-height:normal;font-family:Helvetica;color:rgb(0,0,0)"> </font><span style="font-family:Helvetica;font-size:10px"> </span><span style="font-family:Helvetica;font-size:10px"> </span><img src="https://www.cristal.univ-lille.fr//videos/presentation.jpg" width="200" height="112"><img src="https://intranet.cnrs.fr/Cnrs_pratique/communiquer/guides/PublishingImages/CNRS-filaire-Bichro-CMJN.jpg" alt="" style="font-size: 12.8px; margin: 5px;" width="96" height="96"></p>















</td><td valign="top" style="width:378px;height:84px;border-style:solid;border-width:0px 0px 0px 1px;border-color:transparent transparent transparent rgb(0,0,0);padding:4px"><p style="margin:0px"><font face="Helvetica" color="#000000" style="font-stretch:normal;font-size:10px;line-height:normal;font-family:Helvetica;color:rgb(0,0,0)">Guille Polito</font></p><p style="margin:0px"><span style="color:rgb(0,0,0);font-family:Helvetica;font-size:10px">Research Engineer</span></p><p style="margin:0px;font-stretch:normal;font-size:10px;line-height:normal;font-family:Helvetica;color:rgb(0,0,0);min-height:10px"><font></font></p><p style="margin:0px"><font face="Helvetica" color="#000000" style="font-stretch:normal;font-size:10px;line-height:normal;font-family:Helvetica;color:rgb(0,0,0)">Centre de Recherche en Informatique, Signal et Automatique de Lille</font></p><p style="margin:0px"><font face="Helvetica" color="#000000" style="font-stretch:normal;font-size:10px;line-height:normal;font-family:Helvetica;color:rgb(0,0,0)">CRIStAL - UMR 9189</font></p>
<p style="margin:0px"><font face="Helvetica" color="#000000" style="font-stretch:normal;font-size:10px;line-height:normal;font-family:Helvetica;color:rgb(0,0,0)">French National Center for Scientific Research - <font><u><a href="http://www.cnrs.fr" target="_blank">http://www.cnrs.fr</a></u></font></font></p><p style="margin:0px;font-stretch:normal;font-size:10px;line-height:normal;font-family:Helvetica;color:rgb(0,0,0);min-height:10px"><br></p>
<p style="margin:0px"><font face="Helvetica" color="#000000" style="font-stretch:normal;font-size:10px;line-height:normal;font-family:Helvetica;color:rgb(0,0,0)"><b>Web:</b> <a href="http://guillep.github.io" target="_blank"><font><u>http://guillep.github.io</u></font></a></font></p>
<p style="margin:0px"><font face="Helvetica" color="#000000" style="font-stretch:normal;font-size:10px;line-height:normal;font-family:Helvetica;color:rgb(0,0,0)"><b>Phone: </b>+33 06 52 70 66 13</font></p>
</td>
</tr>
</tbody>
</table></div></div></div></div>
</div></div>