爲什麼說Crystal是2018年最有前景的程式語言

為什麼說Crystal是2018年最有前景的編程語言

crystal-lang

無可挑剔:“飛快如C,靈巧似Ruby”

Crystal的主要的魅力在於打破了優雅易用的動態語言(像Ruby和Python)跟效率為先的底層系統語言C/C++ 它們之間界線。到目前為止你經常在開發中需要做出選擇:編寫難讀,難調試但是高效如C/C++的代碼 或者使用Ruby/Python編寫一個同樣功能的代碼,但是速度慢、耗內存。 換句話說你需要在性能和開發效率之間做選擇。由於在Ruby/Python中開發MVP比在C/C中容易得多,在過去的18年中,SaaS公司無論是大還是小,都傾向接受動態語言,並將額外的性能開銷作為不可避免的業務成本。然而使用Crystal,你可以完成所有你在Ruby/Python中所做的事情,但是擁有根本地C/C++二進制程序一樣的速度和系統開銷。

使用Crystal語言的11個理由

  1. 性能。Crystal是靜態編譯語言,基於LLVM框架。Crystal是 “沒有分號的速度”。
  2. 語法。像許多解釋型語言一樣,Crystal以一種可讀和美觀的方式儘量使你少寫代碼。Crystal有時被宣傳為類似於Rust,但更容易讀寫。
  3. Fibers。在C/C++世界中,你不能輕易得到的東西是Fibers。實現Fiber可以讓你繞過回調地獄(nodejs在沒有promise化時,node標準庫至今都沒有promise化),並使編寫遊戲/ UI循環、事件、異步和同步IO等變得更容易。
  4. 靜態類型。Crystal是一種靜態類型的語言,意味著每個變量都有一個或多個潛在類型,它們需要在編譯時計算出來。Ruby/Python是動態類型的,因此很難優化Ruby/Python代碼。通過執行靜態類型,Crystal排除了大量與類型相關的錯誤,為優化和靜態編譯鋪平了道路。更好的是,Crystal編譯器只需在語法不明確的情況下明確指定類型,通常不需要直接指定類型。
  5. 宏。在C/C++領域中,如果不使用非常陳舊的語法寫出一些令人困惑的宏,將很難用靜態的方式做一些事情。Crystal允許在編寫宏時,使用大量的語言,這樣你就可以在靜態編譯語言中做一些通常不可能發生的瘋狂的事情。
  6. 動態地定義方法*。有人害怕使用Crystal,因為它是一種編譯語言,他們不能動態地定義方法,但是宏讓你在編譯時做到這一點。
  7. NIL/NULL相關錯誤是不可能的。Crystal編譯器將NIL視為類型,並在與可能為零的對象交互之前強制執行顯式NIL檢查。
  8. shards。跟Ruby中的包管理系統和其他語言(例如node npm)的包一樣。它們非常易於安裝和維護,並可以通過靜態鏈接直接編譯到二進制可執行文件中。無論使用多少shards,你都會得到一個單獨可執行文件。
  9. 日趨流行。這意味著會有更多的shards包、更多新功能的實現 以及更快的bug修復時間。最近,Crystal在短短第六十個月內從Tiobe指數上升到了第三十二位。沒有其他現代編程語言在這麼短的時間內經歷瞭如此高的增長率。
  10. 跨平臺支持。目前Linux和OSX上已經支持,Windows還需要點時間。QT和LibUI都已經完成支持。
  11. Web框架。Amber,最流行的基於Crystal的Web框架,類似於Rails。比Rails快N個數量級。還有像Kemal等多個適合API開發的輕量級框架, “slick as Ruby, faster than golang”。

為什麼會是Crystal而不是其他語言?

沒有其他語言可以將所有這些放在一起(編譯時宏、靜態類型、C的速度、Ruby的語法、包管理系統、本地二進制編譯、Fiber和跨平臺支持)。在這方面,Crystal將會像Rust(它最近已經受到大量的關注)一樣值得關注,並且它是Crystal最接近的語言,它的作用是作為C++替代者。

最後,一些侷限性

  1. 在編寫本文時Crystal尚有的主要侷限性是:
  2. Windows支持尚未完成(但將很快支持 )
  3. 沒有並行性,除非您鏈接到並行的C代碼(併發性完全由Fiber模型支持)。所謂的GO風格並行性即將實現,並且已經在測試分支中工作。
  4. 因為還沒有發佈1.x版本,語言尚未穩定,偶爾會有一些小的變化。

Crystal是一個很有魔性的語言,在我們的項目中已經小規模的在使用。我們靜待它的1.x版本到來吧。


分享到:


相關文章: