编译器的结构框架
根据⾃⼰多年的学习和思考,画了⼀个编译器的结构框架图,转载请注明出处。
perl语言学习
⽬标代码是机器语⾔或汇编语⾔,汇编语⾔可以通过汇编器⽣成机器码。汇编语⾔的定义取决于CPU的体系架构,⽬前主要有三种:
x86/x64, ARM, MIPS。
中间代码是虚拟机的机器语⾔,虚拟机⽬前主要有四种:CLR, JVM, Parrot, LLVM。CLR⽤于.Net平台,JVM⽤于Java语⾔,这两个是基于栈的虚拟机。Parrot⽤于脚本语⾔,⽐如Perl,Python,Ruby等;LLVM⽤于C、C++等语⾔,这两个是基于寄存器的虚拟机。在性能上⽐较⽽⾔,基于寄存器的虚拟机优于基于栈的虚拟机。
现在做编译器主要是做前端,后端有这四种虚拟机和GCC可⽤,解析器也有很多成熟的算法和⼯具可⽤。⾸要的难点是如何定义编程语⾔的语法、语义和运⾏时的内存管理,如何在简单与复杂之间取⼀个平衡点。
⽬前在使⽤的编程语⾔有很多种,各种语⾔都有⾃⼰的优点和缺点,能不能在⼀种语⾔中把⼤部分优点集合起来,把缺点消除掉?