Max Bernstein, a compiler engineer, writes about programming language implementation, optimizers, register allocation, and Lisp compilers.
HN commenters recommend his Lisp-in-OCaml series and compiler writing, though one finds the OCaml choice hard to follow alongside an unfamiliar topic.
The comments are wildly fragmented in this thread. I agree with @torginus, the article has less and less of anything useful to people that want to get into compilers.
Anyways, the "Who .. hires compiler engineer?" section is fairly vague in my opinion, so: AMD, Nvidia, Intel, Apple, Google definitely hire for compiler positions. These hire fairly 'in-open' so probably the best bets all around. Aside from this, Jane Street and Bloomberg also do hire at the peak tier but for that certain language. The off beat options are: Qualcomm, Modular, Amazon (AWS) and ARM. Also see, https://mgaudet.github.io/CompilerJobs/
I seriously attempted getting into compilers last year before realising it is not for me but during those times it felt like people who want to be compiler devs are much much more in number compared to jobs that exist (yes exist, not vacant).
The common way to get going is to do LLVM. Making a compiler is great and all but too many people exist with a lox interpreter-compiler or something taken from the two Go books. Contributing to LLVM (or friends like Carbon, Swift, Rust) or atleast some usage experience is the way. The other side of this is doing GNU GCC and friends but I have seen like only one opening that mentions this way as being relevant. University level courses are rarely of any use.
Lastly, LLVM meetups/conferences are fairly common at most tech hubs and usually have a jobs section listing all requirements.
A few resources since I already made this…
Older editions have solutions to the exercises in book available on line (via search engine such as google)
### Some of the following assume an advanced backround:
Structure and Interpretation of Computer Programs , Abelson & Sussman &
Engineering a compiler, K.D. Cooper & L. Torczon
Modern Compiler Design (Worldwide Series in Computer Science),
Build Your Own Programming Language: A programmer's guide to designing compilers, interpreters, and DSLs for solving modern computing problems,
C Jeffery
### Alternate suggestions:
Aho et al. book covers quite a broad variety of topics/discussions.
There are resources that cover more current approaches / more indepth for a given topic/specific subject matter than would be possible in Aho et.
Depending on requirements/needs, on-line resources/courses/topics can provide access to more modern/quicker feedback:
search compiler on https://www.geeksforgeeks.org/
software perspectiv, https://program-transformation.org/
research intensive, look at specific book/documentation on how a language is/was implimented, aka cpython, java, compiling lisp, smalltalk-80, forth
General resource sites (per looking for something less expensive):
https://github.com/aalhour/awesome-compilers / https://bernsteinbear.com/pl-resources/
Cool people:
• https://tracydurnell.com
• https://www.benkuhn.net
• https://schmud.de
• https://brandur.org
• https://bytes.zone
• https://cassidoo.co
• https://www.chrbutler.com
• https://sive.rs
• https://fasterthanli.me
• https://akkartik.name
• https://www.todepond.com
• https://blog.gingerbeardman.com
• https://gwern.net
• https://interconnected.org
• https://jacobfilipp.com
• https://johnnywebber.com
• https://maggieappleton.com
• https://bernsteinbear.com
• https://pketh.org
• https://rachsmith.com
• https://sonnet.io
• https://stevenscrawls.com
• https://www.bookofjoe.com
• https://winnielim.org
---
Cool directories:
• https://blogs.hn
• https://ooh.directory
• https://deadsimplesites.com
• https://peopleandblogs.com
• https://nownownow.com
• https://blogroll.org
• https://kagi.com/smallweb
> 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-jit / 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).
I have fond memories of implementing an optimizing compiler for the CS241 compiler course offered back then by Prof Michael Franz who was a student of Niklaus Wirth, probably the most exhilarating course during my time at UC Irvine. This was in 2009 so my memory is vague but I recall he provided a virtual machine for a simple architecture called DLX and the compiler was to generate byte code for it.
Google search points me to https://github.com/cesarghali/PL241-Compiler/blob/master/DLX.pdf for a description of the architecture and possibly https://bernsteinbear.com/assets/img/linear-scan-ra-context-ssa.pdf for the register allocation algorithm
I love this book! I worked through a bunch of it during my winter break last year and found the incremental teaching style extremely rewarding. For readers of the book, Sandler’s reference OCaml implementation is super useful for getting your bearings. I was kind of thrown off by the use of TACKY as an IR, but it was nice to have a solid reference as I worked through the book. For those more experienced with compilers: what are some good resources for stuff like SSA and optimisation? I’ve looked at some of the resources here https://bernsteinbear.com/pl-resources/ but are there other canonical resources?