Inspiring a future Clojure editor with forgotten Lisp UX - Shaun Lebron

ClojureTV0 HN recommenders · 2017–2019
23K views · talk · evergreen · Uploaded 2017-10-12

Shaun Lebron surveys 50 years of Lisp editing history and forgotten innovations in structural editing. He argues future Clojure editors could learn from them, and covers ideas like Parinfer.

HN cites it as a summary of known attempts at structural and Lisp editors.

Watch on YouTube

3 comments from Hacker News

@AriaMinaei2017 · in “An experimental software development environment”

This is called 'projectional editing', an idea that to my knowledge goes back to the 60s. A projectional editor shows you both the original source code, and alternate representations (or, 'projections') of it. Given the right plugins and config, these alternate projections could happen to be more intuitive to grasp/edit than the original source code. One plugin could, for example, remove all the unnecessary semicolons. Another, could remove all the unnecessary punctuations and project the code in an indentation-significant way or vice-versa. Your idea to replace all the `'bar' + foo`s with ``bar{foo}``s would also be possible. It's easy to imagine much more advanced use-cases. A sufficiently advanced editor could detect calls to FRP libraries, and project the data flow as a visual graph (picture all the `flatMaps()` and `scanLatest()s` as nodes on that graph). Or, given access to compile-time type info (via a typescript-style language-server), it could overlay the type of a value with the missing fields being shown as slots to be filled. I can imagine such an editor to mostly "obsolete" the idea of a single syntax for each language in the first place. Like the language but not the syntax? Roll your own syntax! Just configure your own editor plugins. No one would have to know. No one would have to agree with your "taste." Not even your git repo [0]. (See /r/nosyntax/ for more ideas) A projectional editor can also be implemented in the runtime, ala Smalltalk. In that case, the

@cellularmitosis2019 · in “Dreaming of a Parser Generator for Language Design”

That's a great suggestion. Which attempts are you familiar with? The ones I'm familiar with are summarized in this talk: [VIDEO]

@AlexSolution2019 · in “Show HN: Bel”

Using a Lisp with Parinfer makes the parens automagic without taking away the benefits they provide. [LINK] [VIDEO]