LLVM
From this ELI5 https://www.reddit.com/r/learnprogramming/comments/t6y74/eli5_what_is_llvm_can_it_be_used_for_general/
Normally source code to assembly
LLVM is a middleman VM that can make things easier on both ends (source code to LLVM, LLVM to assembly)
You now only need two things (depending)
- creating new high level language: front end (source code to LLVM)
- creating new chip/instruction set: LLVM assembler (LLVM to assembly)
Previous state of the world before LLVM: must be responsible from source code all the way to assembly PER language PER chip = massive headache.
practically high level assembly
need to develop a front end (high level to LLVM)
develop a back end (LLVM to ISA)
compile time
- translate symbolic to absolute address
link time
- external dependency link, still part of generating executable
load time
- putting executable in RAM
run time
JIT
Follow-up
- RISC vs CISC and chip ISA’s (instruction set architectures)
- JVM
More
- https://stackoverflow.com/questions/7901576/what-are-the-tradeoffs-of-performing-static-analysis-on-source-code-byte-code
- https://en.wikipedia.org/wiki/Comparison_of_application_virtualization_software
- https://www.hackingnote.com/en/versus/llvm-vs-jvm
- https://stackoverflow.com/questions/12191462/what-is-the-difference-in-byte-code-like-java-bytecode-and-files-and-machine-cod
- https://wiki.osdev.org/ELF
- http://www.cs.cmu.edu/afs/cs/academic/class/15745-s13/public/lectures/L3-LLVM-Overview-1up.pdf