What would entail actually extending the syntax and adding the set literal?
>From my brief observations (when I was discussing this with OP on discord):
* adding a new AST node
* extend RBParser
* extend IRMethod/IRTranslator... maybe generating bytecode for `{ ... }
asSet` instead would be enough? (not sure how debugger would react to this)
anything else? Would VM changes be required?
Peter
On Sat, Apr 28, 2018 at 8:33 AM, Richard O'Keefe <[email protected]> wrote:
> The ## syntax that some Smalltalks have (Smalltalk/X, for
> example, which calls it a Dolphin extension) is related
> to Common Lisp's
> #.e the result of evaluating e at *read* time,
> taken as a literal
> #,e the result of evaluating e at *load* time,
> taken as a literal.
> This reminds us there are several times that a ## form
> could be evaluated:
> - in the parser, when a method is parsed (before code
> generation)
> - when code is generated
> - when code is generated AND whenever the image is
> restored
> - when the value is first needed (I'd prefer this)
> - when the value is first needed in a thread (that
> is, each thread that encounters it will evaluate
> it just once, so each thread may see a different
> value).
>
> One continuing annoyance in Smalltalk is that I cannot
> put a Fraction, a Date, a Time, or a DateAndTime in a
> literal. It would be nice to have #1969-07-20 or #1/2
> or #16:40:32 as literals and they contain no expressions
> that could result in any confusion about when they are
> evaluated and cannot be changed any more than a character
> literal can.
>
> Curly brace syntax {e1. ... en} is an expression form,
> not a literal form. Similar forms for sets of several
> kinds and dictionaries of several kinds are supported
> in my Smalltalk, and they are indeed useful, but they
> are especially useful because they are *not* literals
> but create new values every time.
>
>
> On 28 April 2018 at 16:13, lb <[email protected]> wrote:
>
>> Hi,
>> I think the question is
>> How automaticly create literal's objects , not initialize.
>> e.g
>> 'aString'
>> #aSymbol
>> { anArray}
>> #[]
>> ............
>>
>> Cheers Liang
>>
>>
>