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