What is Nim?

Nim是一种设计为有效率的,强表达力的,优雅的通用编程语言。这3个目标当然是很难同时实现的,所以Nim设计者给了它们每个不同的优先级。效率是最重要的,优雅是最不重要的。

Nim从2005年开始发展。在2008年发布Nim源代码和开始公开发展Nim之前,2005-2008这3年里Andreas Rumpf自己开发Nim。在Nim项目获得支持和来自开源社区的很多贡献之前,并没有用很长时间。现在,Nim的发展依然由Andreas Rumpf主导,和全世界很多志愿者在Github上通过pull requests贡献源代码。


Footnote 1 Current open Nim pull requests, https://github.com/nim-lang/Nim/pulls


TIP(标签) Contributing to Nim
The Nim compiler, standard library and related tools are all open source. The project is available on Github, and everyone is encouraged to contribute.

Use cases for Nim

从发展之初,Nim被设计成为一个通用的程序设计语言。因此,它设计为有广泛的特征使它可以用于任何软件项目。这个设计使它成为写各种各样应用领域的软件一个很好的选择,从web应用程序到内核。

Nim的确支持几乎任何应用领域。但是这不意味着对于任何东西它都是正确的选择。Nim的某些方面使它相比其他编程语言更适合某些类别的应用。这也不意味着有些应用不能使用Nim编写,它仅意味着Nim可能不支持很适合写这类应用的代码风格。

一个细节是Nim怎样编译你的应用程序使其成为特别适合于系统编程的语言。你将发现Nim编译器首先将Nim源代码编译成c代码。C是一个相当老却很好支持系统编程的语言;出于这个原因,Nim允许更直接,更容易的访问机器的物理硬件。因此,Nim非常适合编写编写操作系统,编译器,设备驱动程序,嵌入式系统软件,等等。尽管Nim仍然是一个新的编程语言,但这已经有很多该项目的例子。例如,一个非常简单的称作NimKernel的操作系统,可以在这里的Github中得到:https://github.com/dom96/nimkernel

NOTE How does Nim compile source code. The full details of Nim’s unusual compilation model and it’s benefits are described in a later section title How does it work? .

使用Nim写应用非常的快。Nim作为一个整体价值效率最大,提供了使代码优化更容易的特点。这与Nim的软实时垃圾收集协同工作。这允许你指定回收内存花费的时间。这对于游戏开发很重要,在游戏开发中,如果占用太多的时间收集内存,一个普通的垃圾收集器可能减慢屏幕上的帧的渲染速度。它在一个需要在一个非常严格时间帧中运行的实时系统也很有用。

Nim也很多好的支持执行输入/输出操作的应用,如,在一个网络中读取文件或者发送数据。例如,可以很容易的使用一些web框架如Jester写Web应用。2 Nim的脚本语法与强大的异步输入/输出支持使快速开发引用变得容易。


Footnote 2 https://github.com/dom96/jester(https://github.com/dom96/jester)


Nim特别适合写命令行应用,因为它不要求任何运行时依赖(不像Java使用JVM,Python使用Python解释器)。应用程序可以很容易编译成独立的,没有任何依赖的,并且分布在多台机器上,没有任何问题。使用Nim写的这样的一个应用的例子是Nimble;它是一个Nim的包管理器,并且允许用户安装包含Nim库和应用的包。

这些只是一些Nim可用于的用例的例子。这样的当然还有更多。Nim仍然在发展中,并且还没有达到一个稳定的版本。因为Nim的一些功能可能尚未完成。这可能使Nim不适用于某些应用。例如,Nim包含JavaScript后台,允许你使用Nim为你的web页面写JavaScript应用。这个后台工作,但还不支持所有的JavaScript功能,需要编写好的客户端web应用程序。这将随着时间推移提高。

现在你对Nim是什么了解一些,它的历史以及它适合的一些应用。在下一个子部分将谈谈Nim的一些特点,以及讨论一下Nim是怎样工作的。