Go 是一种由 Google Inc. 开发的编译型、垃圾回收、并发编程语言。 [1]
逐点比较
- 哲学 - Go [2] 和 Lua [3]
- 类型系统 - Go 支持静态类型,没有继承或类型之间的任何关系。
- 类型 - Go 具有更多内置类型(例如各种大小和符号的整数),而 Lua 代码通常只使用数字类型(通常是浮点数)。对于 Lua,还可以参考 [LNUM 补丁]。
- 多返回值 - 这两种语言都支持。
- 字符串在这两种语言中都是不可变的。
- C/C++ 接口 - 在 Lua 中发展良好(BindingCodeToLua)。Go 可以使用 cgo 链接到 C [4],SWIG 现在也支持 Go。 [5].
- 并发 - Lua 和 Go 都支持协程的形式(Go 中称为“goroutine”)。Go 具有通道,使并发更安全,并且 goroutine 可以多路复用到并发线程上(参见 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 的切片。
参见
最近更改 · 偏好设置
编辑 · 历史记录
最后编辑于 2012 年 8 月 16 日上午 11:34 GMT (差异)