Yes, you can make a programming language as a learning project without building something anyone else should use. Owen Dechow’s TermsLang began after he had been learning Rust and completing other projects. In his August 14, 2024 essay, he describes an interpreter that he considers impractical—and a project he still loves because of what it taught him.
Why Dechow started TermsLang
Dechow approached language-building as a way to learn by making, not as a plan to replace an established language. That distinction matters: the project’s success, by his account, was educational rather than practical. He sums up the lesson this way: “A good project is a project that teaches you.”
As an Amazon Associate I earn from qualifying purchases.
How the language takes code from text to execution
Lexing and parsing
TermsLang first uses a lexer to turn source text into tokens and recognize keywords and symbols. A parser then arranges those tokens according to the language’s grammar. These stages made the syntax choices concrete: the parser had to recognize not just what each symbol meant, but how the pieces fit into valid statements.
The Tool Desk
Outbyte Driver Updater FREEScan for outdated or missing drivers - takes under a minuteDriver Scan →Outbyte PC Repair FREERepair Windows errors before they cause bigger problemsFix Now →Syntax built around the parser
TermsLang uses ~ to end a line, $ to create an object, and ^ for exponentiation. Its keywords include updt, cll, and loop; Dechow says updt and cll helped the parser distinguish statement forms. Function calls require a dot before the parentheses. That rule made parsing easier for him, but he later found it awkward to write—an example of an implementation convenience becoming a usability cost.
An abandoned syntax-tree module
Dechow created an active syntax-tree module with the intention of using it for type checking and validation, then removed it. The project therefore did not retain that planned layer of checks. His account shows one way a language project can evolve: an intended component may be dropped as the implementation changes, rather than becoming part of the finished design.
From a compilation plan to an interpreter
Dechow initially planned to compile TermsLang, but abandoned that route after installation difficulties with LLVM on his older MacBook and a Windows machine. He proceeded with an interpreter instead. This is a report of his own setup and decision, not evidence that LLVM is generally difficult to install or that interpretation is the better choice for other language projects.
What TermsLang can—and cannot—do
Annotations without enforcement
TermsLang has type annotations, but Dechow says the language does not enforce them. Incompatible values can therefore pass through until code tries to access a field that is missing. An annotation can communicate intended types, but without checks it does not prevent this class of runtime failure.
Slow execution, with no measured cause
Dechow describes the interpreter as slow. He speculates that integer references and storing enum-based values in hash maps contribute to the inefficiency, but reports no benchmark or confirmed diagnosis. That explanation should be read as his hypothesis, not as a measured finding about the implementation.
Rank #3
There is more than one route to a small language
A separate maker’s project, Glorp, takes a different route: it uses Lark to parse a grammar into a structured tree, then transforms that tree into Python code. That is a transpiler approach, while Dechow describes TermsLang as an interpreter. These individual projects illustrate different possible designs; they are not a controlled comparison of speed, difficulty, or quality.
For a personal project, the choice depends on what you want to learn and what you want the result to run on. An interpreter executes the language’s own representation; a transpiler translates it to a target such as Python. TermsLang’s history also shows that planned features and implementation choices can change as the work exposes new problems.
Rank #4
What to take from the project
TermsLang is not presented as a practical tool or a polished language for other people to adopt. Its value for Dechow was the experience of building the pieces, making syntax decisions, changing implementation plans, and encountering limitations firsthand. If the goal is learning, an imperfect language can still be a worthwhile finished project; if the goal is a usable language for others, features such as dependable type checks and a comfortable syntax would need more attention.
Quick Recap
Best Value
Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.




