Able
An experimental programming language that brings ideas from Ruby, Scala, F#, and Go into a language of its own.
Technologies: Go, TypeScript, Tree-sitter
A language from the ground up
Able is an experimental programming language that takes cues from Ruby, Scala, F#, and Go. It explores language design as a complete system: syntax, semantics, parsing, interpretation, and compilation.
Using LLMs and agent-assisted engineering, I have built a Tree-sitter parser, tree-walking interpreters in TypeScript and Go, a bytecode interpreter, a Go transpiler, and a compiler to JVM bytecode across the project’s evolving toolchains.
One language, multiple implementations
The interesting challenge is making different implementations mean the same thing. Parsing an expression is one piece; preserving its behavior across interpreters and compilation paths is another.
The public workspace follows a specification-first approach. Its active Go tree-walker and bytecode VM share a canonical AST contract, with fixtures used to check that the runtimes stay in semantic agreement. Older workspaces preserve the earlier toolchains as the language evolves.
What this project explores
- Language syntax and a clearly defined semantic model.
- Parsing and abstract syntax trees with Tree-sitter.
- Tree-walking and bytecode execution.
- Translation between language and runtime representations.
- Agent-assisted engineering guided by explicit design constraints.
Able is a language-design project as much as it is a collection of implementations. The specification and public repository are the best starting points for the current work.