@movq@www.uninformativ.de I quite like this part:
Many people write programs, but few stick with a program long enough to distill it.
@bender@twtxt.net No, I had my break/holiday earlier. I chose to work through, except the public holidays of course.
@movq@www.uninformativ.de Ahh nice! It’s been several decades since I’ve played that! Probably 3 actually come to think of it 🤣
@movq@www.uninformativ.de what game is that?
I basically worked through the Christmas break last year. I already had my holidays in Vietnam a few weeks earlier. 😆
Trying to build a native heap allocator that grows and isn’t statically wired into the binary’s image is fuck’n hard™ as 🤣
@movq@www.uninformativ.de Very cool! 😎
@shinyoukai@neko.laidback.moe Oh no, fuck that 🤣 That’s why I built an FFI so I can call C-functions via shared libraries 🤣
Mu (µ) is now getting much closer to where I want it to be, it now has:
- A
processstdlib module (very basic, but it works)
- An
ffistdob module that supportsdlopen/dlsymand calling C functions with a nice mu-esque wrapperffi.fn(...)
- A
sqlitestdlib module (also very basic) that shows off the FFI capabilities
😅
@movq@www.uninformativ.de Looks kind of nice 😊
@movq@www.uninformativ.de What I wish for once on this miserable planet is for coporations one day ohave a different set of reasons to exist and thrive other than:
but since the only goal of that manufacturer is to make money, they do it
Life becomes very boring and uninteresting when your only goal in life is to “make more fucking money” 💰 Fuck 🤬 Fuck this Corporatocracy we live in 🤦♂️
@eldersnake@we.loveprivacy.club da fuq?! 🤯
@shinyoukai@neko.laidback.moe I can’t believe Trace and Edgewall Software is still around and in use 🤣
fib(35) doesn't regress too badly as I continue to evolve the language.
@lyse@lyse.isobeef.org It’s actually not nearly as half bad as I really thought it would be. Just having to eventually deal with the “lowering down” to machine code / ARM64 assembly in the end once you’ve verified the semantics in the VM.
println("Hello World"):
@lyse@lyse.isobeef.org A “Hello World” binary is ~372KB in size. I currently have peephole optimization and deac code optimizations in play, and a few other performance related ones, but nothing too fancy. I have a test case that ensures fib(35) doesn’t regress too badly as I continue to evolve the language.
Opinion / Question time…
Do you think Mu (µ)’s native compiler and therefore emitted machine code “runtime” (which obviously adds a bit of weight to the resulting binary, and runtime overheads) needs to support “runtime stack traces”, or would it be enough to only support that in the bytecode VM interpreter for debuggability / quick feedback loops and instead just rely on flat (no stacktraces) errors in natively built compiled executables?
So in effect:
Stack Traces:
- Bytecode VM Interpreter: ✅
- Native Code Executables: ❌
Nice! 😊 Here are the startup latencies for the simplest Mu (µ) program. println("Hello World"):
- Interpreter: ~5ms
- Native Code: ~1.5ms
Hmmm 🤔
Excluding merges, 1 author has pushed 171 commits to main and 175 commits to all branches. On main, 294 files have changed and there have been 52880 additions and 18269 deletions.
From the Mu (µ) Gitea Activity Tab
@shinyoukai@neko.laidback.moe Happy New Year to you too! 🥳
@movq@www.uninformativ.de This is fuck’n great shit™ Where did you find this? 🤔 Got any more shit™ like this? 🙏
@dce@hashnix.club Happy New Year to you too! 🥳
Happy New Year (2026) 🥳
mu (µ) now has builtin code formatting and linting tools, making µ far more useful and useable as a general purpose programming language. Mu now includes:
- An interpreter for quick “scriptinog”
- A native code compiler for building native executables (Darwin / macOS only for now)
- A builtin set of developer tools, currently: fmt (-fmt), check (-check) and test (-test).
@movq@www.uninformativ.de Mu (µ)’s startup latency appears to be ~10ms on my machine:
$ time ./bin/mu ./foo.mu
real 0m0.011s
user 0m0.004s
sys 0m0.006s
@movq@www.uninformativ.de Is this on yout little toy OS? 🤔
@lyse@lyse.isobeef.org I can tell you this right now, writing assembly / machine code is fucking hard work™ 😓 I’m sure @movq@www.uninformativ.de can affirm 🤣 And when it all goes to shit™ (which it does often), man is debugging fucking hard as hell! Without debug symbols I can’t use the regular tools like lldb or gdb 😂
println(1, 2) was bring printed as 1 2 in the bytecode VM and 1 nil when natively compiled to machine code on macOS. In the end it turned out the machine code being generated / emitted meant that the list pointers for the rest... of the variadic arguments was being slot into a register that was being clobbered by the mu_retain and mu_release calls and effectively getting freed up on first use by the RC (reference counting) garbage collector 🤦♂️
@lyse@lyse.isobeef.org Yeah I remember you said some days back that your interest in compilers was rekindled by my work on mu (µ) 😅
Whoo! I fixed one of the hardest bugs in mu (µ) I think I’ve had to figure out. Took me several days in fact to figure it out. The basic problem was, println(1, 2) was bring printed as 1 2 in the bytecode VM and 1 nil when natively compiled to machine code on macOS. In the end it turned out the machine code being generated / emitted meant that the list pointers for the rest... of the variadic arguments was being slot into a register that was being clobbered by the mu_retain and mu_release calls and effectively getting freed up on first use by the RC (reference counting) garbage collector 🤦♂️
@lyse@lyse.isobeef.org True !
@zvava@twtxt.net The problem you now then is you lose integrity of the message content if you compute the hashes at runtime rather than on the way in. So if your message content or database becomes corrupt in any way, so do your hashes.
Building native compilers is hard 🤣 Building bytecode VM / interpreters is way easier 🤣
@shinyoukai@neko.laidback.moe Very cool! 😎
@shinyoukai@neko.laidback.moe Nice! 👍
@movq@www.uninformativ.de Thanks! 🙏
@shinyoukai@neko.laidback.moe Nah it’s more like there’s a lot of repeated code, because when you go from source language to intermediate representation to machine code, well you just end up writing a lot of the same patterns over and over again. I need to dedupe this I think.
@kiwu@twtxt.net Ooof 😢 That’s rough!
The compiler technique I’m using here is to not “emit” most of the runtime if it’s actually never used in your program, and also dropping dead code in the SSA pass.
@movq@www.uninformativ.de I’ve managed to bring a simple “Hello World!” in mu (µ) (at least on macOS / Darwin / ARM64) down to ~86KB (previously ~146KB) 🥳
Hmmm I need to figure out a way to reduce the no. of lines of code / complexity of the ARM64 native code emitter for mu (µ). It’s insane really, it’s a whopping ~6k SLOC, the next biggest source file is the compiler at only ~800 SLOC 🤔
@movq@www.uninformativ.de I think I can get binaries even smaller with a bit more work and effort 🤔 But yeah still working on the native code generation (at least for macOS targets)
@movq@www.uninformativ.de Oh that’s fine, Mu can compile to native code and so far binaries. at least on macOS are in the order of Kb in size 😂
@movq@www.uninformativ.de It’d be cool if you could get µ (Mu) running in your little toyOS 🤣 You’d technically only have to swap out the syscall() builtin for whatever your toy OS supports 🤔
@thecanine@twtxt.net I see 🤔 Very cool though! 😎
@movq@www.uninformativ.de I watched a few of these thanks to you! Very cool shit™ 😎
@movq@www.uninformativ.de Ooof that’s chilly 🥶
that’s a whopping 36°C today 🥵
@dce@hashnix.club merry Christmas to you too!
@thecanine@twtxt.net Is it because you’ve used white pixels around it to sort of give it aht 3D look? 👀 Hmm? 🤔
@bender@twtxt.net It’s fun living in the future isn’t it 🤣
👋 Merry Xmas 🎄 🎅
👋 Merry (2025) Xmas y’all 🎄 Ho ho ho! 🎅
@movq@www.uninformativ.de From 2:50 PM to 3:23 PM AEST (+10 UTC) there was an outage. Everything went “up” on Down Detector, my EU region went offline, numerous sites were unavailable, and so on. Basically everything to/from the EU appeared to basically go kaput.
Hey EU friends 👋 wtf happened to the EU Internet today for about 40 minutes or so?
@movq@www.uninformativ.de @kiwu@twtxt.net it just so happens to be a happy coincidence that I’m extending mu’s capabilities to now include a native toolchain-free compiler (doesn’t rely on any external gcc/clang or linkers, etc) that lowers the mu source code into an intermediate representation / IR (what @movq@www.uninformativ.de refers to as “thick layers of abstractions”…) and finally to SSA + ARM64 + Mach-O encoder to produce native binary executables (at least for me on my Mac, Linux may some later?) 🤣
@movq@www.uninformativ.de Pretty sure all my mu solutions are very slow, but not so slow as I optimized most of the implementations to avoid as much brute forcing as I could.
@movq@www.uninformativ.de This is the total amount of cpu time consumed right?
@movq@www.uninformativ.de Hmmm 🧐
@kiwu@twtxt.net evening!!!
@movq@www.uninformativ.de Haha 😆
I cleaned up all my of AoC (Advent of Code) 2025 solutions, refactored many of the utilities I had to write as reusable libraries, re-tested Day 1 (but nothing else). here it is if you’re curious! This is written in mu, my own language I built as a self-hosted minimal compiler/vm with very few types and builtins.
I finished all 12 days of Advent of Code 2025! #AdventOfCode https://adventofcode.com — did it in my own language, mu (Go/Python-ish, dynamic, int/bool/string, no floats/bitwise). Found a VM bug, fixed it, and the self-hosted mu compiler/VM (written in mu, host in Go) carried me through. 🥳
@movq@www.uninformativ.de I shrank Day 9 Part 2 from “cover the whole map” to “only track the interesting lines.” By compressing coordinates to just the unique x/y breakpoints, the grid got tiny. I still flood-fill and do the corner-pair checks, but now on that compact grid with weighted prefix sums for instant rectangle checks. Result: far less RAM, way less CPU, same correct answer.
Day 9 also required some optimizations, if you aren’t careful, you end up with really inefficient algorithms with time/memory complexity beyond what a typical machine has 🤣
Ooops, I’ve run into a bug or limitation with mu for Day 9 🤔
Day 7 was pretty tough, I initially ended up implementing an exponential in both time and memory solution that I killed because it was eating all the resources on my Mac Studio, and this poor little machine only has 32GB of memory (I stopped it at 118GB of memory, swapping badly!), This is what I ended up doing before/after:
- Before: Time O(2^k · L), memory O(2^k), where k is the number of splitters along a reachable path and L is path length. Exponential in k.
- After: Time O(R·C) (or O(R·C + s) with s split events), memory O©, where R = rows, C = columns. Polynomial/linear in grid size.
I just completed “Printing Department” - Day 4 - Advent of Code 2025 #AdventOfCode https://adventofcode.com/2025/day/4 – Again, I’m doing this in mu, a Go(ish) / Python(ish) dynamic langugage that I had to design and build first which has very few builtins and only a handful of types (ints, no flots). 🤣
I just completed “Lobby” - Day 3 - Advent of Code 2025 #AdventOfCode https://adventofcode.com/2025/day/3 – Again, I’m doing this in mu, a Go(ish) / Python(ish) dynamic langugage that I had to design and build first which has very few builtins and only a handful of types (ints, no flots). 🤣
@shinyoukai@neko.laidback.moe Funny you should say that, I designed a new Prolog(ish) Symbolic Reasoning Engine and DSl over the holidays 🤣
mu only supports ints? 🤔 I'm not sure if I'll need flots for this year's AoC? 🤔
Let’s see 😂
Did I mention mu only supports ints? 🤔 I’m not sure if I’ll need flots for this year’s AoC? 🤔
I’m having to write my own functions like this in mu just to solve AoC puzzles :D
fn pow10(k) {
p := 1
i := 0
while i < k {
p = p * 10
i = i + 1
}
return p
}
I just completed “Gift Shop” - Day 2 - Advent of Code 2025 #AdventOfCode https://adventofcode.com/2025/day/2 – But again, I’m solving this in my own language mu that I had to build first 🤣
I just completed “Secret Entrance” - Day 1 - Advent of Code 2025 #AdventOfCode https://adventofcode.com/2025/day/1 — However I did it in my own toy programming language called mu, which I had to build first 🤣
That’s the right answer! You are one gold star closer to decorating the North Pole. [Continue to Part Two]
Whoo! Making progress! With AoC 2025 solutions implemented in my own toy language 🤣
Ahh that’s because I forgot to call main() at the end of the source file. mu is a bit of a dynamic programming language, mix of Go(ish) and Python(ish).
$ ./bin/mu examples/aoc2025/day1.mu
Execution failed: undefined variable readline
Come back from my trip, run my AoC 2025 Day 1 solution in my own language (mu) and find it didn’t run correctly 🤣 Ooops!
$ ./bin/mu examples/aoc2025/day1.mu
closure[0x140001544e0]
And I’m back from my holidays! 🥳 Back to work boo 😒
@bender@twtxt.net agreed
@aelaraji@aelaraji.com probably a bug on my end with the bridge. I’ll figure it out with your help when I get home from my holidays.
@bender@twtxt.net that’s kind of what I was getting it initially yeah
@movq@www.uninformativ.de this is brilliant!
@movq@www.uninformativ.de @zvava@twtxt.net I think people get sick of everything changing all the time and so don’t bother adopting things to change when things are already good enough 🤷
@movq@www.uninformativ.de I think WebP being new just hasn’t seen widespread adoption everywhere (yet) 🧐
i’m always open to suggestions: PRs also welxome 🤣



Went to Ba Na Hills today, but honestly it was so cold and misery i couldn’t take very good photos 🤣 Here’s a few shots i managed!
@movq@www.uninformativ.de BahahahGG 🤣🤣🤣
@klaxzy@klaxzy.net do you know what I also find equally just as stupid and dumb is having to upgrade the software license on something just to be able to get OIDC or OAuth support ffs 🤦♂️
can somebody please transcribe what he said and post it here? 🙏 I think it’s too good just to waste in a video it needs to be preserved. 🤣
Need to fix:
- threads
-media and links
We’ll all my posts are making it to the “Fediverse” https://bridge.twtxt.net/users/c350a5e5fb9d9457
