Of all my current projects, go-dws is the most personal: a reimplementation of DWScript — the object-oriented Object Pascal scripting engine — in Go. It is the continuation of a Pascal thread I have followed for decades, by other means.
Why DWScript, again?
DWScript has accompanied me for a long time: I contributed to the original Delphi project, built the DWScriptExpert IDE plugin, wrote import tooling for Delphi units, and even used its JavaScript backend to ship web apps in Pascal (the Web-Apps post told that story). The language is small, expressive and pleasant — and reimplementing a language you love is the deepest way to understand it.
When I picked up working on DWScript again, I was only able to do this with the help of LLMs. So this is also kind of an experiment about how good modern LLM tools have gotten. The first steps are always easy, but at some point it’s getting thick. So the first models all stuck at some point only bloating the project further and further. Only with the latest frontier models it’s finally possible to fix all the edge cases still left.
The ecosystem around it
A language is only as useful as its tooling, so go-dws grew a family: a language server (go-dws-lsp), a VS Code extension (go-dws-vscode), a tree-sitter grammar, and go-dws-primer — an interactive teaching environment in the tradition of my old PascalPrimer, because a language you cannot teach with is only half a language.
Pascal as a habit of mind
People sometimes ask why I keep coming back to Pascal-shaped things while writing Go all day. The honest answer: the two languages share a temperament — explicit, readable, compiled, a little stubborn. Porting DWScript to Go is not nostalgia; it is carrying twenty-five years of language history into a runtime with goroutines, a real module system and single-binary deployment.
The project is work in progress and openly so — which, as the open source retrospective explained, is how I have always preferred to learn.