本书尝试以实现 µGo 编译器为线索,尝试以边学习边完善的自举方式开发一个玩具语言。
µGo 是迷你Go语言玩具版本,只保留最基本的int数据类型、变量定义和函数、分支和循环等最基本的特性。µGo 有以下的关键字:var
、func
、if
、for
、return
。此外有一个int
内置的数据类型,func input() int
函数读取一个整数,println(...)
打印函数。
比如计算1到100的和对应以下代码:
func main() {
var sum int
for i := 0; i <= 100; i = i+1 {
sum = sum+1
}
println(sum)
}
µGo 的具体定义会根据需要和实现的情况调整,目前可以将其作为Go的最小子集就可。
因为是编译器,最终会输出可执行程序。包括以下几种并列的目标:X64汇编、LLVM汇编、WASM文件(后续或许会考虑输出 AArch64 汇编)。
- 因为坑就在那里
- 不希望被Rxxx语言把脸摁在地上摩擦
- 凹坑的工具差不多齐全了
- ?