Hacker News new | comments | show | ask | jobs | submit login
Writing a JIT Compiler in C# (mono-project.com)
48 points by lewurm 7 days ago | hide | past | web | favorite | 4 comments





For those interested in writing their own compiler in C#. There was a decent article a while back written by Microsoft employees with example code provided. Looks like MS have archived the post, but you can still browse the code (almost unadulterated) here:

https://github.com/johandanforth/good-for-nothing-compiler (not my github)

And read an expanded/in depth version of the original article (with a link to download the original source) here:

https://www.cs.helsinki.fi/u/vihavain/k14/code_generation/pr...


The appendix (Converting Stack-Based OpCodes into Register Operations) is the most interesting part to me. Targeting a stack machine is much easier when writing a compiler for the first time, but real-world machines are generally register based.

I couldn't find the authors' logic in a cursory look at the source code. Does anyone know where it actually is?


Targeting a stack machine is much easier when writing a compiler for the first time, but real-world machines are generally register based.

In general this is true, here however, we are targeting LLMV IR which is register based with infinite registers; so it's kinda easy again :-) The hard part, register allocation, is actually done by LLVM.

This class implements the conversion: https://github.com/lambdageek/mono/blob/mjit/mcs/class/Mono....


Not sure where the logic is, but a far easier explanation is: allocate a new variable each time you push into the stack (regardless of stack depth).



Applications are open for YC Winter 2019

Guidelines | FAQ | Support | API | Security | Lists | Bookmarklet | Legal | Apply to YC | Contact

Search: