Hanno Braun
banner
hannobraun.com
Hanno Braun
@hannobraun.com
I want to use programming tools that provide tighter feedback loops and better feedback. Working on Monobloc, a (still unreleased) programming language, to figure out what that can mean in practice.

https://www.hannobraun.com/
The demo now has a debugger! Here you can see me changing rooms in the game, pausing it, then stepping through the code that renders the current room.
October 2, 2026 at 9:49 AM
The new version of the interactive demo has become about as capable now as the old one was. Here's a video, showing how I edit the demo script and have those edits reflected in the running game as soon as I save the file.
September 26, 2026 at 10:06 AM
The pivot from Monobloc Synth to the new demo based on interactive fiction has been weird but, I think, so far successful. The much less demanding use case has allowed me to make progress with interactive programming, which I previously hadn't gotten to.
September 21, 2026 at 11:43 AM
Remember when I was completely baffled because the thing I thought would take me weeks got finished in two days, and I'm just not used to being fast?

Well, turns out that architecture was insufficient to advance the demo any further, and now I'm rewriting everything. Back to form, I guess!
September 18, 2026 at 8:04 PM
I've started building out the UI into something resembling more of a development environment (using @ratatui.rs, which is a pleasure to work with).

My immediate goal here is to show any syntax or runtime errors, highlighting where in the code they happen. This not an editor (yet!).
September 10, 2026 at 12:02 PM
Interactive code updates are working! Change the code, see the change in your running game in real-time.
September 9, 2026 at 5:42 PM
I improved the user interface of the interactive demo. For the adventure-game-like things it can support, I mean.

Before, I had a placeholder that just used the terminal in the most basic way. Now it renders descriptions in the same place, and you don't have to confirm input with the enter key.
September 8, 2026 at 10:45 AM
I now have a working language implementation capable of running this script: tangled.org/strings/hann...

Honestly, I'm shocked. I knew I was doing everything I could to make this easy, but still expected that somehow, I missed some problems and would spend weeks. It barely took two days.
monobloc-interactive-demo-2026-09-05.monobloc · by hannobraun.com
A sample script for Monobloc's interactive demo. At the time of writing, only this script exist; no code yet to parse or evaluate it. Its purpose is to help figure out the language design and provide ...
tangled.org
September 6, 2026 at 7:00 PM
The parser can now handle this sample script: tangled.org/strings/hann...

I can't be fully certain that everything is correct, but things look reasonable so far. Next, I'll start working on the interpreter, which should flush out any hidden issues.
monobloc-interactive-demo-2026-09-05.monobloc · by hannobraun.com
A sample script for Monobloc's interactive demo. At the time of writing, only this script exist; no code yet to parse or evaluate it. Its purpose is to help figure out the language design and provide ...
tangled.org
September 5, 2026 at 1:33 PM
I worked out the initial language design for Monobloc's new interactive demo: tangled.org/strings/hann...

This sample script is all I have right now. I've decided to start with a fresh implementation for the demo, as I would be throwing out most of the old code anyway (which is the whole point).
monobloc-interactive-demo-2026-09-05.monobloc · by hannobraun.com
A sample script for Monobloc's interactive demo. At the time of writing, only this script exist; no code yet to parse or evaluate it. Its purpose is to help figure out the language design and provide ...
tangled.org
September 5, 2026 at 8:24 AM
Having an interactive demo in 8 weeks almost seems insane, given my track record. But over years of experimental language dev, I basically built everything I'm going to need at one point or another.

So of course I have this voice in the back of my head now, telling me this is going to be easy.
September 4, 2026 at 7:58 PM
My core goal for Monobloc is to provide tighter feedback loops and better feedback.

Monobloc Synth, the code-driven software synthesizer, is a means to approach this goal. But I no longer think it is my best option, and I will switch to a different use case for Monobloc.

Let me explain.

🧵 1/8
September 4, 2026 at 12:17 PM
Conditional expressions are done:

```
a 0 > then { ... } else { ... }
```

`then`/`else` can also stand alone, for early returns and such:

```
a 0 > else { fail }
...
```

This went pretty quick. It's just a bit of syntax sugar after all, for the binder conditionals I finished yesterday.

