0%

Xilang开发日志0

编程语言xilang及其对应的虚拟机xivm的开发日志。

Github repo

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过于复杂。

参考:

ECMA-335 CLI标准

clr开源代码

mattwarren的blog

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函数。