Tomas Petricek, Charles University, Prague
The browser makes this easy to fix.
Programming is
writing code
Formal semantics, implementation, paradigms, types
We know how
to study this!
Interacting with a stateful system
Feedback, liveness, interactive user interfaces
But how do we
study this?
What we see depends
on how we look!
Poorly language? Interesting system?
Analysis of:
LISP machines, UNIX, Web, Hypercard, Spreadsheets, Haskell, Boxer, Dark, etc.
Terminal works as both REPL
and structure code editor
Simple but experts can use POKE and SYS
Simple unstructured language
Demos distributed as source in magazines
Explicit structure
Code represented as boxes
User interface is boxes
Abstraction construction Start concrete & generalize
Naive realism (extra)
What you see is what there is
Feedback loops
See result of interacting
with icons immediately
Abstraction construction
Directly manipulate concrete values to define computation
Formal proofs, about tiny models
Performance, in controlled environment
Usability or flexibility, in specific scenarios
Experience of using and building a system, on a tiny scale
Conceptual structure?
Potential of the design?
Technical dimensions?
Collaborative editing
Two users edit document
Try to reconcile edits!
Operational transform
Given concurrent \(e_1\) and \(e_2\), compute \(e_2'\) respecting \(e_1\),
producing sequence \(e_1, e_2'\).
<div class="box">
<span>
<i>repeat</i> <b>36</b>
<div class="box">
<span><i>forward</i> <b>100</b></span>
<span><i>left</i> <b>170</b></span>
</div>
</span>
</div>
Boxes <div>
contain series of commands <span>
Commands start with an identifier <i>
followed by
idents <i>
, numbers <b>
, strings <s>
and nested boxes
Copy and replace
Mutate the document!
All state is visible
Copy and replace
Mutate the document!
All state is visible
type Commands = Command[]
type Command =
{ operation: string,
element: Element,
parameters: Parameter[] }
type Parameter =
| { kind: "identifier",
name: string,
element: Element }
| { kind: "symbol",
name:string,
element: Element }
| { kind: "primitive",
value: string,
element: Element }
| { kind: "box",
element: Element }
Parse parameter
(Element) -> Parameter
Parse box
(Element) -> Commands
Evaluate command
(Command) -> void
Evaluate step
() -> void
<div class="name">
<span>who1</span>
<div class="box">
<span><s>PLISS</s></span>
</div>
</div>
Interactive systems, types and languages, tools for data science
Looking for post-docs and PhD students!
Scientific paradigm shift - We know a lot
about languages, but little about systems!
Technical dimensions - Interaction, notation
adaptability, conceptual structure & more...
Research methods - Take history seriously
and have fun writing tiny systems!
Tomas Petricek, Charles University, Prague