除了 Go、Rust、Nim,還有哪些新編程語言更靠譜?
(補充:
有人說過,編程有兩個層次,知道怎麼用 (語法和一些函數),知道自己真正在做什麼(演算法和數據結構,內存管理),Go 語言簡單應該是「知道怎麼用」,比如說,有些語言把集合連續保存在內存里,獲取它的長度很簡單,很快,但要修改當中的元素,就必須拷貝整個集合,就慢了,然後有些結構,獲取它的長度是一種線性,需要遍歷它才能獲取長度。但現在也沒搞明白,數組和map在內存中是怎麼個邏輯。但在實踐中,如果在循環里操作 slice ,可能會要比單純的數組慢,有人說可能導致間接定址,但暫時找不到資料,也沒有太多時間去研究。正因為如此,反反覆復驗證數據,除了容易遺忘外,也擔心 len() 一個很大的 [] byte 會不會性能懲罰。只是作為一個普通使用者說說感受。就像用戶體驗,沒有批判任何語言的意思,能開發一門語言都是高手中的高手。再者,網站伺服器,稍微大一點,就很難說用一種語言能搞定,再者只要 「知道怎麼用」 其實什麼語言都不是太難,大不了是多查查開發文檔。同時也因為工作需要接觸了很多種語言。只是想聽聽其他同行有什麼意見。或許能有新發現。)除了Go,Rust,Nim , 大家覺得還有哪些新語言更靠譜?用 Go 語言做了一個網站,資料庫用的封裝的谷歌的 leveldb,自己又封裝了一個c語言執行的正則表達式,加速了路由的解析,運行了幾個月,除了對Json 的處理過於繁瑣不太滿意,Go語言確實效率奇高,經過幾次整合和設計後,整個伺服器的代碼加起來也不超過2000行。但是感覺還是有些瑕疵,比如說,繁複的錯誤處理,雖然有幾種方法可以緩減,但實際上只是把麻煩變了一個樣。再者,有時候錯誤就應該和其他值統一,不應該檢查一遍前面的邏輯是否存在錯誤,又要去檢查它的另一個返回值是不是空值。比如說讀取資料庫,讀取操作沒任何錯誤,但查找的結果就是個空值。當然可以原地解決掉可能的錯誤,就返回一個值。但這會擾亂同類型問題集中解決的原則。會加重維護的難度。不像c#,不需要這麼啰嗦,把關鍵的地方扔到一個try catch 就能抽象的解決一大塊,只需要考慮出現問題後的應付方案,因為有些錯誤的出現幾率幾乎沒有,一旦這種錯誤出現很可能是因為硬體故障,那不應該是開發者應該處處擔心,處處檢查的問題。當然 recover 加panic 好像就是try catch 的翻版。但不是每一個錯誤都會 panic, 都會觸發 recover 。 還有就是,如果對一個值(其實它是個nil值),進行類型申明,會拋出一個panic, 所以處理Json 數據的時候,不然就一個一個的檢查,不然來個 recover, 但有時候還是想它拋掉這個缺失繼續跑,recover就變得有點複雜了。還有就是 Go語言,看似簡單,沒有良好的編程習慣,很可能在同一個包里,做同樣的事情,或者一不小心,就把別的文件里定義的變數給重寫了。再來說說 Rust ,node.js 的 包管理器,最大的毛病是同一個模塊,可能重複出現在各個子模塊的依賴項里,讓整個項目的依賴項,變成一個包括n個文件,臃腫不堪的文件夾。Rust 的cargo 如果嘗試載入本地模塊的話也有同樣的問題。而且遠遠沒有npm 那麼功能強大,依託github 的亞馬遜伺服器,讓中國用戶用它導入包時,很鬱悶。再者是Rust 的語法有太多小hack,比如說,數值允許下劃線來提高閱讀性。一個塊里最後一個表達式不帶分號怎麼樣?帶了又怎麼樣,連聲明一個常量也有 const,static的區別,然後字元串又是個特例。加上眼花繚亂的數值類型的簽名,二進位,八進位,前綴,後綴搞在一堆。還有一堆讓人十分鬱悶的開啟關閉編譯器的各種特性的屬性,數組切片,擁有者,借入借出,宏……總覺得c ++也不過如此。這麼多東西搞在一起。又沒有強大的開發工具,還要時時刻刻考慮堆棧等內存問題,然後還要思考整個設計方式,絕對是精力旺盛,喜歡拚命折騰的人的最愛。因為你需要巨大的投入來處理各種鬱悶,產能卻雞肋的問題。還有就是Nim, 靜態語言,有可以完全關閉的垃圾回收,把代碼編譯成c代碼,性能當然也不會差。它的語法很像Python,幾個從業很久的c++高手都說,這門語言讓他們眼鏡一亮,但因為開發文檔和社區太那個了。無論多麼簡單的語言,背後其實都是需要很大投入的一種文化和一種思維邏輯。暫時還沒有深入接觸。 用過c#,受不了它散散步,也要開著微軟1號線的龐大。用過PHP ,框架和版本一更新,潘多拉盒子打開了,又得無數次拜訪谷歌,用過Python 受不了那種嚴格的縮進,和對中文編碼的不友善。用過JAVA,虛擬機太吃內存,而且類庫太龐大又不像c#有那麼牛逼的開發文檔。而且,就算你不願意麵向對象,各種庫也逼迫你定義各種介面,虛擬類,和尾大不掉的泛型。而Node.js ,如果真的做伺服器,還寧可用PHP。大家指教指教,有什麼更好更適合的語言?
http://kotlinlang.org/,Web及Android開發。
Vala or Genie?
F* 和 idris
Elixir,這貨是下一個 Ruby 沒跑了。
首先語法友好,把 Erlang 那堆鬼畫符改成了類似 Ruby 的形式,之前寫過 Ruby 的話應該很快就能上手。其實照著 Ruby 的路子設計語法就基本不會有什麼大問題了,還有一些小語法糖,比如管道操作符,讓函數式語言也可以告別疊在一起的六個圓括弧,再也不用擔心編輯器的顏色不夠用了。
其次是天然支持高並發,玩過 Erlang 的同學肯定都知道這玩意寫起來有多爽,隨意飛進程不用特別擔心開銷,一個四核伺服器 handle 兩百萬個鏈接再也不是夢。此外還有函數式語言的一些特性比如 pattern matching 之類的,大家也都懂。再看看 Ruby 到現在還是有 GIL 的,據說要去掉,不過不知道具體什麼時候。
Golang 的 goroutine 沒怎麼用過,不過作為一種系統編程語言,受眾還是小的,拿來寫一些 infra 應該沒問題,和 Scala 搶搶市場,拿來寫 web framework 就算了吧。
現在 Ruby 的強項應該就是豐富的庫了吧,很多功能直接 Rails 插件就搞定了,自己都不需要寫什麼代碼。不過這種東西就看社區活躍度了,Elixir 的作者是原來 Rails 的 core team 成員,在社區的號召力也不錯,時間會給答案。
忘了之前在哪看到的一句話:The most efficient way to build high performance rails application is to rewrite it in Elixir.
最後附上一篇有點早的對比 Rails 和 Phoenix 的文章,當時 Phoenix 版本號還是 0.3,已經 10x faster than Rails 了。
其實還是要怪 Clojure 社區完美繼承了 Lisp 社區的尿性,一百個人有五百個 framework,這能在麻瓜世界裡流行就怪了。不然的話,利用早幾年的先發優勢,估計也就沒 Elixir 什麼事了。所以說沒爹的語言就只能靠社區團結了。。就說兩個最近一直在用的。
1.Scala
大量用於高並發環境,我們公司的spark和map reduce的程序大多數都是用scala寫的。比同樣功能的java要少寫至少一半。又因為都在jvm上跑,所有java的lib都可通用。2.Clojure
繼承了Lisp詭異的語法順序。開始寫的時候很不習慣,感覺自己每天都不在說人話。但是用久了就對這種自上而下封裝嚴密的範式產生了興趣。對開拓編程思路幫助極大。kotlin,號稱是Scala的挑戰者和「安卓世界裡的Swift」,基於JVM,Jetbrain公司負責開發的一門編程語言。還有前兩天發布的perl6。
這麼多受不了,只能等垠語言了。
沒有人提Perl6么……
我覺得 Perl 6 不是那麼醜陋。Feature comparison of Perl 6 compilers 這些是 Perl 6的特性。Just for Fun!官方網站:perl6.org
Perl 6 Documentation
Perl 6 Design Documents
modules.perl6.org
pl6anet
examples.perl6.org
Perl 6 Features
Perl 6 測試套件
Perl 6 IRC
博客
Perl6 - Reddit
Perl 6 Tablet
Rosetta
mfollett
perlgeek
Perl 6 advent calendars
Perl6Maven
Strangely Consistent
Death by Perl6
jnthn
中文
sunnavy
songzan
扶凱
[Perl 6 小站](http://ohmycloud.github.io)
swift
最後還是python, c++11,java 8,es 6好
向你推薦Fantom語言:Home - Fantom能同時運行在JVM、.NET和JavaScript瀏覽器上。語法上也堪稱完美。
elixir我看就很不錯
F#是首選。
入門可以看 Home | F# for fun and profit還有 F# Software FoundationSuave.IOWebSharperYoutube 上有許多視頻(需要翻牆)可以自學。書籍推薦: Expert F# 4.0 / Beginning F# 4.0果斷Julia,基本是Python的語法C的速度而且無縫兼容這兩個語言
看了樓主的描述,感覺樓主對每種lang都學了皮毛,沒有深刻理解。
建議樓主挑一個用的次數最多的,深入研究下,掌握一個正確姿勢,以及這麼用的深層次道理。很多問題你感到困惑是沒有了解到深層次的道理。比如你描述的golang的panic和recover。
然後看幾個這個語言具有代表性的項目,應該會學到一些新的使用姿勢。然後慢慢提升。記住一點,如果你不是專門研究pl的,請不要有語言見解之爭,每種語言都能寫出好項目。Crystal,Ruby語法的編譯型語言。
Common Lisp 歷久彌新你值得擁有
只說你提到的go解析json。
有兩個方案。
1.可以用go-simple-json,臟活累活噁心的活全做了。2.可以直接unmarshal到struct。我推薦如此。GitHub - ChimeraCoder/gojson: Automatically generate golang struct definitions from example JSON至於這個吐槽的很多地方,看上去只是寫法和習慣問題,而不是語言問題。支持scala和go
推薦閱讀:
※作為程序員的你是在什麼時候「突然開竅」的?
※為什麼C++語法這麼複雜?
※程序員都是怎麼記代碼和編程語言的?
※樹莓派為什麼採用python語言為主要開發語言?
※Rust 火了會怎樣?