[Cuis-dev] extending the syntax for blocks and methods

Mariano Montone marianomontone at gmail.com
Sat Jul 16 12:23:56 PDT 2022


Hi,

for those interested, there are some possible Smalltalk syntax 
extensions considered in this talk: 
https://www.youtube.com/watch?v=ZM2opfrGBXY

      Mariano

El 15/7/22 a las 15:38, Francisco Garau via Cuis-dev escribió:
> Hola Amigos -- just wanted to share with you some ideas I've been 
> thinking about for a while.
>
> It all started when someone mentioned the colon in the syntax for 
> block arguments could have whitespace around the argument so that you 
> could write [ : n | n + 1]
>
> It makes perfect sense to see the block as an "inlined" method that 
> doesn't require any method-lookup; therefore, the selector is 
> superfluous. But if we accepted the selector inside the block, it 
> could be used as the variable holding the block. So, instead of 
> writing succ := [:n | n + 1]  we could write [succ: n | n + 1]
>
> Even better if the block evaluation accepts #: as a valid selector.  
> So you could write (succ: 3) = 4 instead of (succ value: 3) = 4.
>
> A short example will make this clear.
>
>     Vanilla Smalltalk
>
>         succ := [:n | n + 1].
>
>         (succ value: 3) = 4.
>
>
>     Extended Block Syntax
>
>         [succ: n | n + 1].
>
>         (succ: 3 ) = 4.
>
>         "the above is equivalent to"
>
>         (succ perform: #: with: 3) = 4.
>
>
>     Being able to parse blocks with these syntax paves the way to
>     unify the syntax for method definition—for example, a few
>     hypothetical methods from the Point class.
>
>         "Point class>x:y:"
>
>         [x: xInteger y: yInteger |
>
>            ^self basicNew setX: xInteger setY: yInteger].
>
>
>         "Point>>abs"
>
>         [abs |
>
>            ^x abs @ y abs].
>
>
>         "Point>>extent:"
>
>         [extent: aPoint |
>
>            ^Rectangle origin: self extent: aPoint]
>
>
> Of course, it gets trickier when blocks have more than one argument..
>
>     [add: a to: b | a + b].
>
>     (add_to value: 3 value: 4) = 7. "old style block evaluation"
>
>     (add: 3 to: 4) = 7.
>
> I think building a separate Parser is a sensible approach -- is there 
> a Smalltalk Parser as a separate package that can be tweaked without 
> affecting the running image?
>
> Thanks,
> Francisco
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.cuis.st/mailman/archives/cuis-dev/attachments/20220716/7710f0ad/attachment-0001.htm>


More information about the Cuis-dev mailing list