Hi,

Changing the syntax is an expensive thing because every syntactical construct 
introduces new constraints that can have deep implications in the multiple 
layers built on top. One reason why our tooling is so nimble is exactly that 
the AST of the language is so small.

It is for this reason that we should approach any syntactical extension with 
outmost care and rigor.

I am not at all convinced that quasi-quoting is relevant enough to have it in 
the syntax. There are some libraries that can benefit from them, but we could 
well handle those cases with appropriate API. Perhaps you can change my opinion 
with concrete examples revealing the value such a construct would add in 
comparison with a fluent API.

That said, I do want to have mechanisms that allow us to embed other languages 
and DSLs in our environment. In this area I prefer the approach put forward by 
Helvetia because it is not invasive and highly flexible (and now should even 
not be expensive to have anymore).

Cheers,
Doru


> On Mar 1, 2017, at 9:15 PM, DavidLeibs <[email protected]> wrote:
> 
> Let me add some more motivation and background for the discussion. I
> responded to [email protected] questions by mail yesterday but it didn't
> wind up on the forum.  Sorry about that.
> 
> http://www.erights.org/elang/quasi/overview.html
> Provides very good background for quasi-liberals. I believe this work lead
> to the ES6 solution by way of Mark Miller.
> 
> As to macros I would posit that you have been using them in Smalltalk80 all
> along without the benefit of having the capability for yourself.  There are
> a classic set of selectors that get special processing by the compiler. "to:
> do:" is an example of one. It gets turned into a while loop by AST
> transformation. These special selectors that are really macros are known to
> the compiler in a special table. A proper macro system opens the capability
> up everyone.
> 
> As to 30 years without noticing that macros were needed, I would say they
> are long over due. I needed them back in 1997 when Adele Goldberg and I had
> a company called Neometron. We used them for for a large system that had
> thousands of templates in a template language which had escapes Smalltalk80
> code embedded within. Also embedded within the tempting code and Smalltalk
> code was SQL code.  This was allowed to be recursive so it was a little
> language free for all. We did not want string concatenation style coding
> with errors only found at run time. By having a Smalltalk80 with macros and
> quasi-literal little languages we and our non programmer users continued to
> compile method by method in the browser as usual but all the errors in
> template or sql syntax were found at compile time. There were no external
> files and everything continued to work with Change Sets and Change List
> technology that allowed recovering after a crash. The compile time
> processing by way of compiler staging plugins also allowed for an order of
> magnitude performance increase because there was a lot of evaluations that
> could be done in advance. By doing the work properly in the parser and
> compiler and making sure code transformations tracked source code offsets
> proper single stepping in the debugger was preserved.  Of course if really
> aggressive rewriting was done you would sometimes have to debug in the
> expansion but we emitted code to help the debugger with macros  and custom
> optimizations. The need to debug some macros in the expansion is a very old
> unsolved problem.
> 
> Sadly, I was unable to convince Eliot and Steve Dahl to incorporate the work
> into Visualworks 20 years ago. Also sadly, I don't spend a lot of effort
> arguing with people that don't understand the need for some technology I see
> as useful. I have continually had to wait years before the time was right.
> :-)
> 
> I know this will sound a bit "Snarky" but for more examples I suggest taking
> a look at 60 years of Lisp. Stochastic sampeling of the corpus should be
> revealing. :-)
> 
> And now for a appeal to authority, 
> 
> "Lisp isn't a language, it's a building material."
> 
> - Alan Kay
> 
> 
> and in conclusion:
> 
> Simple quasi-literally are relatively easy and can be done with out being
> too disruptive. A real macro system takes very careful design that leads to
> compiler plugins that can go way beyond macros and open up a world compile
> time meta programming and the wonderful world of application dependent
> optimizations.
> 
> cheers,
> -David (voice from the distant past) Leibs
> 
> 
> 
> --
> View this message in context: 
> http://forum.world.st/Re-vwnc-Does-anyone-have-a-new-string-literal-tp4667088p4936696.html
> Sent from the Pharo Smalltalk Developers mailing list archive at Nabble.com.
> 

--
www.tudorgirba.com
www.feenk.com

"Speaking louder won't make the point worthier."


Reply via email to