今天我的一个好朋友问我最新的Go语言和Cython(Python的C扩展集)之间的主要区别。我对Python不是很了解,有人能告诉我为什么Go比Cython更好/更差吗?
gevent 是一个并发库,其核心使用 Cython。它似乎非常快:http://nichol.as/asynchronous-servers-in-python
with nogil: ...
和使用 OpenMP 的并行支持。这在本地优化方面效果非常好。如果您有阻塞代码(比如通道),Gevent 也可以很好地发挥作用。但是需要注意的是,标准 Python 缺乏对这些功能的支持,这使得这些操作变得更加困难。一种可能性是使用 Celery,这样您就可以将任务分配给多台计算机和多个核心处理。 - shaunc有什么区别?几乎所有方面都不同!
关于支持,你依赖于谷歌提供的单一编译器。如果Go倒闭或商业化了怎么办?
使用Cython,如果Cython项目崩溃,您可以随时返回Python(或移植C代码)。
更新:我必须说我现在对Cython很不满意。 缺乏线程支持 是一个重大打击。Cython是线程安全的,但代价很大。全局解释器锁定在函数执行期间一直保持。因此禁用整个代码库的并发执行!
Cython的类C功能文档不完善,对新手来说很困惑。我承认。
Cython的目的是支持Sage数学软件;Go的目的是支持Google雄心勃勃的昂贵硬件计划。
总之,我不再喜欢这两种语言。又回到C++(再次)。我最喜欢的是Cython。
gc
和 gccgo
等编译器(还有其他的,但这两个最为常用)。Go 是完全开源的,有许多非 Google 贡献者;即使 Google 明天倒闭或放弃 Go,Go 仍将继续发展壮大。 - Dave C我尝试使用Go的主要原因是它被认为很容易将并发引入程序中。我认为这将成为“下一个大事”,因为处理器速度将会减缓,越来越多的多核心可用。如果您想利用多核处理器,您需要编写程序以便可以并发运行。
我之前看过Erlang,但尽管习惯于Prolog,我仍然觉得它有点奇怪;它与'C'或Pascal家族的“普通”编程语言非常不同。但是,一旦掌握了它,它的并发特性就很容易使用。我只需花费很少的精力就能编写一个并行解析器,它不使用堆栈,而是每次出现多个选项时生成一个新的“线程/进程”。
到目前为止,尽管存在一些轻微的不一致性,Go看起来还不错。而且它也很快,这是一个优点。
所以,除非Cython也可以轻松实现并发,否则我会选择Go...