<sub class="descriptionSection">27-09-2024 06:26:pm // #Low-level // [[Programmierung]]</sub>
____
## Compiler
Compiler (genauer **Ahead of time** Compiler) übersetzen Quellcode in Maschinencode, der auf einer bestimmten Plattform läuft.
> [!NOTE] Note
> Mit Plattform ist hier die Kombination aus Hardware und Betriebssystem gemeint.
Compilierte Programme laufen relativ schnell und kann immer wieder gestart werden.
Compiler optimieren beim Übersetzen den Code und übersetzt dabei auch Programmteile anders als der programmierer sie geschrieben hat oder moved Variablen z.B nicht in den Arbeitspeicher sondern direkt in die CPU Caches oder Register um access times gering zu halten.
Beispiele für Compiler-Sprachen:
```text
C, C++, Rust, Zig
```
Oft nutzen heutzutage Compilersprachen das konzept einer [[LLVM]].
## Interpreter
Interpreter führen code Zeile für Zeile auf der CPU aus, genauso wie der Programmierer ihn geschrieben hat. In der Regel laufen diese Sprachen sehr viel langsamer als sprachen mit Compilern.
> [!NOTE] Note
> Damit ein Interpreter funktioniert, muss jeder anwender den Quellcode auf ihrer Platform haben.
Der Vorteil gegenüber einer Compiler Sprache sind, dass das übertragen von Platform zu Platform einfach ist.
Beispiele für Interpreter Sprachen:
```text
Javascript, Python, Basic, VB
```
## Just-in-time-Compiler (JIT-Compiler)
JIT-Compiler kompilieren einige Prgrammteile **aber nicht den kompletten code** on Runtime. Er behält die meisten Vorteile eines [[#Interpreter]] bei, kann aber manche Programmteile optimieren.
Moderne Interpreter sprachen nutzen sehr häufig JIT-Kompilierung.
Beispiele für den Einsatz von JIT-Kompilierung:
```text
Javascript, Python, PHP
```