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

程序員,這門編程語言不輸 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

譯者:彎月,責編:郭芮


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

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


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

你有程序員朋友嗎?告訴他,100 萬等他來拿
滴滴順風車女乘客遇害;華為法律應對澳 5G 禁令;蘋果研發新背板技術

TAG:CSDN |