當前位置:
首頁 > 知識 > 致程序員,這門編程語言不輸 C/C++!

致程序員,這門編程語言不輸 C/C++!

2018 年,開發者們有很多優秀的編程語言可供選擇,光是主流語言就有十幾種。本文介紹一個小眾但十分強大的語言Nim。

致程序員,這門編程語言不輸 C/C++!

打開今日頭條,查看更多精彩圖片

以下為譯文:

2018年後半年,開發者們有很多種編程語言可供選擇。光是主流語言就有十幾種,它們都非常優秀。但如果再探索一番,就會發現另外一些語言,如Elm、Elixir、PureScript和Reason——之後你就會發現Nim。

有一次我在UI開發庫中看到介紹說,「我們支持Go、Rust、Nim等多種語言。」真酷……等等,Nim是啥?出於好奇,我嘗試了一下。

通過幾個一次性例子、舊項目重寫等嘗試,我認真探索了這個語言究竟能幹什麼。結果,五個月之後,這門語言仍然在吸引著我。


1.快速介紹Nim

我們來做個簡單的命令行應用,作為本文後面的討論對象。首先要安裝Nim(https://nim-lang.org/install.html)獲得工具鏈。接下來先mkdir fun,然後cd fun,再創建一個文本文件wave.nim。

內容如下:

# this is wave.nim
const hand* = ""

創建另一個文件hello.com然後粘貼下面的代碼:

# this is hello.nim
import wave
echo "Hello World " & hand

然後開始編譯!

$ nim c hello.nim

在我的筆記本的Ubuntu上大約花了175ms。接下來運行:

$ ./hello
Hello World

這個二進位文件很快(2ms)、很小(107 kB),而且沒有依賴。

2.靈巧且強大的編譯器

我們給編譯器提供了入口點(hello.nim),它就自己通過源代碼找到了依賴(wave.nim)。如果同一個目錄下還有第三個文件,這個文件不會被包含進來,除非我們用import語句導入。

我們沒有寫main()函數,但也生成了可執行文件!

但Nim的強大不止於此。運行nim c --app:lib wave.nim可以生成動態鏈接庫,運行nim c --app:staticLib wave.nim還可以生成靜態庫。

Nim支持Windows、macOS和Linux,還支持一些其他平台,如樹莓派和任天堂Switch。設置好之後,交叉編譯也能做到,但與Go相比還差得多。說實話,目前我還沒見到在構建方面能超過Go的。


3.Nim可編譯成C、C++和Obj-C

Nim在可執行文件里塞了一堆函數和常量,包括文件輸入輸出、可配置的垃圾回收器,這些都帶來了額外開銷。

但這並不是老掉牙的垃圾回收器。其演算法有六種選擇,每次激活的時間預算也有供選擇。而且它並不像其他語言的垃圾回收器那樣「只要有需要」就運行,對於只用一次的腳本,你甚至可以關閉垃圾回收。

而且,我們編譯成了調試模式。調試模式包含強大的棧跟蹤和其他幫你調試的東西。試試用這個命令編譯:nim c -d:release hello.nim,尺寸變成89kB了。好點了吧?加上另一個編譯開關後還可以進一步用速度換尺寸。nim c -d:release --opt:size hello.nim,現在只有44kB了。是不是效果好多了?

但C編譯器更快!沒錯,因為Nim其實是編譯成C的!然後再用gcc或clang將C代碼編譯成二進位文件。還記得我們編譯時的命令是nim c hello.nim嗎?這裡的C代表的是編譯成C,而C是默認的後端語言。

此外,它還能編譯成C++和Obj-C,也能夠使用相應語言生態系統中的工具了(如代碼覆蓋和調試器等)。

4.所以Nim是個不錯的膠水語言?

當然,這是Nim的強項之一。

它能使用imgui、SDL、Redis等庫,能使用靜態庫,也能鏈接OpenSSL等動態庫。它的語言特性能處理名字修飾、命名空間、鏈接等,甚至可以在Nim中以字元串的形式輸入C代碼,編譯器也可以正確處理。還有個工具c2nim幫你實現自動轉換,實現跨平台或跨語言!

最不可思議的是它還能編譯成JavaScript:

$ nim js -d:release hello.nim
$ node nimcache/hello.js
Hello World

這樣就編譯成JavaScript了。


5.為什麼我沒聽說過Nim?

原因之一:

  • Rust:由Mozilla資助;
  • Swift:由蘋果資助;
  • Go:由Google資助;
  • TypeScript:由微軟資助;
  • Kotlin:由Jetbrains資助;
  • Nim:??

正確答案是,嗯,我也不知道。大公司和大型社區很有錢,雖然Nim沒有那麼大的資助,但也在受到越來越多的關注。我認為它的優秀之處在於,雖然是草根,但卻擁有不遜於主流語言的功能。


6.了解更多

下面是一大堆可以看看的URL,也可以自己去Google。

官方

  • 網站:項目入口
  • https://nim-lang.org/
  • 源代碼:GitHub項目地址
  • https://github.com/nim-lang/nim
  • nimble:Nim包管理器
  • https://github.com/nim-lang/nimble
  • choosenim:工具鏈安裝
  • https://github.com/dom96/choosenim

社區

  • 論壇:非同步的討論組
  • https://forum.nim-lang.org/
  • Twitter:Nim的Twitter賬號
  • https://twitter.com/nim_lang
  • Reddit:subreddit社區
  • https://www.reddit.com/r/nim/
  • IRC:irc.freenode.net上的#nim
  • https://irclogs.nim-lang.org/

學習

  • 文檔:一大波文檔和教程
  • https://nim-lang.org/documentation.html
  • Nim實戰:Manning Press出版的一本書
  • https://www.manning.com/books/nim-in-action
  • 介紹視頻:Dominik Picheta的介紹
  • https://www.youtube.com/watch?v=hzxr9_ZK9uY

發現

  • nimble directory:nimble的Web前端
  • https://nimble.directory/
  • Awesome Nim:精選項目
  • https://github.com/VPashkov/awesome-nim
  • Github項目:開源項目,按照最近更新時間排序
  • https://github.com/search?l=Nim&o=desc&q=nim&s=updated&type=Repositories

編輯器

  • Vim插件:使用Vim編寫Nim
  • https://github.com/zah/nim.vim
  • VS Code插件:Visual Studio Code插件
  • https://github.com/pragmagic/vscode-nim

寫一些應用

  • Jester:寫Web訪問
  • https://github.com/dom96/jester
  • Karax:寫單頁應用
  • https://github.com/pragmagic/karax
  • NiGui:寫GTK+ 3 / Win32桌面應用
  • https://github.com/trustable-code/NiGui
  • Winim,wNim:寫Windows應用
  • https://github.com/khchen/winim;https://github.com/khchen/winim
  • objc:寫macOS應用(開發中)
  • https://github.com/mjendrusch/objc
  • android:寫安卓應用
  • https://github.com/yglukhov/android
  • Arranmancer:寫深度學習應用
  • https://github.com/mratsim/Arraymancer
  • serial.nim:寫串口應用
  • https://github.com/euantorano/serial.nim
  • libusb:寫USB應用
  • https://github.com/nimious/libusb
  • Ethereum 2.0:寫以太坊……額……之類的(我只能猜到這裡了)
  • https://github.com/status-im/nimbus

這門語言很有意思,但更有趣的還有待你自己去發掘。


原文:https://totallywearingpants.com/posts/nim-underdog/

作者:Steve Kellock

譯者:彎月,責編:郭芮

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 CSDN 的精彩文章:

亞馬遜科學家將人工智慧助理日常化的夢想照進現實
世界首個 AI 公園誕生;馬化騰:養活 QQ 最痛苦|極客頭條

TAG:CSDN |