开源的swift编译器实现:Swallow

jopen 10年前

Swallow 是一个开源的swift编译器实现,不过目前还没完工,只能当做一个体验版,好多东西都还需要大量的时间去开发,我只能在业余的时间去开发,加之要照顾怀孕的妻子以及有自身的全职工作,因此我不能保证开发进度能很快。

现在连代码生成都还没来得及弄,现在的版本只提供了一个粗糙仿制的REPL,可以看到现在的进展情况。暂时自带的REPL只能查看一些语法和语义错误,以及查看符号的类型推导的结果。

目前语法分析参考的是官方文档最早的版本(2014年6月2号发布的版本),因此好多新语法尚不被支持,后来几次的版本,语法改动相对较小,所以我现在的开发重心一直放在语义分析这块,等做得差不多了,我再来回过头增加新的语法糖支持。

语义分析这块目前的版本能处理函数重载,操作符重载,自定义操作符,类型定义(class/struct/protocol),泛型,泛型约束,类 型推导以及变量声明(包括以元组的方式)等,目前的版本还没有处理控制流,extension,模式匹配等,这些将在接下来的日子里陆续完工。

代码生成这块打算使用LLVM来完成,这样方便利用LLVM的工具链来提供完整的生态系统。

编译器代码本身尽量用测试用例覆盖,但是在做REPL的时候发现好多情况都没考虑到,那些会引起REPL崩溃的代码 将会陆续放入到测试用例中的,后期也打算将swift-compiler-crashes的代码也集成到测试用例中去。

需要注意的是目前的版本为了方便用单元测试,内建类型(比如Builtin.Word)在语法分析里做了简单的hack来处理,这个错误的做法将在整个编译器能完整的支持标准库的时候再进行修正。

Build instructions

Clone this repository to your drive:

$ git clone https://github.com/lexchou/swallow/

Build google-test:

$ cd swallow/gtest-1.7.0/  $ ./configure  $ cmake -G 'Unix Makefiles' .  $ make

Build the swallow/repl/test cases:

$ cd ..  $ cmake .  $ make

Start repl:

$ repl/repl

构建过程

先将项目克隆到本地:

$ git clone https://github.com/lexchou/swallow/

然后编译: google-test:

$ cd swallow/gtest-1.7.0/  $ ./configure  $ cmake -G 'Unix Makefiles' .  $ make

然后编译 swallow/repl/test cases:

$ cd ..  $ cmake .  $ make

执行 repl:

$ repl/repl

Snapshots

Comparison between official REPL and swallow

开源的swift编译器实现:Swallow

Type inference

开源的swift编译器实现:Swallow

Function overloads

开源的swift编译器实现:Swallow

项目主页:http://www.open-open.com/lib/view/home/1416214818695