今天我的一位好朋友问我最新的Go语言和Cython之间的主要区别是什么,这是一组Python的C扩展。我对Python知之甚少,谁能告诉我为什么Go比Cython更好/更差?
答案 0 :(得分:9)
Cython并不是传统意义上的语言。它是一个用于构建Python扩展的预处理器,它采用类似Python的语法(实际上它们力求完全兼容Python)并生成C代码(使用Python C API)。这样做可以包含一些特殊情况优化,但是当你添加Cython特定的静态类型信息时,真正的好处就会出现,这些信息被合并到C代码中,绕过这些操作的Python运行时并导致高速运行。
Go是一种编译的编程语言。在Go中可以做的第一件事就是生成一个不包含Python运行时/启动Python解释器的可执行文件 - 这在Cython中是不可能的。 (可能在技术上不可能 - 但如果你不使用Python,那么使用Cython是没有意义的)。由于Cython只是在注释中生成C大多数问题并不真正适用 - 你可以使用任何C调试器(尽管事实上这是Python扩展使事情变得更复杂)。
答案 1 :(得分:5)
gevent是一个以Cython为核心的并发库。它看起来非常快:http://nichol.as/asynchronous-servers-in-python
答案 2 :(得分:4)
的差异?几乎所有东西!
答案 3 :(得分:2)
支持怎么样?您依赖于Google提供的单个编译器。如果Go折叠或商业化会怎么样?
使用Cython,如果Cython项目折叠,你总是可以回到Python(或移植C代码)。
更新:我必须说我现在对Cython感到不满。 缺乏线程支持 是一个重大打击。 Cython是线程安全的,但成本很高。全局解释器锁在函数执行的整个时间内保持。从而禁止在整个代码库上执行并发执行!
Cython的C类功能记录很少,并且对初学者来说很困惑。我承认。
Cython的目的是支持Sage数学软件; Go是为了支持谷歌雄心勃勃的计划,提供最先进的昂贵的$$硬件。
简而言之,我不再喜欢这些语言中的任何一种。回到C ++(再次)。 我最喜欢的是 Cython 。
答案 4 :(得分:1)
GO介绍了goroutines和渠道。请参阅语言FAQ
答案 5 :(得分:1)
我尝试go的主要原因是将并发引入程序的容易程度。我认为这将是“下一件大事”,因为处理器速度将会下降,并且可以使用越来越多的内核。如果你想使用多核处理器,你需要编写你的程序,以便它可以同时运行。
我之前看过Erlang,但是尽管习惯了Prolog,我发现它仍然有点奇怪;它与你的“普通”编程语言(C或Pascal系列)有很大的不同。但是一旦你掌握了它,它的并发功能就很容易使用了。只需很少的努力,我就可以编写一个并行解析器,它不使用堆栈,但每次有多个选项时都会生成一个新的“线程/进程”。
到目前为止看起来很顺利,尽管有一些轻微的不一致。它也很快,这是一个奖励。
因此,除非Cython使并发变得容易,否则我会赞成...