blog@yourbrowser ~ $ cd /devlog
blog@yourbrowser ~ $ cat entries.md
Devlog #11 - 2025-07-20
It’s been a while. I was still very actively programming, but documenting those projects here was kinda forgotten.
Here is a small overview since the last update:
Flowlang
I completely rewrote the compiler backend, starting with Semantic Analysis, all the way to Bytecode Generation. I modified and cleaned up the AST structure to be more in line of a direct Source Code representation and instead added another IR called Flowlang-Intermediate-Representation (FIR). This IR enables more optimizations in the future and makes it easier to implement them. It also enables the AST to not be modified after initial creation, which was the case before.
I also added quite a few language features building on top of that rework:
- Added Arrays and all associated Features like indexing and appending
- Added a Mark-And-Sweep Garbage Collector
- Added syntactic sugar for simpler loop syntax
- Changed all functions to be function expressions
- Added function expressions and Closures
After all those changes I also started investigation the performance and improved it to pretty much match the performance of CPython. I will still try to find some Python benchmarks, implement them in Flowlang and see if my Language can keep up.
raw-http
Because I like suffering, I decided to learn Assembly and chose to write a very simple HTTP Server in raw, hand-written ARM64 Assembly on MacOS. This was an incredibly fun and interesting project, that taught me a lot about how Assembly actually works and how to even read it (kinda), as well as to get to my goal with very little documentation, if at all. Most of the time, I needed Documentation was for the syscalls of MacOS, which I literally just used the manpages for, and a simple list of syscall numbers.
smore
I created smore
as a learning project and to simply try a lot of different stuff, so don’t expect the best code. But I managed to create a simple UDP protocol to make a Key-Value Cache service. One thing I did try in that project was to export the Zig-written Client library to a shared library, writing headers for C and being able to use the Zig implementation from C. That was a fun challenge, where I learned what C interoperability actually means.
Devlog #10 - 2025-01-14
Crosswords
I started a new project called “crosswords”, a crossword-puzzle generator written in Go. You can visit the application at https://crossword.nkoll.de.
Currently, the Frontend styling is generated mostly by ChatGPT, but in the future, it will get a rewrite into a better looking, handwritten Frontend Application.
The generated Puzzles will be saved as files and get deleted after 30 Days of inactivity. That means, if they aren’t accessed for 30 Days, they are lost. There are plans to add a User System, where puzzles saved into the User acount are not deleted automatically.
The Generation works by trying as many valid puzzles as possible and choosing the best one. This is done by first, checking the amount of fitted words, where a puzzle with more words is always better than fewer words. After that a score is computed, where the smaller the better and the more square the better. This is done either until all possible outcomes are computed or 5 seconds passed. The algorithm itself is pretty simple and naive, but goroutines make it possible to compute a lot of them in parallel.
Devlog #9 - 2024-12-23
Flowlang
I restructured the Semantic Analyzer for better readability and fixed a bug where the arithmetic operators would only check for numeric operands, but not if they are the same type.
I also started implementing Arrays, but I hit a wall and that’s still where I’m at.
Game of Life
I tried my hands at WebAssembly with Zig and made a small, semi-complete version of Conway’s Game of Life. I made a small HTML-Page, slapped some JS Glue on it to call the WASM Binary and enable easy interfacing between buttons/events and WASM.
Devlog #8 - 2024-12-13
Flowlang
Since the last entry, I added a few small things, like shorthand assignment syntax (i += 1
, …), refactored and cleaned up the code base and added a big feature: Extensions!
It is now possible to write Extensions in Zig, which can be important via the build system (for example through Zig’s package manager), and then add globally available functions to call into Zig Code. That enables performance critical code to be implemented in Zig and exported via a simple, type-safe API into Flow-Land.
Devlog #7 - 2024-12-08
Flowlang
Userland Functions are on the way! Basic top-level functions work, but there are still a few bugs/unsolved problems regarding the analysis order, so calling a function in a declaration of a global variable/constant does not work yet.
Other Notable Improvements:
- Extended
build.zig
with a simple integration testing framework - Added a
flake.nix
for simple pipeline environments - Added a GitLab pipeline for automatic testing
Devlog #6 - 2024-12-05
Flowlang
Got a lot done in Flowlang, and started with building a Tree-Sitter grammar for Syntax Highlighting in NeoVim. The current Version can be viewed on Gitlab.
Some notable milestones:
- Variables and Constants, local and global scope
- Type Checking, Constants Checking
- Control-Flow (
if/else
,for
-loop,break/continue
inside loops) - Framework for builtin functions
- Removed print keyword in favour of builtin function
Devlog #5 - 2024-11-24
Flowlang
Started with Flowlang, a garbage-collected language with focus on concurrently and type-safety, inspired by Go and Zig.
Current Status:
- Working Byte-Code Compiler
- Bundling VM and Byte-Code into a single executable
- Minimal Subset of the language is implemented, namely standard arithmetic, boolean negation, (print keyword) and primitive literals
I also wrote a Blog post about it.
Devlog #4 - 2024-11-18
zs
Added single file support. Now doing something like zs build.zig
gives the expected output instead of errors
Devlog #3 - 2024-11-05
Blog
Added basic Syntax highlighting using Zine’s builtin treesitter parsing Telescope’s picker for Vim’s highlight-groups.
Devlog #2 - 2024-10-29
Zli
- Added Enums as possible Type definitions in Options
- I also wrote a longer Post about Zli here
zs
- Wrote my own version of the unix command
ls
- Only C Dependency is libc function
getgrgid
- slightly better memory footprint than
ls -laF
Devlog #1 - 2024-10-15
This is my first entry of this Devlog. I will post updates on current projects all on this page, so it won’t be a very organized feed. I will just use this to document my progress overall, make short descriptions of new stuff I built. Maybe there will be something interesting for you.
If there is more to talk about in greater detail I will maybe talk about it in a separate blog post, which will then be linked from here.