今天我的一個好朋友問我最新的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