Crystal 語言是否值得看好?

時間 2021-05-12 00:44:58

1樓:Shulamith

先講結論,沒有特別大缺點的現代(搬磚)語言,你可以把它當成有靜態型別的ruby,或者有范型和異常(和不是專門為谷歌設計的依賴管理)的go

優點/做對的地方:

編譯成單獨的binary.編譯器能自舉

後端使用LLVM(而不像上一代那樣先編譯到c)

非同步使用協程+channel,寫起來爽效率又高

有gc預設不可空,非常現代(((

所有語句都是表示式

語法基本來自ruby,寫起來非常快樂(所以有ruby很多很爽的特性,比如說method_missing和forward, 還有module),還有從ruby繼承來的超好用的標準庫

巨集很好玩,儘管很多寫法是通過編譯器提供特殊方法來搞的

C binding 寫起來很方便

雖然小但是非常友善的社群

奇怪的地方:

范型用圓括號

引數型別和引數之間的冒號強制要加空格

空陣列和空雜湊初始化時要通過特殊語法指定型別

global type inference過於靈活,有時會帶來麻煩

名字決定可見性和可變性,不過這也是為了相容ruby

尚待改進的地方

多執行緒和windows

遇到複雜的型別推導就高速仆街

編譯器還有很多問題,比如現在還沒有增量編譯,這也導致了周邊工具基本上等於殘廢.相關的LSP進度也很慢.此外還有一系列巨集相關的問題

根本性的錯誤: 沒有

最大的問題則是開發團隊是乙個南美的小外包公司, 否則可能還可以趁著前幾年ruby最後一口氣來變得流行,然而這一切都沒有發生...這也就導致了這個語言的各種開發進度都非常緩慢,比如經常不能支援最新版本的LLVM, XML和其他標記語言的parse支援還很簡單,ORM還非常原始等等...

2樓:王雷

Ruby、Elixir開發者,使用Golang寫過一些簡單的程式。

先說觀點:十分看好!

Crystal的標語是Fast as C, Slick as Ruby, 翻譯過來大概的意思是「C一樣快,Ruby般絲滑」(寫過Ruby的朋友都會理解這種絲滑吧)。

Ruby: 寫過Ruby的人都會喜歡Ruby的語法,非常的靈活、有趣。寫Ruby的朋友大多都會用到Ruby on Rails框架,Rails約定大於配置的理念對於開發人員非常友好,使開發人員能非常快速的開發乙個web應用。

缺點是隨著使用者和請求的增長,效能問題暴露的比較嚴重,這也是Twitter當時放棄Ruby轉向Scala的主要原因吧。

Elixir:基於Erlang的函式式程式語言,語法和Ruby很像,併發效能優秀,Pheonix框架和Rails也很像(Elixir語言作者本身也是Rails框架核心開發者之一)。這些原因也是當時選用Elixir的主要原因。

但是使用過程中還是發現一些不爽的地方:語言可以理解為是在erlang上封裝了一層語法糖,底層的一些東西還是erlang的,比如時間型別,其次函式式語言風格對於很多開發者來說也需要一些時間適應,Elixir的圈子比較小眾,所以輪子相對較少,視訊記憶體的輪子bug也相對較多一些。

Golang: 接近C/C++的效能,沒有執行時依賴,類C的語法吸引了很多開發者的注意,在雲計算和區塊鏈時代到處都是Go的身影,例如k8s/docker/coreos/ethereum等。語法相對簡單,關鍵字很少,但是有的開發者還抱怨一些問題,比如「語法無趣」,「沒有泛型」等。

個人目前來說非常喜歡Go。

Crystal: 再來說說Crystal,目前來看比Elixir更像Ruby,比Go更接近C的效能!對於Ruby和Python開發者來說Crystal上手會比較容易。

如果對這幾種語言排個序話,我認為大概是這樣:

按效能:

C > Crystal > Go > Elixir > Ruby

按有趣:

Ruby == Crystal > Elixir > Go == C

語言無好壞,以上僅為個人觀點。

3樓:cholerae

不看好。

大概看了一下,這語言最大的亮點就是跟 ruby 語法基本相容,別的實在是沒什麼特色,那就意味著這語言的潛在使用者群就是 ruby 程式設計師,可是 ruby 程式設計師本身就不多……

-------分割線

最近遇到了一些問題,想找乙個更優雅的能取代 Go 的語言,就仔細看了一下 Crystal,說實話很失望。Crystal 的語法優雅不提,它的 fiber (從 Go 學來的)實現非常原始,就是乙個 libevent 然後把阻塞的 fiber 掛上去。目前既沒有多程序/多執行緒支援(像 Go 那種把 goroutine 分發到多執行緒上跑),也完全沒搶占的功能。

更要命的是開發組對此似乎不怎麼上心,相關 issue 都兩年多了也沒什麼進展。任重而道遠啊。

-------分割線

今天又撞上了乙個 crystal 執行時的 bug,select 帶緩衝的 channal 會導致 sigfault,這種基本的操作竟然還會有 bug,還是散了吧。。。

4樓:

已入坑...

(個人感覺)用起來比golang流暢. 語法也更加自然. 庫太少, 很多東西很難實現, 以後我的坑要用golang和crystal挖, crystal能做的用crystal, 不行就用golang, 畢竟庫多.

5樓:

目前來看,就是乙個基於 llvm 的靜態版 cruby 。但語言目標如果只是語法層面去模仿ruby也就只能吸引一部分ruby程式設計師,喜歡ruby語法的也有 groovy 和 elixir 這兩個選擇, 而且新的靜態語言的市場早被 go, rust, swift 占領了,想要像 ruby 那樣靠 rails 殺出重圍很難。

閃婚,你們是否看好?

那片落葉 閃婚是現代社會的一種產物,作為閃婚的當事人會有各種各樣的理由,選擇閃婚,因為現代的婚姻越來越沒有安全感,人們越來越不相信愛情,對於婚姻也大都採取了速戰速決的戰術,用自已一輩子的幸福做籌碼,這太不值得了,社會能容納閃婚,但閃婚帶來的後果大部分都是以離婚告終,我們應相信真正的愛情和婚姻不要用自...

不被父母看好的愛情,是否繼續堅持?

夏七七 父母的擔憂只有乙個,怕自己孩子過的不幸福,受到欺負,而且不能即使站出來替你撐腰。如果自己有能力幸福,可以獨自面對他的家族,可放心去嫁。如果不能請坐下來聽父母講完。愛情不是貫穿婚姻的那個線,責任義務才是。 已登出 所以不是經濟前途事業之類的問題,主要矛盾在於養老陪伴與地理位置。1.先講家長的原...

c語言和python語言哪個更值得學

回寡婦村的誘惑 hhhh你學學就知道了,光看我們說其實意義不太大,親自上手 include int main def greet print 自己花個一兩星期都學學,就知道哪個適合你了 葦琪愛千尋 如果只是想簡單的學習點程式設計,編寫一些小軟體提高自己的工作效率,建議Python,如果想深入學習程式...