这篇文章将会是一个系列,更新会比源码慢,文档写的也不会写的很完全,名字暂定
typelang
, C syntax-like
设计缘由
早在2019之前就想开发一门脚本语言,一是加深编译原理的理解,二是觉得程序员不应该消耗在语言特性上,也一直想为自己的服务端框架 skynet-x 写一门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