Go 是由 Google Inc. 开发的一种已编译、自动垃圾回收、并发编程语言。[1]
逐点比较
- 理念 - Go [2] 和 Lua [3]
- 类型系统 - Go 支持静态类型,但不支持继承或类型之间的任何关系。
- 类型 - Go 拥有更多的内置类型(例如,不同大小和有符号/无符号的整数),而 Lua 代码通常只使用 number 类型(通常是浮点数)。关于 Lua,也可参阅 [LNUM 补丁]。
- 多返回值 - 两种语言都支持
- 字符串在两种语言中都是不可变的
- C/C++ 接口 - 在 Lua 中开发完善(BindingCodeToLua)。Go 可以使用 cgo 连接到 C [4],SWIG 现在也支持 Go。[5]。
- 并发 - Lua 和 Go 都支持协程(Go 中称为“goroutines”)。Go 拥有 channels,使得并发更安全,并且 goroutines 可以被多路复用到并发线程上(参见 GOMAXPROCS 运行时选项)。
- RAII/异常 - Go 的“defer”语句支持在作用域退出时执行(在函数级别而非块级别)[6]。Lua 原生不支持,但可参见 ResourceAcquisitionIsInitialization。Go 和 Lua 都没有 try-catch 语句 [7],但 Lua 中的 pcall 函数类似,Go 中的 panic/recover 结构也类似。
- 标准库 - Go 的标准库更大 [8],并且不局限于 ANSI C。
- 稳定性 - Go 1 版本已稳定[[9]],并广泛应用于生产环境[10]。Lua 是一种成熟的语言和实现。也可参见 LuaFiveTwo。
- 编译器 - Go 有两个完整的稳定编译器,主要的 'gc' 编译器,以及 gccgo[11],还有一个 LLVM 前端正在开发中:llgo[12]。Lua 有 LuaImplementations。
- 语法 - Go 的大括号和注释语法比 Lua 更接近 C,但仍有许多方面偏离 C [13]。
- 运行时速度 - Lua 和 Go 都强调效率,特别是 Lua 的 LuaJIT 实现。Go 是一种已编译语言。
- 编译速度 - Lua 和 Go 都强调编译速度。Go 在处理大型项目树方面有新颖的方法,带来了指数级的速度提升。
- 指针 - Go 有指针但没有指针算术,以保证安全[14]。Lua 没有指针。
- 垃圾回收 - Lua 和 Go 都使用垃圾回收。[15]
- 可移植性 - Lua 可以在任何有 ANSI C 编译器的环境中运行。Go 可以在类 Unix 系统和 Windows 上运行。Plan 9 的移植正在进行中。
- Go 有命名结果参数[16](另见:上面提到的多返回值)。
- Go 有 Python 风格的切片。
另请参阅
RecentChanges · preferences
编辑 · 历史
最后编辑于 2012 年 8 月 16 日上午 5:34 GMT (差异)