Treasure / typelang

Created Wed, 04 Oct 2023 00:00:00 +0000 Modified Thu, 28 Mar 2024 03:25:35 +0000
628 Words

这篇文章将会是一个系列,更新会比源码慢,文档写的也不会写的很完全,名字暂定 typelang, C syntax-like

设计缘由

早在2019之前就想开发一门脚本语言,一是加深编译原理的理解,二是觉得程序员不应该消耗在语言特性上,也一直想为自己的服务端框架 skynet-go 写一门dsl,现在是用lua作为服务的脚本端。但由于的若约束性导致在开发的时候很多同时并不够优雅,总是以一种奇怪的方式来解决问题,Lua本身并没有任何问题,它被设计之初是为了修补C的不足,但它的语法设计却并不符合我的预期。

尽管它的性能是脚本语言中顶尖的,但是一些隐式写法并不能保证它的预期性能,如混合table,过多的函数调用栈,字符串操作以及无类型系统。

关于类型系统有利有弊,但我个人的观点是宁愿多出30%的开发时间,从而减少70%的bug。

Register Based 和 Stack Based

python,ruby,js,java 属于 Stack Based, 而lua在5.0之后则属于Register Based.

关于它们的区别,无非是一次表达式计算需要多少步骤,形如 c=a+b,对于stack base,需要3个步骤,而对于register base,只需要1个步骤。

目标

  • C syntax-like

  • 强类型,消除弱类型的副作用,编译时进行类型检查

  • 提供协程支持,最开始的想法是类似于 v8-vm,但后续有了新的想法,为了方便集成宿主语言的异步操作,内置yield 关键字。

  • 支持宿主语言交互

  • 函数式

  • 模式匹配

  • register based

  • jit编译,暂时考虑 llvm

目录

  1. 词法分析器(Lexer)

  2. 语法分析器(Grammar)

  3. 抽象语法树(AST)

  4. RegisterBased

  5. 伪汇编指令(bytecode)设计