I have just pushed out an experimental update to my profiler with a feature that I have wanted for a long time: dynamic instrumentation. Add instrumentation to programs at runtime without recompiling them.
Sebastian Schöner
@sschoener.bsky.social
Programming! - previously at Epic Games, Unity Technologies, Paradox Dev Studios https://blog.s-schoener.com
I have built a Windows x64 sampling profiler for native code+C# to be used by coding agents. Why? Because it is irresponsible to let computers write code but give them no tools to evaluate the performance of their code. Stop guessing, start measuring. -> profiler.kerntief.net
kerntief Profiler
profiler.kerntief.net
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...
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...
What I learned from improving Unity's Mono codegen, part 2 | Sebastian Schöner
My current sidequest is to improve the codegen for Unity games (and the editor) running on Mono. This post is a continuation of last week’s post about this journey. To LLVM or not to LLVM? The first d...
blog.s-schoener.com
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...
What I learned from improving Unity's Mono codegen, part 1 | Sebastian Schöner
My current sidequest is to improve the codegen for Unity games (and the editor) running on Mono. This post and the next two are about this process and what I learned. In this post, I am going to give ...
blog.s-schoener.com
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...
Better codegen for Unity games on Mono | Sebastian Schöner
tl;dr: I am tinkering with improved codegen for Mono to get better performance in the Unity Editor and in Unity games that ship with Mono as their runtime. Not done yet, but please do get in touch if ...
blog.s-schoener.com
How trying out Zig made me miss header files blog.s-schoener.com/2026-03-27-h...
I miss header files | Sebastian Schöner
I am currently on a side quest to write some Zig code, or more specifically: take some C++ code that is written in a I-can’t-believe-it’s-not-C style and turn it into Zig. This entire adventure starte...
blog.s-schoener.com
It has never been about the typing blog.s-schoener.com/2026-03-18-n...
It has never been about the typing | Sebastian Schöner
My friend Stefan Reinalter is asking: I find this extremely worrying, with many of people I respect saying things like “I no longer write code” or “let LLMs do it”. Why did you start programming? Was ...
blog.s-schoener.com
What I've learned over the last 1.5months of writing a GUI library: blog.s-schoener.com/2026-02-09-g...
Putting slim locks on a diet blog.s-schoener.com/2026-01-28-r...
Putting slim locks on a diet | Sebastian Schöner
Let’s talk about reader-writer locks. Reader-writer locks are what you employ when you know that multiple readers can safely access a resource concurrently, but once there is a single writer that writ...
blog.s-schoener.com
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...
Spinning around: Please don't! - siliceum
Embark on a journey about why you should sometimes trust your OS more than yourself.
siliceum.com
A piece on how I learned to appreciate the brainless enthusiasm of AI agents. blog.s-schoener.com/2026-01-14-c...
Clauded optimism | Sebastian Schöner
This post is a continuation of my last post about programming with AI agents. I wanted to specifically talk about one property of Claude Code: The constant “Yes, of course!” and “That’s a brilliant id...
blog.s-schoener.com
An early good bye to 2025: blog.s-schoener.com/2025-12-19-y...
An early good bye to 2025 | Sebastian Schöner
There are less than 2 weeks left in 2025 and this means it is time to look back at the last year. In last year’s review I ended on this note: For the next year, I hope to spend more timing painting in...
blog.s-schoener.com
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...
When better codegen doesn't help | Sebastian Schöner
I want to write a few words about what sorts of games benefit from my build postprocessor for Unity il2cpp builds, cpp2better. It’s not the case that every game unconditionally benefits from it to the...
blog.s-schoener.com
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...
How to figure out why C# projects are rebuilding | Sebastian Schöner
A friend recently joked that all my blog posts are to some level just trauma processing. He is not entirely wrong. Today’s trauma is “why does it take 12s to recompile C# when nothing has changed?” I ...
blog.s-schoener.com
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...
cpp2better, an il2cpp postprocessor | Sebastian Schöner
It’s been a while since I last talked about cpp2better. Time for an official “here it is” post. What is cpp2better? cpp2better is a tool that hooks into your build pipeline for Unity to achieve better...
blog.s-schoener.com
Do you want to know about what things might go wrong when cross-compiling from Linux to Windows? No? Ah, too bad. Then don't click the link below. blog.s-schoener.com/2025-09-29-c...
What can go wrong in cross compilation | Sebastian Schöner
I have been unfortunate enough to embark on a journey of C++ cross-compilation, by choice nonetheless. In my case, I use clang to compile on a Linux machine to get binaries for a Windows machine. This...
blog.s-schoener.com
How I accidentally served as the control group for an AI experiment blog.s-schoener.com/2025-09-17-c...
How I became the control group in an AI experiment | Sebastian Schöner
At the risk of alienating almost everyone reading this blog, I wanted to report some first hand experience of interacting with AI for programming. I specifically want to talk about how I accidentally ...
blog.s-schoener.com
How my attitude to "unfinished" code changed blog.s-schoener.com/2025-09-08-t...
TODO TITLE | Sebastian Schöner
In the past, I used to work in a codebase that had a lot of // @TODO: comments in it. Those TODOs would rank from obvious, small improvements to calls for features that would require an entire rewrite...
blog.s-schoener.com
Unreasonable within reason blog.s-schoener.com/2025-08-29-r...
Unreasonable within reason | Sebastian Schöner
Over the years I have come to appreciate “unreasonable” coworkers. What a weird sentence to write, right? When it comes to programming, you are usually fairly well advised to be “reasonable.” For exam...
blog.s-schoener.com
On a quest to become more naive. blog.s-schoener.com/2025-08-19-s...
Speaking with curiosity | Sebastian Schöner
I had two interactions recently that surprised me in light of how I think about this blog. In the first interaction, someone referred to me as a “performance expert.” Thank you, that’s very kind of yo...
blog.s-schoener.com
Toying around with C vs. C++ compile times: blog.s-schoener.com/2025-08-13-c...
Does C compile faster than C++? | Sebastian Schöner
I recently found myself wondering whether it is faster to compile C than C++. On some level, the answer to this is an obvious “yes”: You can’t accidentally summon cthulhu SFINAE-thulhu in your C code,...
blog.s-schoener.com
What I learned about debug performance of C++ vector math: blog.s-schoener.com/2025-08-07-v...
Vector types and debug performance | Sebastian Schöner
For reasons, I have found myself writing a vector math library. Like Aras some time ago I’ve found an unpleasant surprise when looking at the debug performance of some vector types. There is no point ...
blog.s-schoener.com
How to speed up random memory accesses blog.s-schoener.com/2025-07-28-r...
How to speed up random memory accesses | Sebastian Schöner
At some point when optimizing software, you are left with a soup of pointers that you just have to dereference, even though you know that you are going to suffer a cache miss for every single read. Co...
blog.s-schoener.com
How to iterate over section data in C++, and a disappointing conclusion blog.s-schoener.com/2025-07-14-s...
How to iterate over section data in C++ | Sebastian Schöner
Last time, we looked at callbacks you can directly embed into your binaries on Windows that are then called for every thread on start/end. The runtime is using this to initialize thread-locals that re...
blog.s-schoener.com
How to get thread create/exit callbacks on Windows, and learn a little bit about TLS on the way blog.s-schoener.com/2025-07-07-t...
How to get thread create/exit callbacks on Windows | Sebastian Schöner
I recently needed to run a callback on thread shutdown and creation, on Windows. For exiting, you can apparently use FlsAlloc (MSDN), which is a part of the Fiber API. I’ve tried that, it works. But t...
blog.s-schoener.com
Making stupid mistakes: blog.s-schoener.com/2025-07-04-s...
Stupid mistakes | Sebastian Schöner
Quite often, I see this: Forget it, I’m stupid, this is all wrong. or Sorry, I broke it, it was a stupid and unnecessary mistake. While some mistakes are actually unnecessary and completely avoidable,...
blog.s-schoener.com