> On 22 Jan 2020, at 18:29, John Brant <[email protected]> wrote:
>
> On Jan 22, 2020, at 5:20 AM, Benoit St-Jean via Pharo-dev
> <[email protected]> wrote:
>>
>> Who, in their right mind, would code like that? Is it a trend among younger
>> Smalltalkers while dinosaurs like me just "naturally" still use the "old
>> way" and blocks?
>
> Using symbols for blocks has been around for quite some time. I heard about
> it from Ward Cunningham about 25 years ago. Early Smalltalk images were
> limited by the number of objects that could exist. If you used a block, then
> you needed to create an object for that block, but if you used a symbol, you
> didn’t need any additional objects as the symbol already existed. When I
> heard about this, I didn’t know of any Smalltalk’s that implemented
> Symbol>>value: in their base classes. I think it was a couple years later
> before I started seeing it used.
This is a fun perspective.
To me this is do we want to have a language that is super permissive instead of
permissive and at which costs.
Not measuring costs is not a good way to take decision.
> As for whether Symbol>>value: should exist in the base Pharo image, I don’t
> have a strong opinion. There are a bunch of methods/classes that could be
> removed from the base image and put into add-on packages. As for whether
> Pharo should allow someone to create such a method, I think it should. It
> really isn’t any different from allowing me to add any method to any other
> class. As for the readability of the code, once you know the symbol as block
> “trick”, I find that they are both almost equally readable. In fact, the
> symbol version may be a little more readable as when you scan the block, you
> must check the receiver is “each” and not something else like “self” (which
> is the same length as “each”). Finally, as for making a type inferencer more
> complex, dealing with dynamically typed Smalltalk is already a complex job so
> if you can handle it without symbol blocks, I doubt that it would take much
> more to add support for them.
I will discuss it next week with Pablo because he wrote one.
>
> BTW, there are other objects that implement #value:, and can be used instead
> of blocks. For example, to get a collection of the first 256 characters:
> (0 to: 255) collect: Character
To me this is not needed. Again my point is does it bring something for real or
this is just a nice hack.
And what is the impact.
>
>
> John Brant