程序員,這門編程語言不輸 C/C+!
2018 年,開發者們有很多優秀的編程語言可供選擇,光是主流語言就有十幾種。本文介紹一個小眾但十分強大的語言Nim。
以下為譯文:
2018年後半年,開發者們有很多種編程語言可供選擇。光是主流語言就有十幾種,它們都非常優秀。但如果再探索一番,就會發現另外一些語言,如Elm、Elixir、PureScript和Reason——之後你就會發現Nim。
有一次我在UI開發庫中看到介紹說,「我們支持Go、Rust、Nim等多種語言。」真酷……等等,Nim是啥?出於好奇,我嘗試了一下。
通過幾個一次性例子、舊項目重寫等嘗試,我認真探索了這個語言究竟能幹什麼。結果,五個月之後,這門語言仍然在吸引著我。
快速介紹Nim
我們來做個簡單的命令行應用,作為本文後面的討論對象。首先要安裝Nim(https://nim-lang.org/install.html)獲得工具鏈。接下來先mkdir fun,然後cd fun,再創建一個文本文件wave.nim。
內容如下:
創建另一個文件hello.com然後粘貼下面的代碼:
然後開始編譯!
在我的筆記本的Ubuntu上大約花了175ms。接下來運行:
這個二進位文件很快(2ms)、很小(107 kB),而且沒有依賴。
靈巧且強大的編譯器
我們給編譯器提供了入口點(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的。
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,也能夠使用相應語言生態系統中的工具了(如代碼覆蓋和調試器等)。
所以Nim是個不錯的膠水語言?
當然,這是Nim的強項之一。
它能使用imgui、SDL、Redis等庫,能使用靜態庫,也能鏈接OpenSSL等動態庫。它的語言特性能處理名字修飾、命名空間、鏈接等,甚至可以在Nim中以字元串的形式輸入C代碼,編譯器也可以正確處理。還有個工具c2nim幫你實現自動轉換,實現跨平台或跨語言!
最不可思議的是它還能編譯成JavaScript:
這樣就編譯成JavaScript了。
為什麼我沒聽說過Nim?
原因之一:
Rust:由Mozilla資助;
Swift:由蘋果資助;
Go:由Google資助;
TypeScript:由微軟資助;
Kotlin:由Jetbrains資助;
Nim:??
正確答案是,嗯,我也不知道。大公司和大型社區很有錢,雖然Nim沒有那麼大的資助,但也在受到越來越多的關注。我認為它的優秀之處在於,雖然是草根,但卻擁有不遜於主流語言的功能。
了解更多
下面是一大堆可以看看的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
譯者:彎月,責編:郭芮
※你有程序員朋友嗎?告訴他,100 萬等他來拿
※滴滴順風車女乘客遇害;華為法律應對澳 5G 禁令;蘋果研發新背板技術
TAG:CSDN |