I wanted Zig's nice toys. My DLL hot reload setup wanted an ABI. We met somewhere in the middle, and now I have the worst of both worlds. Return of the Header File 2, now live: blog.s-schoener.com/2026-04-16-z...
Posts by Sebastian Schöner
Thanks. It's nice to hear that. While I don't necessarily just write for others, I wasn't sure how much anyone else actually cares about this topic in particular :)
More learnings from turning Mono into an optimizing compiler. This time: Why not LLVM? Was it a good idea to start with x64 peepholes? Plus some thoughts about aliasing. blog.s-schoener.com/2026-04-13-m...
Why does a tiny float4 function blow up into 400 lines of assembly on Mono? Value types, lowering, and lots of unnecessary copies. I wrote up a step-by-step walkthrough from C# to IR to final codegen. blog.s-schoener.com/2026-04-07-m...
I have spent some time on a little project to improve codegen for Unity's Mono runtime, which is used in the editor and is even what some games ship on: blog.s-schoener.com/2026-03-31-b...
Yes! There's so much code you know that *should* be written, but writing it? Urgh. I currently have an agent binary searching through compiler failures by tracing what optimizations fire in what methods and then deny-listing half of them. The idea is obvious, but implementing it by hand? No thanks!
I'm flattered :) -- fwiw, it took me a while to understand the RectTransform layouting, but once it clicks, it's very good indeed. I have only recently used a very similar approach for a new UI system.
Elements need to be keyed manually. There is no auto-keying, but you can often derive it from content (e.g. a button can be identified by its text within its parent scope). It's essentially what DearImGui is also doing :)
nice side-effect of making all cross-frame dependencies explicit and obvious. One of my main gripes with immediate mode GUIs is the layout lag/stabiliziation frame that you sometimes see, and it was important to me to make it obvious where that exists as a risk.
but sometimes it happens explicitly. In the case of interactions, the system handles it for you ("oh, you created spot XYZ? That existed last frame and we're hovering it!"). In some other cases, you have explicitly say "I am now querying the position of this box in the last frame". This has the...
I use hierarchical keys to give every item a hash. The state flip-flops between two arenas: last frame and previous frame. So at the start of a new frame I can use the new mouse pointer to compare it against last frame's data, and then you can query it using the hashes. Most of this is implicit, but
What I've learned over the last 1.5months of writing a GUI library: blog.s-schoener.com/2026-02-09-g...
Ever wrote spin-locks or had to debug them?
I have, and I got tired of seeing (and writing) crappy ones, so I did a real investigation this time.
Spoiler: trust your OS.
siliceum.com/en/blog/post...
A piece on how I learned to appreciate the brainless enthusiasm of AI agents.
blog.s-schoener.com/2026-01-14-c...
I wrote a few words about when improving codegen actually leads to better performance, motivated by my experiences with cpp2better: blog.s-schoener.com/2025-12-04-w...
How do you figure out why your C# projects are rebuilding, and how does the MSBuild log help?
blog.s-schoener.com/2025-11-24-m...
can we declare this an international holiday already?
Every once in a while, I check the reviews on my games on Steam. It's always nice when a game finds the exact player it was made for. New review from July:
"We Love this game, it plays as advertised." (store.steampowered.com/app/1584170/...)
How I advertise it:
Is your company interested in trying Live++? Want to know what it can do for you? Curious about its features?
You can now request a live demo through our website - free of charge!
liveplusplus.tech/request_live...
#cpp
Do you want to improve the performance of your il2cpp Unity projects, without changing your code or your assets? My il2cpp build processor cpp2better is now officially available (on request). Reach out to me, details here: blog.s-schoener.com/2025-11-04-c...
Fantastic! I saw it the other day, excellent change. I am also looking forward to watching the talk, I am sure I'm going to learn some new tricks!
Ahhh you should have said you are going to be in Stockholm, I would have gladly invited you for dinner!
I'm currently dealing with dawn as well. We started with github.com/eliemichel/d... (used via github.com/eliemichel/W...), which provides binaries and also does a slightly leaner build of Dawn. Ironically, I have just decided to build Dawn myself today and ditch the binaries :)
There are plenty of cases where Windows will actually stop you from deleting a file while it is in use. Try deleting a DLL that's loaded into a process, for example.
But to be very precise, the entire post shows that Windows doesn't actually stop you very much, so I also disagree with it :)
Removing the API isn't the only option. It could be marked deprecated, it could get an API upgrader. The upgrade wouldn't Remove the allocation, but it could clearly tell people "this is more expensive than you think."