Skip to content

因为现代 JS 的复杂性阻碍了我对它的了解,所以我选择穿越历史迷雾,站在 Brendan Eich 的视角上,利用自己的工程经验来演变这门语言。

Notifications You must be signed in to change notification settings

keyboard3/learn-compiler

Repository files navigation

learn-compiler

通过JS语言为入口,学习实践编译原理。
面对JS复杂的语言实现,选择穿越历史迷雾,站在Brendan Eich的视角上,利用现代的思想和知识站来演变这门语言。
理解和实践之间有巨大的鸿沟,如果不去实践理解,那么永远都是纸上谈兵,没有任何战斗力。

JS 一览

建议阅读 JavaScript 20年

版本 实现(参考)
ES 1.0 macha(JavaScript-1.1)
ES 2.0 SpiderMonkey(JavaScript-1.4.2)
ES 3.0 SpiderMonkey(JavaScript-1.5.0)
v8 tag 0.1.5
ES 5.1 SpiderMonkey(JavaScript-1.8.5)
v8 tag 3.2.9
JerryScript
v7
ES 2015-ES Next v8-dev
QuickJS

其他推荐

Mozilla JavaScript 1.1-1.8.5
Exploring JS
how to read ES
v8 changelog

计划

  • 超简单的解释器jssuper tiny interpreter
  • 超简单的解释器c++super tiny interpreter
  • 简单的js解释器jstiny interpreter
  • 简单的js解释器c++tiny interpreter
  • 基于js实现es5语法的解释器:acorn interpreter es5
  • 超简单解释器基于栈机解释jssuper tiny virtual machine
  • 超简单解释器基于栈机解释c++super tiny virtual machine
  • 简单解释器基于栈机解释jstiny virtual machine
  • 简单解释器基于栈机解释c++tiny virtual machine
  • LLVM 第一个语言教程 kaleidoscope
    • 词法分析
    • 语法分析和抽象语法树
    • 代码生成 LLVM IR
    • 添加 JIT 和代码优化
    • 扩展支持控制流
    • 扩展支持用户定义操作符
    • 扩展支持修改变量
    • 编译成目标文件
    • 支持 Debug
  • 基于 babel 实现原型栈机解释器js
    • 基础类型
    • 算数表达式
    • 一等公民函数
    • 嵌套函数声明
    • 对象数据类型
    • 函数表达式
    • 函数的 call 和 apply 方法
    • 基于原型的继承
    • 闭包
    • 对 undefined 的全局绑定
    • try-catch-finally 语句
  • 跳过语法树基于字节码的原型栈机解释器c++

About

因为现代 JS 的复杂性阻碍了我对它的了解,所以我选择穿越历史迷雾,站在 Brendan Eich 的视角上,利用自己的工程经验来演变这门语言。

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages