今天我的一个好朋友问我最新的Go语言和Cython之间的主要区别是什么,它是Python的一组C语言扩展。我对Python没有太多的知识,谁能告诉我为什么Go比Cython好?Go和Cython之间的差异
回答
用Cython是不是真正传统意义上的语言。它是一个构建Python扩展的预处理器,它采用类似Python的语法(实际上它们力求完全兼容Python)并生成C代码(使用Python C API)。这样做,他们可以包括一些特殊情况优化,但是当您添加并入C代码中的Cython特定静态类型信息时,会带来真正的好处,绕过这些操作的Python运行时间并导致高速加速。
Go是一种编译的编程语言。在Go中可以做的第一件事就是生成一个不包含Python运行时的可执行文件/启动一个Python解释器 - 这在Cython中是不可能的。 (在技术上可能不是不可能 - 但如果你不使用Python,那么使用Cython确实没有意义)。由于Cython只生成C,所以在注释中大部分问题并不适用 - 您可以使用任何C调试器(尽管这是Python扩展的事实使事情变得更加复杂)。
关于Cython:我不同意。你需要保持你在C中工作的思想,而不是Python。编写存根加载器并不像Python是开源的那么困难。 – unixman83 2010-12-14 09:46:44
GO推出goroutines和渠道。见语言FAQ
差异?几乎所有的东西!
- 并发性和通道。
- 接口。
- 静态类型检测。
- ...
Ugh cython拥有所有这些加上2个相当成熟和强大的语言。 – 2011-09-19 07:21:36
我上次检查时,Cython不支持线程。用于*易于使用的* 1 * – unixman83 2011-09-20 15:16:12
我对试图出去,主要原因是应该轻松引入到并发程序。我认为这将是'下一件大事',因为处理器速度将会缩短,并且越来越多的核心可用。如果你想使用多核处理器,你需要编写你的程序,以便它可以同时运行。
我早些时候看过Erlang,但尽管习惯了Prolog,我仍然觉得它有点奇怪;它与你的'平均'编程语言(C或Pascal系列)是完全不同的。但是一旦你掌握了它的并发特性,就很容易使用。只需很少的努力,我就可以编写并行解析器,它不使用堆栈,但每次有多个选项时都会生成一个新的“线程/进程”。
尽管存在一些轻微的不一致,但到目前为止看起来还是挺好的。它也很快,这是一个奖金。
所以,除非用Cython也使得并发容易,我会倾向于去...
gevent是一个以Cython为核心的并发库。这似乎是相当快:http://nichol.as/asynchronous-servers-in-python
支持。您依赖于Google提供的单个编译器。如果去折叠或去商业怎么办?
使用Cython,如果Cython项目折叠,您可以随时回到Python(或移植C代码)。
更新:我必须说我现在对Cython感到不满。缺少线程支持是一个重大打击。 Cython是线程安全的,但成本很高。全局解释器锁是一个函数执行的全部时间。从而禁用整个代码库的并发执行!
Cython的类C功能很少记录在案,并且让新手感到困惑。我承认。
Cython的目的是支持Sage数学软件; Go的目标是支持Google雄心勃勃的高端昂贵硬件计划。
总之,我不再喜欢这些语言中的任何一种。回到C++(再次)。 我的最爱是Cython。
呃,C++。至少你的理由是对的。 – 2011-09-19 07:23:18
这是错误的。它不知道这是否在2010年是正确的,但你不必坚持下去。使用nogil syntex可以在任何时候释放gil,而无需进行python调用。 – Matt 2013-11-18 05:04:19
“Google提供的单个编译器”在这两方面都是错误的。有'gc',并有['gccgo'](https://golang.org/doc/install/gccgo)(加上我认为更多,但是那些是大的)。 Go与许多非Google贡献者完全开放源代码;谷歌可能会放弃或放弃明天Go会没事的。 – 2015-03-27 19:57:12
- 1. Go Slice - [:n]和[n:]之间的差异
- 2. Go和C++中指针和引用之间的逻辑差异?
- 3. /和/ **之间的差异
- 4. PHP之间的差异()和[]
- 5. '//'和'///'之间的C++差异
- 6. VBA:&和+之间的差异
- 7. 之间的差异和::: ++
- 8. 运算符“==”和“=”之间的差异运算符“==”和“=”之间的差异“==”和“=”
- 9. PHP:差异之间 - >和::
- 10. Htaccess - 和*之间的差异:。*和。+
- 11. 总和和+之间的差异?
- 12. Url.Action和Html.RenderActionLink和Html.RenderAction之间的差异
- 13. Serilog:之间{..} {差异@ ..}
- 14. Elf32_Phdr的p_filesz和p_memsz之间的差异
- 15. vcruntime140d_app.dll和vcruntime140d.dll之间的差异
- 16. RestKit和AFIncrementalStore之间的差异
- 17. htop和golang之间的差异readmemstats
- 18. platformwebservices和ycommercewebservices之间的差异
- 19. spawn/1和spawn/3之间的差异
- 20. TTL和Keep alive之间的差异
- 21. strstream和stringstream之间的差异
- 22. JAVA和C#之间的LdapConnection差异
- 23. c#和java之间的差异写()
- 24. OpenShift和Kubernetes之间的差异
- 25. appengine_django BaseModel和db.Model之间的差异
- 26. Formsauthentication.SetAuthCookie和Session之间的差异用法
- 27. 有self.current_user和@current_user之间的差异?
- 28. cabal包之间的差异readPackageDescription和parsePackageDescription
- 29. SmsStatusCallback和StatusCallback之间的Twilio差异
- 30. ipython和python之间的输出差异
什么是您决定更好还是更坏的标准?这是两种完全不同的编程语言;有很多不同之处,所以这取决于你在找什么。 – 2009-11-16 17:21:35
实际上,我只想知道为什么有人应该使用Go来代替使用Cython,例如,可以在Go中完成哪些使用Cython无法轻松实现的功能?哪些语言有更好的性能?更安全?更好的用户友好性?更好的调试器?或者它与语法只有轻微的不同? – 2009-11-16 17:42:10
在Cython中缺乏任何合理的线程支持已经杀死了我对这种语言的热爱。 'cython nogil' – unixman83 2010-12-14 23:31:02