The Case for Composable Notations (6 of 5) - WIP - Notations in Progress
2026-03-30
The series ends here. The work doesn’t.
What follows is a brief appendix describing notation experiments currently in progress. Collaborators and kibitzers are welcome. More discussion of these ideas happens on the Programming Simplicity Discord server. The repos contain WIP code “as is”.
dtree
dtree is a DaS notation — Diagrams as Syntax. It uses three primitives: rhombus (decision), yes/no arrows, and process boxes. Turing completeness is not a goal. The notation is useful precisely because it is narrow — easy to imagine, easy to build, easy to read. The simplicity is the feature.
Repo: [https://github.com/guitarvydas/dtree]
sm
sm is also DaS. It expresses state machines directly as diagrams. A state in sm is not a case statement or a single closure — each state requires three functions, which makes it cumbersome to express in FP notation and therefore routinely side-stepped. sm makes it natural.
Repo: [https://github.com/guitarvydas/sm]
Frish
Frish — FoRth-ISH — is TaS (Text as Syntax). The Frish language is text-based; its compiler is DaS. Forth’s core idea — extremely small, composable operations — without Forth’s historical baggage.
Repos:
[https://github.com/guitarvydas/frish/tree/main]
[https://github.com/guitarvydas/frish/tree/debugdefsynonym]
0d.rt
0d.rt is TaS. It implements UNIX-like processes in Python using message passing via Python’s dequeue class. It currently emits Common Lisp and JavaScript in addition to Python — other targets are possible but I ran out of road.
A few design decisions worth noting:
The original implementation used various complicated data structures. It was eventually upgraded to use only strings, parsed on demand using OhmJS/PEG. This seems wildly inefficient by 20th-century standards. It probably isn’t — most programming languages are, at their core, parsers for data expressed as text, preened ahead of time. JIT compilation is likely the right model here, not pre-declared structure.
The deeper principle: systems must not be built around fixed, centralised data structure definitions — no central authority should dictate communication protocols. Parts must be free to negotiate, on the fly, what they can and cannot accept. Strings, with known formats, make this tractable. Complex shared .h-style headers make it brittle.
Repo: [https://github.com/guitarvydas/pbp-dev/blob/main/kernel/0d.rt]
See Also
Email: ptcomputingsimplicity@gmail.com
Substack: paultarvydas.substack.com
Videos: https://www.youtube.com/@programmingsimplicity2980
Discord: https://discord.gg/65YZUh6Jpq
Leanpub: [WIP] https://leanpub.com/u/paul-tarvydas
Twitter: @paul_tarvydas
Bluesky: @paultarvydas.bsky.social
Mastodon: @paultarvydas
(earlier) Blog: guitarvydas.github.io
References: https://guitarvydas.github.io/2024/01/06/References.html

