6

今天我的一个好朋友问我最新的 Go 语言和Cython之间的主要区别是什么,Cython是 Python 的一组 C 扩展。我对 Python 知之甚少,谁能告诉我为什么 Go 比 Cython 更好/更差?

4

6 回答 6

9

Cython 并不是传统意义上的真正语言。它是一个用于构建 Python 扩展的预处理器,它采用类似 Python 的语法(实际上它们力求完全兼容 Python)并生成 C 代码(使用 Python C API)。这样做他们能够包含一些特殊情况的优化,但真正的好处是当您将 Cython 特定的静态类型信息添加到 C 代码中时,绕过这些操作的 Python 运行时并导致高速运行。

Go 是一种编译型编程语言。在 Go 中可以做的第一件事是生成一个不包含 Python 运行时的可执行文件/启动 Python 解释器——这在 Cython 中是不可能的。(在技术上可能并非不可能 - 但如果您不使用 Python,那么使用 Cython 确实没有意义)。由于 Cython 仅生成 C,因此您在评论中的大多数问题并不真正适用 - 您可以使用任何 C 调试器(尽管这是 Python 扩展的事实使事情变得更加复杂)。

于 2009-11-17T13:55:04.330 回答
5

gevent 是一个以 Cython 为核心的并发库。它似乎相当快: http: //nichol.as/asynchronous-servers-in-python

于 2010-09-23T14:27:18.423 回答
4

差异?几乎所有东西!

  • 并发和通道。
  • 接口。
  • 静态类型检查。
  • ...
于 2009-11-16T18:57:22.330 回答
2

支持呢。您依赖于 Google 提供的单一编译器。如果 Go 折叠或商业化怎么办?

使用 Cython,如果 Cython 项目折叠,您总是可以回到 Python(或移植 C 代码)。

更新:我必须说我现在对 Cython 很不高兴。 缺乏线程支持是一个重大打击。Cython 是线程安全的,但代价高昂。全局解释器锁在函数执行的整个过程中都被持有。从而禁用整个代码库的并发执行!

Cython 的 C 类功能文档很少,新手会感到困惑。我承认。

Cython 的目的是支持 Sage 数学软件;Go 的目的是支持谷歌雄心勃勃的尖端昂贵硬件计划。

简而言之,我不再喜欢这两种语言中的任何一种。回到 C++(再次)。我最喜欢的是Cython

于 2010-12-14T09:43:06.450 回答
1

GO 引入了 goroutine 和通道。查看语言常见问题

于 2009-11-16T17:15:24.143 回答
1

我尝试 Go 的主要原因是在程序中引入并发性的假设很容易。我认为这将是“下一件大事”,因为处理器速度将会下降,并且越来越多的内核可用。如果您想使用多核处理器,您需要编写程序以便它可以同时运行。

我之前看过 Erlang,但尽管习惯了 Prolog,但我还是觉得它有点奇怪;它与您的“普通”编程语言(C 或 Pascal 家族的)如此不同。但是一旦你掌握了它的窍门,它的并发特性就很容易使用。只需很少的努力,我就能够编写一个并行解析器,它不使用堆栈,但每次有多个选项时都会产生一个新的“线程/进程”。

到目前为止,go 看起来还不错,尽管有一些细微的不一致。而且它也很快,这是一个奖励。

因此,除非 Cython 也使并发变得容易,否则我宁愿去......

于 2009-11-17T10:50:17.713 回答