在我学 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 更适合做一些需要并发的任务,比如服务端的事情。