On 22/07/2019 22:42, Breck Yunits wrote:
> Aloha folks,
>
> I had to miss RacketCon this year as we have a new 6 month old at home
> and couldn't make the trek out.
>
> But I would love to lend my efforts to support the initiative to
> explore a Racket universe without parens. If folks out there are
> working on this, shoot me an email ([email protected] or
> [email protected]) and let me know how I can best help.
>
> I've been working on such a research effort since 2012. I call the
> notation Tree Notation http://treenotation.org/. Basically what I
> propose is splitting things up into 2 concepts: the base Tree Notation
> (which is 80% similar to I-Expressions), and then languages on top of
> that (which is where the #lang could come in).
>
> This syntax is less fragile
> (https://twitter.com/breckyunits/status/1153016840769007616) and makes
> 3 things much easier: program synthesis, data science, and visual
> programming.
>
> I think dropping parens would make a big difference and would be a
> great move for "Racket2"!
>
Thanks for the reference to your tree notation work.
Discussion is proceeding at a breath-taking pace. You might want to
enable notifications ('Watch') for
https://github.com/racket/racket2-rfcs, or you might not depending if
you want your like consumed by the #racket2 hash tag. ;)
> -Breck
>
>
>
> On Saturday, July 20, 2019 at 8:49:13 AM UTC-10, Matthew Flatt wrote:
>
> This message is intended as a prose form of what I said at RacketCon,
> but it includes some extra explanation triggered by the discussion so
> far. Where that happens, I apologize that it isn't in the form of a
> more direct response in the original thread.
>
> The Racket2 Idea
> ----------------
>
> Racket's design and implementation is on solid ground, and from this
> point, it can continue to evolve and improve in many ways. No matter
> how Racket evolves, the community is committed to preserving what we
> have achieved: today's `#lang racket` programs will run in the
> future,
> and today's `#lang racket` modules can be used in future Racket
> programs. At the same time, the current language design may be
> close to
> a local maximum, and it's not in the nature of the Racket
> community to
> be satisfied with a local maximum.
>
> By starting all programs with `#lang`, we have created a path to leap
> from one peak of design to a different, higher peak without
> sacrificing
> the old one and while staying Rackety. Roughly, that's what we
> mean by
> "Racket2". The name "Racket2" stands for some language that builds on
> the current Racket technology and implementation, but that may not
> directly accommodate the same bindings and expression forms that
> appear
> in the body of a `#lang racket` module.
>
> Although we could literally write `#lang racket2` for modules in the
> new language, "Racket2" is normally understood as a placeholder for a
> more distinct name. As a matter of branding, perhaps the language
> would
> be called "Racket X" for some good X --- shortened to "X" in some
> contexts --- and Racket X program would be written with `#lang X`
> line
> at the top. Maybe the name depends on how different Racket2 turns out
> to be from Racket, so it makes sense to pick a name later.
>
> Venturing out from Racket's current peak opens a large space of
> possibilities, so the first step is to agree on a set of goals to be
> met by the next peak. The goals can serve as a starting point for
> developing roadmap for deciding on technical details in a follow-up
> process.
>
> Possible Language Changes
> -------------------------
>
> The Racket community has long discussed possibilities for Racket2.
> Here
> are a few potential changes from the wish list:
>
> * Rename functions to make the conventions more uniform, and make
> better use of keyword arguments to reduce names and increase
> consistency.
>
> * Change structures types to have more or fewer features.
>
> * Use generic datatypes (such as streams) pervasively, instead of
> writing code that expects a particular concrete representation
> (such
> as lists).
>
> * Make strings immutable by default (e.g., result of `format` or
> `string-append`).
>
> * Adjust the semantics of common syntax forms, such as raising an
> error
> on fall-through for `cond` or `match`, and change the meaning of
> some
> primitives, such as making `integer?` mean "exact integer".
>
> * Make pattern matching more pervasive and available by default.
>
> * Change module, evaluation, and loading callbacks (e.g., protocol
> for
> `current-module-name-resolver`) to improve errors and
> extensibility.
>
> More changes have been suggested, and no doubt many other changes
> would
> make sense. As a first cut, to synthesize some principles from these
> ideas --- as a way of selecting which wishes should be tackled and
> how
> --- the current wish list might be organized and summarized by two
> overall goals:
>
> * Make the language more consistent
>
> Consistency means making terminology and binding names more
> consistent, and it means unifying related syntactic constructs. For
> example, the `define` and `define-syntax` forms should perhaps be
> less syntactically distinct. Similarly, pattern matching and syntax
> matching seem closely related and could benefit from using the same
> pattern language. Also, pattern matching should be pervasively
> available among binding forms. Etc.
>
> * Make the language constructs more generic
>
> In many ways, the current Racket language and libraries encourage
> the use of concrete data structures instead of abstract datatypes.
> The `map` function works on lists, for example, not arbitrary
> streams, and even `for` demands concrete declarations like
> `in-list`
> to provide the best performance. Refining the capabilities of
> structures and providing a smoother path among dictionaries,
> structures, and objects may also fit into this category.
>
> There seems to be a widespread agreement/assumption among the
> community
> that we could one day switch all the general documentation, such
> as the
> Racket Guide, to use `#lang X`. That would preserve the ability to
> run
> `#lang racket` modules and import them into `#lang X` modules, but it
> would effectively relegate `#lang racket` to a kind of compatibility
> mode. The Racket community has already done this a couple of times,
> moving from `(module m mzscheme ...)` to `#lang scheme` to `#lang
> racket`, and some of the Racket distribution is still implemented in
> `#lang scheme`. After another switch, the constructs for `racket`
> would
> remain documented and maintained, in the same way as the
> constructs for
> `mzscheme` and `scheme` remain documented and maintained, but
> `racket`
> and its documentation would fade to the background.
>
> Based on the wish list, the scale of changes would likely be much
> larger than in previous transitions. There will many more changes to
> names and changes to the meaning of identifiers that are spell the
> same way. The scale of those changes doesn't seem to worry the Racket
> community.
>
> Surface Syntax
> --------------
>
> You won't find a wish for significant changes the Racket surface
> syntax anywhere on the Racket2 wish list. Nevertheless, I've
> suggested
> tacking it on.
>
> Why now?
>
> If we decide that a change to the surface syntax is a good move, it
> would make sense to try that at the same time as overhauling names
> and
> syntactic forms. Pattern matching, for example, seems like a place
> where syntactic flexibility can help. Besides letting different kinds
> of changes reinforce each other, we'd revise all of the documentation
> just once instead of twice.
>
> There are downsides to tackling both semantic and syntactic
> changes at
> once. If a change to surface syntax is on the table, though, then we
> should at least consider bundling the efforts.
>
> Why at all?
>
> Partly, I believe that a syntax with infix operators, fewer
> parentheses, etc., would be better. That's a matter of opinion,
> but at
> least it's an opinion backed by enough experience with parentheses
> that it can't be written off as uninformed. More significantly,
> parentheses are certainly an obstacle for some potential users of
> Racket. Given the fact of that obstacle, it's my opinion that we
> should try to remove or reduce the obstacle.
>
> Syntax is not just an obstacle for potential users of Racket as a
> programming language, but also for potential users of Racket as a
> programming-language programming language. The idea of
> language-oriented programming (LOP) doesn't apply only to languages
> with parentheses, and we need to demonstrate that. Although we
> already
> have tools for parsing non-parenthesis syntax into parentheses and
> letting macros take over from there, that's not the kind of smooth
> path from simple extension to full language building that we have in
> the S-expression world. While these research problems may not be
> forefront on the minds of all Racket users, keep in mind that Racket
> exists because of research and remains supported almost entirely by
> research.
>
> Adjusting the syntax of Racket to accommodate more users could be
> characterized as an effort to make Racket more popular. I don't think
> it's helpful to characterize the idea that way. Granted, any
> effort to
> reduce barriers is effectively an effort to make Racket more popular.
> In that sense, our efforts on Racket's documentation were an attempt
> to make Racket more popular. The work we put into building the Racket
> distribution and making it easy to install is an attempt to make
> Racket more popular. Creating the package system was an attempt to
> make Racket more popular. All strictly true, I suppose, but the
> characterization feels wrong. There's a difference between reducing
> technical barriers for users of various stripes versus marketing to
> make a product more popular. When I point out that parentheses can be
> a deal-breaker to people outside the Racket community, I do not have
> in mind that we just need a better marketing message; I have in mind
> that the obstacle is real, it affects many people, and we should
> address it.
>
> Who?
>
> From a community perspective, the rub is that the "many people" for
> Racket syntax is a barrier are mostly people outside the community.
> It's fair to ask who would benefit. It's difficult to ask a community
> to tackle a problem whose solution targets a different community.
>
> There's also a question of who really needs to participate in the
> development of a new surface syntax. That part of the project could
> take place in its own `#lang` and stay out of the way of `#lang
> racket` users for years. As a practical matter, that will certainly
> happen, even if we think that that new syntax will eventually take
> over. We've already done some side experiments in separate `#lang`s,
> though, and now is a time to check whether there is community buy-in
> and participation for a more ambitious effort.
>
> How?
>
> Parentheses are definitely useful for Racket-style language-oriented
> programming, and parentheses certainly helped Racket's macro system
> get to where it is now. There would be no point to a change in syntax
> if it meant interfering with Racket's main capability. Although a
> macro system without parentheses is a difficult problem, I think we
> know how to solve it.
>
> I have in mind "Honu: Syntactic Extension for Algebraic Notation
> through Enforestation", GPCE 2012. It shows how we can bridge the
> relatively linear structure of non-() programs to the tree structure
> of S-expressions. Specifically, the bridge is called "enforestation".
> It sits roughly between the reader and the expander, but
> enforestation
> needs to be interleaved with expansion to get the level of
> expressiveness that Racketeers would expect.
>
> You may worry that I'm putting a lot of faith in one expriment and
> paper --- and a paper written by a PhD student and me, at that. You
> may be right. I have only my intuition that enforestation is the key
> to the problem of non-() syntax and extensibility. The details in the
> paper don't seem to me exactly right for Racket2, but it's a big
> first
> step toward addressing the problem, and it already seems sufficient.
> Others may have figured out even more. I wouldn't blame anyone for
> concluding that the difficulty of the task is too large for the size
> of the obstacle that it removes, but that's not how I size things up.
>
> The gap between 2012 and now reflects that Racket had more problems
> (in my view) than just syntax, and for various reasons, those other
> problems took precedence for my own work. This also explains my
> answer
> to the "why now" question. The other problems seem to be resolved or
> well on the way, and so syntax seems like the next thing to tackle.
>
> How to Proceed
> --------------
>
> Ideally, we would first decide on whether we want to try changing
> surface syntax ever. Then, only if we have enough consensus that it's
> worth a try, we could move on to setting overall goals and picking a
> roadmap. Finally, if the planing of the roadmap succeeds, we could
> follow it while getting into the details.
>
> Unfortunately, it doesn't work like that. We need concrete
> examples to
> discuss the possibility of changing syntax, potential roadmaps to see
> whether there's anywhere we want to go, and so on. Some of the
> discussion will necessarily put a cart before a horse. Delving into
> some details may incorrectly give the impression that prerequisites
> are a foregone conclusion. We've seen all of that already, starting
> with my attempt to open up the discussion in the middle of RacketCon
> and probably continuing with this message. Perhaps we can just accept
> that this is all okay in the spirit of working together.
>
> I originally thought that we should have a more specific process in
> place for discussion at this point, but I think I've been proved
> wrong. Let's just discuss, for now. I'll be posting more myself.
>
> --
> 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 [email protected]
> <mailto:[email protected]>.
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/racket-users/e6e1a457-c033-4408-a940-33203a48fcc6%40googlegroups.com
> <https://groups.google.com/d/msgid/racket-users/e6e1a457-c033-4408-a940-33203a48fcc6%40googlegroups.com?utm_medium=email&utm_source=footer>.
--
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 [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/racket-users/bf83337a-8a12-fec9-f81c-3a53321fc362%40linki.tools.