CatCoding

A mini Scheme interpreter written in Go

2014-06-28

figure: hare

Scheme-Brained Hare

在我学 Go 的时候开始了一个自己的业余小项目,就是这个GoScheme,打算用 Go 来写一个 Scheme 解释器,因为重写轮子是学习新东西的好手段。
现在基本完成了,当然只是一些基本的语法支持,没有宏。

我只是用这个项目来熟悉 Go 的语法,Go 来做这种项目没有特别大的优势,这个项目用 C 来实现代码量会更少一些。比如这里个里面的基本数据对象包括各种类型,boolean, symbol, fixnum, proc 等等,又都是一个 Object 类型。如果是 C 可以用 union 类型来表示,然后通过 Object*实现接口上的统一操作各种数据,类似的代码像这样子:


typedef struct object {
    object_type type;
    union {
        struct {
            char value;
        } boolean;
        struct {
            char *value;
        } symbol;
        struct {
            struct object *car;
            struct object *cdr;
        } pair;
		// ..........
    } data;
} object;

Go 里面没有 Union 这种类型,所以我用了reflect来实现这些东西,看起来还不是那么简洁。Go 的自带的一些 toolset 还可以,比如 testing,format,coverage 等,可以减少一些琐碎的事。

另外,以后项目里配一下 travis-CI 可以做集成测试。

Go 更适合做一些需要并发的任务,比如服务端的事情。

公号同步更新,欢迎关注👻