他们说,这门编程语言不输 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

这门语言很有意思,但更有趣的还有待你自己去发掘。(转自CSDN)

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

作者:Steve Kellock

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181106B0PBU700?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券