🧵 1/3
September 2, 2026 at 7:45 AM
I made more progress on control flow. Binders now support `then` and `else` blocks:

```
a 0 > => 1 then { ... } else { ... }
```

`then`/`else` also work alone:

```
a 0 > => 1 else { return }
...
```

Next, I want to support this syntax without the binder:

```
a 0 > else { return }
```
September 1, 2026 at 8:36 PM
And number terms are done! That went surprisingly quick. The groundwork laid by the cleanup, long and tedious as it was, made this possible.
Anyway, it's done now. I'm moving on to re-introducing number terms into patterns. This means soon we can `x match: => 0 { ...} => 1 { ... } .`, instead of having to go through pattern guards, which I want to remove.

🧵 4/4
August 31, 2026 at 7:49 PM
I'm still working on redesigning control flow in Monobloc. For almost two weeks, I think?

A lot of this time, I spent cleaning up the part of the compiler that lowers the syntax tree into the continuation-based intermediate representation. Lots of cruft had accumulated there!

🧵 1/4
August 31, 2026 at 7:12 PM
Studying the Verse documentation last week (thread: bsky.app/profile/hann...) was interesting. The most fascinating aspect, from my perspective, is how it uses failure as the basis for control flow.

In this thread, I'm going to present my thoughts on that, and how it relates to Monobloc.

🧵 1/12
I'm studying Verse today, mainly for its approach to control flow. But I've started going through it from the start, to see if there's more to learn.

Lots of weirdness there (why is the syntax so redundant?), but interesting stuff too. I really like rationals: verselang.github.io/book/02_prim...
Primitive types - Book of Verse
Documentation for the Verse programming language
verselang.github.io
August 25, 2026 at 9:44 AM
I'm studying Verse today, mainly for its approach to control flow. But I've started going through it from the start, to see if there's more to learn.

Lots of weirdness there (why is the syntax so redundant?), but interesting stuff too. I really like rationals: verselang.github.io/book/02_prim...
Primitive types - Book of Verse
Documentation for the Verse programming language
verselang.github.io
August 19, 2026 at 10:19 AM
After deciding to defer releasing Monobloc as a separate open source project, I've re-assessed what I should be doing next.

First, I've started going through the open design questions that lead to this decision. See what I have preliminary answers for and what i should defer.

🧵 1/3
August 19, 2026 at 8:39 AM
I may need to rethink my approach to publishing Monobloc. I thought if I need/want to rewrite and test parts of the prototype anyway, why not make those public?

Well, I may have the answer: Because that raises many design questions, which leads to increasing analysis paralysis.

🧵 1/4
August 15, 2026 at 11:33 AM
Monobloc now uses mutation testing to protect against degrading test coverage over time: tangled.org/hannobraun.c...

But enough of that for now. Time to add more features!
Set up mutation testing and include it in CI build #7
This should help to protect against degrading test coverage, as more code is added.
tangled.org
August 7, 2026 at 11:44 AM
I'm working on a public release of Monobloc to put my internal prototype on firmer footing. So I clean up and rewrite the code before I publish it.

What I published so far already had a test suite. But to improve test coverage further, I've added property tests: tangled.org/hannobraun.c...

🧵 1/4
Add property tests #4
Increase test coverage of all currently implemented features by adding property tests that generate source code (fully random, syntactically valid, and semantically valid, respectively) and check that...
tangled.org
August 6, 2026 at 9:17 PM
Here we go, finally: tangled.org/hannobraun.c...

Lots more to do before the first release, of course!
Implement the basics of host functions and continuations #3
As a first step towards implementing the language, this pull request adds a basic API for compiling and running Monobloc code, the abstract interface between host and language implementation, and the ...
tangled.org
August 5, 2026 at 7:59 PM
First my quick polishing pass, before rewriting part of the prototype for the release, turned into a major design overhaul. Now, it seems, I'm putting the implementation through the wringer too.

I found that the host interface was too tightly coupled with the specific host in my prototype.

🧵 1/2
August 5, 2026 at 9:38 AM
I decided to give @tangled.org a proper go. Here's the repository: tangled.org/hannobraun.c...
hannobraun.com/monobloc
An experimental programming language.
tangled.org
August 3, 2026 at 12:10 PM