2009 年 11 月 10 日这天 Google 推出了新的编程语言 Go,而此前一天 Vim 的作者 Bram Moolenaar 也推出自己开发中的语言 Zimbu。这两种语言引起了我极大的兴趣,今天阅读了文档并下载源码编译了 Go 和 Zimbu,记录一点自己的体会。
关于 Go,一个形象的说法是 A System Programming Language That’s Python Meets C++。首席软件工程师 Rob Pike 说:我们开发 Go,是因为近 10 年左右开发程序之难让我们有点沮丧。Go 的定位是系统编程,比如 Web 服务器、存储系统和数据库等,但也欢迎在其它方面的应用。由于这个语言还处于试验期,Google 内部也只是进行测试,尚未进行大规模运用,在此也无法对它做出过多评价。
目前 Go 语言提供了两种 Linux、Mac OS X 下的编译器,为 8g、6g 等 Go compiler 和基于 gcc 的 gccgo,官网介绍了安装方法。我使用的是 Ubuntu,决定采用 gccgo 编译器。安装方法在官方页面有介绍,具体操作如下。
svn checkout svn://gcc.gnu.org/svn/gcc/branches/gccgo gccgo
mkdir objdir
cd objdir
../gccgo/configure --enable-languages=c,c++,go --with-arch=core2 //这里根据你的cpu选择不同型号
make
make install
编译需要安装以下软件包:
sudo apt-get install build-essential libgmp3-dev libmpfr-dev //具体情况看configure的输出信息,我这里安装的是编译必要环境、svn和GMP、MPFR两个库。
编译前做好心理准备,我的 core2 t6570 大概编译了两个半小时……
漫长的准备工作结束后,接下来先写个经典的 Hello World 吧。
package main
import "fmt"
func main() {
fmt.Printf("Hello, 世界\n")
}
编译运行时报错,找不到 libgo.so.0,这个问题目前还没有解决…… 发现解决方法了,报错信息为
./a.out: error while loading shared libraries: libgo.so.0: cannot open shared object file: No such file or directory
主要原因是找不到 libgo.so.0,后来发现是在/usr/local/lib64(我是 64 位系统,32 位系统可能是 lib32)内,解决方法:
export LD_LIBRARY_PATH=/usr/local/lib64
接下来就是 Zimbu 了,官方网站的介绍如下:
Suppose you want to write a new program, something like a text editor. What language would you write it in?
- It has to be as fast as possible, so interpreted languages are out.
- You don’t want to micro manage memory, so C is out.
- You don’t want to require programmers to have a degree, so C++ is out.<
- You want fast startup and not depend on a big runtime, so Java is out.
- It has to run on most systems, anything with a C compiler, so D is out.
- You want to have fun making something new.
No existing language really meets these demands, so let’s create a new one that does.
难道 Bram Moolenaar 想用 Zimbu 把 Vim 的代码改写一次吗?
在这里可以下载到 Zimbu 的源码,目前 Zimbu 还处于开发中,可以编译一些小测试程序。
Hello World 的程序代码如下:
MAIN()
IO.write("Hello, world!\n")
}
MAIN()就是主函数入口,不过这种大写的风格是在让人不舒服。IO 模块是作为语言的一部分,所以不需要载入的操作。字符串风格和 C 很像,大括号只保留“}”,避免了关于“{”位置的争执,这点我觉得很好。