编程语言xilang及其对应的虚拟机xivm的开发日志。
1.为什么要做xilang?
哪个计科学生不梦想拥有一个自己的编程语言呢?
2.为什么选择类Rust的语法?
Pattern match,后置类型,更多的expr(if expr等)。真的很cooooooool!
3.为什么模仿CLR?
其实之前还用C#写过一个版本的xilang,那个版本的xilang使用类C#的语法,而虚拟机模仿的是JVM。
但是Java有各种各样的毛病,这些毛病很多是因为JVM的能力限制。例如类型擦除,本质上就是JVM没有对泛型的支持,泛型是语言层面打补丁整出来的。还有不支持栈上的用户定义数据类型,导致没有tuple,很多时数据传递候依赖堆上对象,就很笨感觉。CLR真是好!
不过项目不考虑实现完整的CLR,甚至和MSIL不兼容,因为完整的CLR过于复杂。
参考:
4.为什么使用Rust?
选择Rust更多是为了学习Rust吧。
其实写着写着会发现Rust不太适合编写特别复杂的树状或网状数据结构,为了效率往往会不可避免地使用unsafe的代码,写着写着又变成了cpp
其实如果c++能够彻底现代化,用C++或许是更舒服的选择。另外用C#也挺不错,只是写虚拟机用这么high level的语言总感觉有点膈应。
5.目标
语法类似Rust,拥有let绑定,后置类型,if/for/match表达式。
语言特性类似C#,是一个OOP语言,实现继承、重载、接口、泛型,拥有GC。
运行环境是一个类似CLR的虚拟机,支持JNI-like的Native函数。