Nick Desaulniers
nickdesaulniers.github.io · Personal blog · on HN since 2013
Nick Desaulniers, a compiler and Linux kernel engineer, writes tutorials on C, assembly, JITs, debugging, and kernel development.
What HN saysHN commenters praise the blog as fascinating and use his posts on JITs, designated initializers, and kernel patch submission as references.
29HN people shared it
7linked it in comments
37stories submitted
871story points
10 months agolast shared
2013people per year2026
Most-shared posts
- 1Interpreter, Compiler, JIT4 people · 83 points · first shared 2015 · 38 comments on HN
- 2Debugging an off-by-two compiler error4 people · 6 points · first shared 2020 · discussion on HN
- 3Booting a Custom Linux Kernel in QEMU and Debugging It with GDB3 people · 3 points · first shared 2018 · discussion on HN
- 4Let's Write Some x86-642 people · 163 points · first shared 2014 · 44 comments on HN
- 5Additional C/C++ Tooling2 people · 98 points · first shared 2015 · 67 comments on HN
- 6Object Files and Symbols2 people · 23 points · first shared 2016 · discussion on HN
- 7Rust Pattern Matching and the Option Type2 people · 20 points · first shared 2013 · discussion on HN
- 8Data Models and Word Size2 people · 11 points · first shared 2016 · 1 comments on HN
- 98 Months in Mozilla2 people · 10 points · first shared 2013 · 1 comments on HN
- 10GCC vs. LLVM Q3 2017: Active Developer Counts2 people · 5 points · first shared 2017 · discussion on HN
- 11Let's make a Netflix2 people · 4 points · first shared 2016 · discussion on HN
- 12Raw WebGL2 people · 4 points · first shared 2014 · discussion on HN
- 13Finding Compiler Bugs with C-Reduce2 people · 3 points · first shared 2019 · discussion on HN
- 14Designated Initialization With Compound Literals in C2 people · 3 points · first shared 2013 · 1 comments on HN
- 15Disambiguating Arm, Arm ARM, ARMv9, ARM9, ARM64, AArch64, A64, A78, ...2 people · 2 points · first shared 2023 · discussion on HN
What HN people wrote when they linked it
iyn · 2015-06-01
Thanks for recommendations.
BTW: just want to say that you have a fascinating blog! I've just spent last hour only skimming through some of the articles and bookmarking them for later. (Link for the lazy: https://nickdesaulniers.github.io/)
ndesaulniers · 2016-07-02
I love it! I just finished a blog post on cross compiling [0] which alluded to needing to have crt*.o and friends available. I was just considering exploring them in a follow up post, but I think this talk was even better and I could just point people to it.
My favorite quote from the video, paraphrased, is: "get locale is per thread, for looking up what decimal separator you'd need, so you can have a server with multiple threads where each thread has its own locale."
Also, it's neat seeing the write syscall from the interpretation of the '\n' char; years ago when using Emscripten, sometimes it seemed printf wasn't working. Turns out, our implementation of printf also buffered writes up to '\n' characters. IIRC, write was implemented with JavaScript's console.log.
[0] https://nickdesaulniers.github.io/blog/2016/07/01/android-cli/
cipher0 · 2015-03-17
These are called desginated initializers, they're part of C99.[0] This is a good read which discusses them and also devles into compound literals.[1]
[0] https://gcc.gnu.org/onlinedocs/gcc/Designated-Inits.html
[1] https://nickdesaulniers.github.io/blog/2013/07/25/designated-initializ…
codezero · 2018-12-18
I think I found this when I was reading a tutorial on JIT compilers: http://blog.reverberate.org/2012/12/hello-jit-world-joy-of-simple-jits…
Which I found in a simpler tutorial: http://nickdesaulniers.github.io/blog/2013/04/03/basic-jit/
TLDR;
It describes a programming competition/challenge that involves building programs in a self-contained VM that is built on its own programming language and system, meant to have been "discovered" as an ancient computing platform from thousands of years ago :)
bluejekyll · 2018-03-03
The process for submitting patches probably has an even larger deterrent effect than the personalities: http://nickdesaulniers.github.io/blog/2017/05/16/submitting-your-first…
I think I saw a quote from Linus that this is a good filter for non-serious contributors, but it is an additional barrier for anyone who might want to get involved.
sargstuff · 2023-10-13
QEM[2][3] & write shell script with option to a) "compile latest source & run the just compiled OS under QEM emulation" OR b) run known working OS under qem with development environment/tools for messing with source used in part a.
Advantage: on same box, one window can be the development environment. other QEM can compile/run in different window to test what was done via development environment. aka edit english paper in word processor & save. view/print the compiled results in different window.
grub / uboot[1] would be what pc hardware bios would use in place of the above QEM shell/boot script.
[0] : https://en.wikipedia.org/wiki/GNU_GRUB
[1] : https://en.wikipedia.org/wiki/Das_U-Boot
[2] : https://nickdesaulniers.github.io/blog/2018/10/24/booting-a-custom-lin…
[3] : Helpful info QEM to kernel vs QEM to bios with bios booting/loading kernel : http://unix.stackexchange.com/questions/397939/turning-off-kaslr-to-de…
ignoramous · 2026-01-03
> This is not what this article does.
Discounting books, many other well written articles on JIT have been shared on HN over the years [0][1][2]; the one I particularly liked as it introduces the trinity in a concise way: Compiler, Interpreter, JIT https://nickdesaulniers.github.io/blog/2015/05/25/interpreter-compiler… / https://archive.vn/HaFlQ (2015).
[0] How to JIT - an introduction, https://eli.thegreenplace.net/2013/11/05/how-to-jit-an-introduction (2013).
[1] Bytecode compilers and interpreters, https://bernsteinbear.com/blog/bytecode-interpreters/ (2019).
[2] Let's build a Simple Interp, https://ruslanspivak.com/lsbasi-part1/ (2015).