Run, Build and Grow Small Systems Without Leaving Your Text Editor | LIVE 2024

preview_player
Показать описание
Clojure, but more alive.

A REPL, but it's connected to all your nodes at the same time (1:n)
See the value of any expression on any node – in your code
Query macro expression rewrites itself to show the data inline
Declarative deployment: "this function should run on that node"
Supervision & reconciliation: Stop a process? Comment it out
Effects via object capabilities: all host platform caps passed in as argument
The editor is also a node and you can run code in it
Define and use custom inline editor visualizations
Values have history

Taglines

"Grug-brained Erlang"
"Debug mode is the only mode"
"A personal Bank Python" [future work]
"(i) see inside (ii) see across time (iii) [see across possibilities]" – Seeing Spaces
Baby's First Situated System Software
Worse is Better [?]
If Raspberry Pi were as simple as Arduino
People's Computing / Personal Computer

--

Abstract:

A simple ClojureScript environment integrates: self-rewriting plain text, live inspection, inline visualizations, distributed tracing, deployment, declarative process reconciliation, and object capability security.

Programmers assign functions to nodes. ("What should run where?") A process is a function running on a node; it receives all platform capabilities as an argument. Each node reconciles its process state to match the latest specification. Top level forms set their liveness, and may evaluate across the system on every keypress. Stateful expressions preserve node-local values across code changes. The editor is also a node. Data passing through any expression, on any node, is observable as live text in the editor. Visualizations render inline with the code, through functions defined in the same code.

Examples range from structured personal notes through computational documents, up towards open-world integration with hardware, filesystems, servers, browsers, and third-party dependencies to build, run, inspect, and change small distributed systems from within a lightly enhanced text editor.

---
This work has been supported by the Doctoral College Resilient Embedded Systems, which is run jointly by the TU Wien’s Faculty of Informatics and the UAS Technikum Wien.
---

Presenting at LIVE @ SPLASH 2024

--

Related work

Smalltalk
Lisp
Emacs
org-mode
TaskTXT - via Potluck - roundtrip state through plain text
APX - trace points + context
Cap'n Proto - IDs in code
music live coding environments
ixi lang - self-rewriting code
Motifn - bidirectional viz, keyboard actions
Gibber - inline viz
Strudel - viz+sliders
Eve - rules db, programming for humans
Dark classic - production traces
preimp - self-rewriting Clojure notebook

Missing from the video:

Glisp - bidirectional self-rewriting Clojure-ish code, custom editor UIs for types
DreamBerd - question marks

Future work / todo

error handling - at least like Sentry, maybe even a poor Smalltalk debugger or Common Lisp condition system
persistence story - accretive bitemporal facts like XTDB or something local-first?
communication - infer netcode like Electric
codebase management - hashed like Unison or Scrapscript
collaboration / ocap code sharing / delegate authority to change part of the system
control over when and where changes deploy: staged rollout, feature flags, "under construction" development preview areas
actually secure security
release as extensions for common editors
Рекомендации по теме
Комментарии
Автор

Amazing. Please do not abandon developing this. Almost all papers in computer science conferences are abandoned way way too soon and do not end up being used in the real world.

encapsulatio
Автор

This looks quite promising. Is there any chance something like this can become an Emacs mode or NeoVim plugin? Features like these are neat, but without a giant ecosystem, as you yourself pointed out, a good feature isn't worth the loss.

rkvkydqf
Автор

One suggestion. It wasn't very clear what this video was about - is this a new repl? If so where can we get it, etc.

pkphilips