<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">2017-10-04 9:50 GMT+02:00 Guillermo Polito <span dir="ltr"><<a href="mailto:guillermopolito@gmail.com" target="_blank">guillermopolito@gmail.com</a>></span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">if the compiler plugin correctly models such special syntax with special AST nodes, that could be even possible without much effort</div></blockquote><div><br></div><div>Interesting. Would that imply that by having those special ast nodes, we would get the decompilation working for the debugger?</div><div><br></div><div>Thierry</div><div><br></div><div><br></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="HOEnZb"><div class="h5"><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Oct 3, 2017 at 5:42 PM, 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:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><br><div class="gmail_extra"><div class="gmail_quote"><span>2017-10-03 17:39 GMT+02:00 Denis Kudriashov <span dir="ltr"><<a href="mailto:dionisiydk@gmail.com" target="_blank">dionisiydk@gmail.com</a>></span>:<br></span><span><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Hi.<div><br></div><div>While idea looks cool it will require a lot of tool support. Senders, var/class references, rename refactorings should be aware of it</div></div></blockquote><div><br></div></span><div>And I forgot debugger. It should be possible to step over "interpolated expressions"</div><div><div class="m_2475340828969089667h5"><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="m_2475340828969089667m_5833182991322136262HOEnZb"><div class="m_2475340828969089667m_5833182991322136262h5"><div class="gmail_extra"><br><div class="gmail_quote">2017-10-03 17:29 GMT+02:00 Damien Pollet <span dir="ltr"><<a href="mailto:damien.pollet@gmail.com" target="_blank">damien.pollet@gmail.com</a>></span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><span>On 3 October 2017 at 14:07, Guillermo Polito <span dir="ltr"><<a href="mailto:guillermopolito@gmail.com" target="_blank">guillermopolito@gmail.com</a>></span> wrote:<br></span><div class="gmail_extra"><div class="gmail_quote"><span><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Why not having an opal plugin?<div><br></div><div>The opal plugin may read strings in the form:</div><div><br></div><div>"lalala {some expression} lololo"</div><div><br></div><div>and replace at compile time that by:</div><div><br></div><div>"lalala {1} lololo" format { some expression }</div></div></blockquote><div><br></div></span><div>If we're going to extend the compiler, we might as avoid parsing at runtime by desugaring more like:</div><div><br></div><div>String streamContents: [:str |</div><div>    str</div><div>        nextPutAll: 'lalala ';</div><div>        nextPutAll: (some expression) printString;</div><div>        nextPutAll: ' lololo' ]</div><span><div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div>The thing to think about is what is the delimiter for {some expression}.</div><div> - a too used one may break lots of existing code.</div></div></blockquote><div><br></div></span><div>…or we could change the string quotes to mean "dynamic string in which interpolations can be used" and keep single quotes for literal strings only.</div><span><div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div> - and we should escape it</div></div></blockquote><div><br></div></span><div>indeed</div><div><div class="m_2475340828969089667m_5833182991322136262m_-7111429873008588119h5"><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="gmail_extra"><div><div class="m_2475340828969089667m_5833182991322136262m_-7111429873008588119m_1684874230452271837h5"><div class="gmail_quote">On Fri, Sep 29, 2017 at 5:40 AM, Sven Van Caekenberghe <span dir="ltr"><<a href="mailto:sven@stfx.eu" target="_blank">sven@stfx.eu</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span><br>
<br>
> On 29 Sep 2017, at 08:54, Pavel Krivanek <<a href="mailto:pavel.krivanek@gmail.com" target="_blank">pavel.krivanek@gmail.com</a>> wrote:<br>
><br>
> This solution will not work for environments without sources too where names like t1, t2 are used for temporary variables.<br>
<br>
</span>That is true.<br>
<br>
I often wonder why we can't keep at least the variables names, it would not be that expensive. There was this problem with FFI that needed source code access as well. It would also help the debugger and make the decompiler more powerful.<br>
<div class="m_2475340828969089667m_5833182991322136262m_-7111429873008588119m_1684874230452271837m_4972428572890240002HOEnZb"><div class="m_2475340828969089667m_5833182991322136262m_-7111429873008588119m_1684874230452271837m_4972428572890240002h5"><br>
> Anyway, nice idea.<br>
><br>
> -- Pavel<br>
><br>
> Dne čtvrtek 28. září 2017 Sven Van Caekenberghe <<a href="mailto:sven@stfx.eu" target="_blank">sven@stfx.eu</a>> napsal(a):<br>
> Hi,<br>
><br>
> I got into a little office discussion about string interpolation as it is done in different programming languages.<br>
><br>
> In Pharo we have String>>#format: which is pretty nice. It works as follows:<br>
><br>
> | x y |<br>
> x := 123.<br>
> y := #foo.<br>
> 'x={1} and y={2}' format: { x. y }.<br>
><br>
> It is also possible to use a dictionary with keys, like this:<br>
><br>
> | x y |<br>
> x := 123.<br>
> y := #foo.<br>
> 'x={x} and y={y}' format: { #x->x. #y->y } asDictionary.<br>
><br>
> But this is not true string interpolation as described in [ <a href="https://en.wikipedia.org/wiki/String_interpolation" rel="noreferrer" target="_blank">https://en.wikipedia.org/wiki/<wbr>String_interpolation</a> ]. The idea is to write the value generating expressions directly inside the strings.<br>
><br>
> Since in Pharo we add features not by extending the syntax but by adding messages I wondered if it could be done for string interpolation. The goal is to make the following work:<br>
><br>
> | x y |<br>
> x := 123.<br>
> y := #foo.<br>
> 'It seems x equals {x} and y equals {y} while Pi is still {Float pi}' interpolate.<br>
><br>
>  => 'It seems x equals 123 and y equals foo while Pi is still 3.141592653589793'<br>
><br>
> Here is the implementation I came up with:<br>
><br>
> String>>#interpolate<br>
>   "Format the receiver by interpolating the evaluation of expressions<br>
>   in between curly brackets in the context of the sender as in the following 3 oneline examples.<br>
>   'Today is {Date today}' interpolate.<br>
>   | x | x := 123. 'x equals {x} and pi equals {Float pi}' interpolate.<br>
>   'In {#strings} you can escape \{ by prefixing it with \\' interpolate."<br>
><br>
>   | senderContext |<br>
>   senderContext := thisContext sender.<br>
>   ^ self class new: self size streamContents: [ :out | | stream |<br>
>       stream := self readStream.<br>
>       [ stream atEnd ] whileFalse: [ | currentChar |<br>
>         (currentChar := stream next) == ${<br>
>           ifTrue: [ | expression result |<br>
>             expression := stream upTo: $}.<br>
>             result := Compiler new<br>
>               evaluate: expression in: senderContext to: nil notifying: nil ifFail: [ ^ nil ] logged: false.<br>
>             out nextPutAll: result asString ]<br>
>           ifFalse: [<br>
>             currentChar == $\<br>
>               ifTrue: [ stream atEnd ifFalse: [ out nextPut: stream next ] ]<br>
>               ifFalse: [ out nextPut: currentChar ] ] ] ]<br>
><br>
> It is a hack that could certainly be improved. And there is of course an obvious security problem.<br>
><br>
> Thoughts ?<br>
><br>
> Sven<br>
><br>
><br>
<br>
<br>
</div></div></blockquote></div><br><br clear="all"><div><br></div></div></div>-- <br><div class="m_2475340828969089667m_5833182991322136262m_-7111429873008588119m_1684874230452271837m_4972428572890240002gmail_signature" data-smartmail="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:86.0px;height:84.0px;border-style:solid;border-width:0.0px 1.0px 0.0px 0.0px;border-color:transparent #000000 transparent transparent;padding:4.0px 4.0px 4.0px 4.0px">
<p style="margin:0.0px 0.0px 0.0px 0.0px;min-height:14.0px"><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 width="200" height="112"><img alt="" style="font-size:12.8px;margin:5px" width="96" height="96"></p>















</td><td valign="top" style="width:378.0px;height:84.0px;border-style:solid;border-width:0.0px 0.0px 0.0px 1.0px;border-color:transparent transparent transparent #000000;padding:4.0px 4.0px 4.0px 4.0px"><p style="margin:0.0px 0.0px 0.0px 0.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:0.0px 0.0px 0.0px 0.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:0.0px 0.0px 0.0px 0.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:0.0px 0.0px 0.0px 0.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:0.0px 0.0px 0.0px 0.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:0.0px 0.0px 0.0px 0.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:0.0px 0.0px 0.0px 0.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>
</div>
</blockquote></div></div></div><span class="m_2475340828969089667m_5833182991322136262m_-7111429873008588119HOEnZb"><font color="#888888"><br><br clear="all"><div><br></div>-- <br><div class="m_2475340828969089667m_5833182991322136262m_-7111429873008588119m_1684874230452271837gmail_signature" data-smartmail="gmail_signature">Damien Pollet<br>type less, do more [ | ] <a href="http://people.untyped.org/damien.pollet" target="_blank">http://people.untyped.org/dami<wbr>en.pollet</a><br></div>
</font></span></div></div>
</blockquote></div><br></div>
</div></div></blockquote></div></div></div><br></div></div>
</blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="m_2475340828969089667gmail_signature" data-smartmail="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:86.0px;height:84.0px;border-style:solid;border-width:0.0px 1.0px 0.0px 0.0px;border-color:transparent #000000 transparent transparent;padding:4.0px 4.0px 4.0px 4.0px">
<p style="margin:0.0px 0.0px 0.0px 0.0px;min-height:14.0px"><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 width="200" height="112"><img alt="" style="font-size:12.8px;margin:5px" width="96" height="96"></p>















</td><td valign="top" style="width:378.0px;height:84.0px;border-style:solid;border-width:0.0px 0.0px 0.0px 1.0px;border-color:transparent transparent transparent #000000;padding:4.0px 4.0px 4.0px 4.0px"><p style="margin:0.0px 0.0px 0.0px 0.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:0.0px 0.0px 0.0px 0.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:0.0px 0.0px 0.0px 0.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:0.0px 0.0px 0.0px 0.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:0.0px 0.0px 0.0px 0.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:0.0px 0.0px 0.0px 0.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:0.0px 0.0px 0.0px 0.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>
</div>
</div></div></blockquote></div><br></div></div>