[HN Gopher] How to write a simple JIT compiler ___________________________________________________________________ How to write a simple JIT compiler Author : eatonphil Score : 167 points Date : 2021-12-15 14:19 UTC (8 hours ago) (HTM) web link (github.com) (TXT) w3m dump (github.com) | eatonphil wrote: | Eli Bendersky has another great, even simpler introduction (from | 2013) to JIT compiling but with hardcoded instructions [0]. And a | more recent post on JIT compiling Brainfuck [1]. | | [0] https://eli.thegreenplace.net/2013/11/05/how-to-jit-an- | intro... | | [1] https://eli.thegreenplace.net/2017/adventures-in-jit- | compila... | rvbissell wrote: | It amazes me how often I find myself following links back to | Eli's blog, unexpectedly. Dude's a treasure. | haberman wrote: | I wrote a blog post about a Brainfuck JIT too: | https://blog.reverberate.org/2012/12/hello-jit-world-joy-of-... | | Mine uses the DynASM framework developed for LuaJIT, so that | the assembly instructions can be written symbolically: | https://luajit.org/dynasm.html | tekknolagi wrote: | For those interested, my blog has a simple Lisp JIT | (https://bernsteinbear.com/blog/) and I maintain a bunch of | resources about other JITs of varying complexity on | https://bernsteinbear.com/pl-resources/ | throw10920 wrote: | I can attest that the other posts on that blog about AOT | compilers are also extremely solid - concrete, practical, well- | written. | tekknolagi wrote: | That's very kind. Thank you. | oso2k wrote: | Another great set of JIT introductions are | | A Basic Just-In-Time Compiler | https://nullprogram.com/blog/2015/03/19/ | | A JIT Compiler Skirmish with SELinux | https://nullprogram.com/blog/2018/11/15/ | moonchild wrote: | > APL [...] manages to achieve reasonable performance by having | interpreter operations that apply over a large number of data | elements at a time | | Actually... | http://www.softwarepreservation.org/projects/apl/Papers/DYNA... | JulianWasTaken wrote: | More good JIT tutorials can also be found in the PyPy ecosystem, | which provides tooling to add JITs to any interpreter for a | language implementation written with its (R)Python toolchain. | | E.g. here's a recent video: | https://www.youtube.com/watch?v=fZj3uljJl_k | Shubhi_29 wrote: | With hand | eterps wrote: | Experiments like these are really fun to do in a small setting. | In reality you would only get to this point after having built a | complete programming language with all its parts. But in a | situation like this you can start at the end, focus on generating | the machine code, putting it in a memory buffer and instructing | the CPU to start running it at that point. It can hardly be | called a JIT compiler of course, but you definitely get an | impression of its mechanics. | | A couple of years ago I did the JIT 'kickstarting' machinery for | fun in the Nim language: | https://github.com/eterps/loader/blob/master/syscall.nim | Rendello wrote: | Terry Davis, of TempleOS fame, did a video about writing a mini | JIT compiler in TempleOS using HolyC: | https://www.youtube.com/watch?v=RnVYXplrRkQ | no_time wrote: | I wish I had a space alien or God himself teach me low level | computer architecture. | Rendello wrote: | Terry Davis learned in university and on the job before the | schizophrenia 'kicked in'. How he was able to focus enough to | write so much solid code after the illness started, I'll | never know. | hutzlibu wrote: | It is also possible, that the illness gave him the fanatism | required to maintain the focus over the years, to come so | far with TempleOS. (That same fanatism and crazieness also | prevented people from participating I guess.) | Rendello wrote: | I bet it was less about fanaticism and more about time. | Previously, he had worked full time and made money. He | wasn't able to work after the illness (I think I read | somewhere that he was rehired by his old company, but | only lasted a few weeks). | | TempleOS wasn't the first thing he worked on after | becoming ill, he'd previously been working on a three- | axis milling machine. https://en.wikipedia.org/wiki/Terry | _A._Davis#Onset_of_illnes... | teaearlgraycold wrote: | To be pedantic, this is an in-memory AOT compiler and not a JIT | compiler. | | As an example, here's a JIT compiler I made for BrainFuck that | defers the compilation of some loops: | https://github.com/danthedaniel/BF-JIT/blob/master/src/runna... | ufo wrote: | To be a bit less pedantic, this is an area that is kind of | ambiguous... From one point of view it's still fair to call | this "just in time". | | I wish there was terminology to differentiate between kind of | "on demand AOT compilation" and jits that do jitty stuff that | can't be done ahead of time. | adgjlsfhk1 wrote: | Julia uses the term just ahead of time for this, which I | think fits well. | duped wrote: | That strikes me as just-in-time optimization less so than | ahead-of-time. | | If the code isn't compiled until it's executed, "ahead of | time" seems extremely confusing | ufo wrote: | Arguably the term "ahead of time" also suffers from the | same problem. Among compiler people, "ahead of time" vs | "just in time" sometimes has to do with whether the | compiler uses run-time information when compiling. But the | names don't reflect that, they talk about when the | compilation happens. | jhgb wrote: | > kind of "on demand AOT compilation" | | I assume you mean something like Common Lisp does with | COMPILE? (http://clhs.lisp.se/Body/f_cmp.htm) That's just | called "compilation" in some circles. | chrisseaton wrote: | > I wish there was terminology to differentiate between kind | of "on demand AOT compilation" and jits that do jitty stuff | that can't be done ahead of time. | | Some people differentiate between dynamic JIT compilation and | static JIT compilation. | ximeng wrote: | https://www.youtube.com/watch?v=xIW6qF8CE78&list=PLvdK1vRmp8... | good video series on JIT compiler implementation ___________________________________________________________________ (page generated 2021-12-15 23:00 UTC)