filmov
tv
Run, Build and Grow Small Systems Without Leaving Your Text Editor | LIVE 2024
Показать описание
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
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
Комментарии