Apologies for the long mail. I wanted to get
these thoughts out now while they are fresh.
Tom

Can Racket make semantics a matter of syntax?
If it can, can it produce errors when certain
syntactic forms are incompatible with the
specified semantics? Can all forms in the
language be mapped to all runtime features
such that each form can be marked as compatible
or incompatible with each feature?

#+proper-tail-calls
#+continuations
#+delimited-contiuations
#+unwind-protect
#+strong-static-types
#+event-loop
#+interpreted-same-as-compiled
#+jit
#+c-preprocessor-style-macros

I was revisiting slib today.
I tried to port it about 3 years ago, and had had no success.

Does LOP work?
This is an academic question.
Can we convince new, untrained folk, to use LOP?
This is a promulgation question.

I think that one powerful argument in favor of LOP would be to use
the Racket ecosystem to implement and support the entire history of
scheme programs.

This demonstration would be a feat that to my knowledge no other programming
environment has ever been able to achieve.

Schemes are notorious for their ... creative extension of standards.
If Racket can demonstrate and provide a practical solution for taking
random scheme code (e.g. by adding #lang r4rs as the first line of a file),
and having the semantics just work, then that would be game changing
beyond the wildest dreams of even the most cynical academics. This
couldn't happen without a monumental effort to provide facilities for
capturing language semantics in a meaningful way beyond simple syntax.

This thread started as syntax, but the quote from Matthias during
the introduction to Racket School seems quite relevant. The real
prize here is not in creating the greatest syntax ever known to humanity [0]
but in the mapping between syntax and semantics. Of the many goals that
Racket2 could pursue, this seems like the one that could have the most
lasting impact. Leave the syntax to #lang algo-me-harder. Syntax can
devolve in a political issue, and in the happy realm of Turing completeness
everyone can have whatever they want as far as syntax is concerned.
You can have all the unicode delimiters you want, I just need my λ.
The real challenge (it seems) is to provide a tool that makes it
possible to translate the semantics of one language to another in
a way that is consistent, understandable, and ideally, performant.
(If it is not performant, then an even greater prize would be to
be able to show which syntactic feature was missing performant
semantic support in the offending runtime.)

It seems to me that Matthew has paved the way for this. The differences in
semantics between Chez Scheme and Racket and Matthew's solutions provide
solid examples for future semantic extensions to Racket. They also provide
a taxonomy of the kinds of changes that would need to be made other runtimes
to support a performant implementation of Racket's syntax.

I can appreciate why Matthew might like to consider alternate direction
after having spent the last 2 years working on performance optimizations
and semantics translation. However, I wonder whether the knowledge gained
as a result is equally valuable. Could it be implemented into Racket
itself? Said another way, can we have #lang common-lisp with all the
syntax, working as a Lisp-2, and have a performant implementation of
unwind-protect that can be used in `#lang r4rs with-extended-semantics`?
Even if we couldn't do this, could Racket be the place where we can
prove (by virtue of the machinery that it provides) that continuations
and unwind-protect are incompatible at a fundamental level? Matthew's
work also means that a solution to this problem might also look like
a page in the documentation which provides a comprehensive overview of
which runtimes provide performant and correct implementations of certain
language features, allowing users to choose their runtime to fit their
needs.

>From a practical standpoint, writing new code almost seems silly when
you can burgle libraries that have had man centuries of development
put into them by writing the translation layer for the semantics --
especially if we get Racket's support for locating bugs by way of syntax
objects.

This vision for Racket2 is beyond pie in the sky, and perhaps a departure
for the usual vision for LOP, but I wonder whether Racket is now ideally
poised to act as the bridge for the infinite and as yet unimagined syntaxes
of the future and the enormous variety of existing runtimes.

I consider it a mark of the maturity of the community that leadership is
planning how to manage the community politics around the next phase of
the language, well in advance of any transition. However, I can't help
but wonder whether there are goals that we all agree on that would avoid
the need for a political process altogether. Maybe the objective of the
political process should be just that -- to find a direction which obviates
the need for said process.

---

[0] The idea that there can be "One syntax to rule them all" seems a
fundamental fallacy to me. Human brains are different. They prefer
different things for structural genetic reasons, as well as for reasons
of habit and familiarity. Trying to optimize for a single most-appealing
form will always alienate someone. Of all the languages out there, Racket
and LOP seem ideally poised to achieve such an individual fit [1].
[1]
https://www.thestar.com/news/insight/2016/01/16/when-us-air-force-discovered-the-flaw-of-averages.html

---

On a completely unrelated note: while we are thinking about the future,
an industrial strength package manager could be a huge boon. Obstacles to
ideas come in many forms, and over time I have found that running the first
hello world program on a system can be on of the hardest and most time
consuming challenges. Reducing the friction all around the ecosystem
seems like it might have the same kind of effect of making any tiny micro
optimizations in a compiler. Individually they don't seem to make any
difference, but together they are revolutionary.

-- 
You received this message because you are subscribed to the Google Groups 
"Racket Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to racket-users+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/racket-users/CA%2BG3_PPkkRqg0uOcV_d%3DxA4wGkc9%2BVeWFWCaZpXQ71vRE1662Q%40mail.gmail.com.

Reply via email to