December 2025: Progress on rlworkbench
Here is an update on what I've been working on in December.
Advent of Code
I couldn't resist participating in Advent of Code this year either.
Usually I challenge myself by solving the puzzles in some new kind of way. This year I decided to take a meta approach. Check out my blog post about it to learn what that means and also get a highlight from each day.
Inspired by Advent of Code, I wanted to make some kind of similar puzzle for my son. He usually takes some interest in me solving the problems. He even helped me program some solutions last year. But it mostly meant that I told him what keys to press. Programming is a little hard. But he likes math. So I came up with an idea to generate maze math problems. They look like this:

Check out my blog post about them to learn more.
rlworkbench
I've made lots of progress on rlworkbench this month.
What was the state last month? We had a highlight command that could syntax highlight files for the terminal. We also had a GUI editor where we could open a file, do some basic editing while the highlighting updated, and then write the file to disk.
The highlight command has now been incorporated as a sub command to workbench_sdl. Here are the currently supported commands:
workbench_sdl highlight [--html] [--language <language>] <file>
workbench_sdl run [--language <language>] <file>
workbench_sdl [--language <language>] <file>
Notice that the highlight command has gained an optional --html flag. I wanted to syntax highlight code for my blog post about Advent of Code. So I wrote support for that in addition to highlight for the terminal.
Then I also wanted to publish a nice looking page for rlworkbench. I decided to do it by implementing a markup language in meta that currently implements a subset of Markdown. Then I wrote the README file in that language. And by adding a header and footer, I could turn that README file into a web page like this, using the run command:
cat website/header.html >website/index.html
out/workbench_sdl run --language markup README.md >>website/index.html
cat website/footer.html >>website/index.html
Here is a screenshot of the GUI editor editing the README file. The markup language provides both the syntax highlighting as well as the ability to turn the README file into html.

The editor has received a few updates to make editing files easier. I determine what to work on next by trying to edit files using rlworkbench and notice what I'm missing. I constantly press keys that I'm used to in Vim and nothing happens. So I implement them one by one. Eventually I should be able to replace Vim completely. But there are still major parts missing.
When working on rlworkbench, I felt that C is so difficult because it is so primitive. I felt like I can't slap abstraction on top of abstraction to build more complex things. I felt like I always have to work at a primitive level. I'm not saying that that is bad. Just that I find it hard. Part of doing this project in C is to work at the primitive level to have more control for performance reasons. Part of my feeling that this is hard is probably that I haven't yet found good low level abstractions.
Computer Enhance
I continued the Computer, Enhance! course.
I am finally through part 1 which was learning about how to read assembly language. It was done by having us write a decoder and simulator for 8086 instructions. I felt like this was quite far away from what I wanted out of the course. But on the other hand, it gave me lots of hands-on experience. Maybe I'm just too impatient. I look forward to part 2.
Interesting Resources
- I watched Tips for C Programming. In particular, I learned about
-fsanitize=addresswhich can help detect memory bugs. I also learned from here thatLSAN_OPTIONS=use_stacks=0can detect more memory leaks.
- I listened to the podcast 4coder Editor is Different | Allen Webster where I learned (at around 1:04:45) that he used a gap buffer data structure for his text editor. That might be something to consider for rlworkbench, but for now, a much simpler approach works fine.
- I found River which is an experimental assembly-like programming language. I found it interesting both because it is an and interesting programming language. And the fact that it is not text. Currently, I think that not using text for programming is too awkward. In rlworkbench, I try to provide provide constructs that you can get in such an editor, but don't limit what you can do. It is still just text. I'm not sure which way is the right way.
TODO
Here are the things that I'm currently most interested in working on next month:
- rlworkbench
- Start using rlworkbench instead of Vim as my default text editor
- Implement the features that I'm missing
- Search function for quicker navigation
- Ability to open files
wandbto move forwards/backwards a "word"- A "word" should be defined by the language?
- Implement the features that I'm missing
- Start using rlworkbench instead of Vim as my default text editor
- Computer, Enhance!
- Continue course and do more homework
- New blog
- Nicer styling
- Migrate all my blog posts to it
- Make it available as a downloadable PDF
- Blog about C approach to new
uniqcommand- Show Python one-liner ish
- Show
sort | uniqcombo - Explain why they don't perform well for
rlselect - Write a standalone C version
- Reflection
- Looping over characters is fast in C but slow in Python. Some algorithms are easier when looping over characters. (Nov 17)
- Publish and document maze project?
- Program to turn a README.md into a website
- Package
website.shfrom rlworkbench into its own program that can be reused
- Package
- Write blog post about how to parse offside in markup language
- Blog about "Can gcc warn about functions that are not called?"
- If they are static
Thank you for reading. Don't hesitate to hit reply and tell me your thoughts and comments. See you next month!