高效、优雅、富有表现力

Nim 是一种静态类型的、编译型、系统编程语言。
它结合了其他成熟语言的成功概念。
(如 Python、Ada 和 Modula)

效率

  • Nim 生成原生且无依赖的可执行文件,不依赖于虚拟机,
    所以它们小巧,便于分发。
  • Nim 编译器和生成的可执行文件,对目前的任何主流平台都提供了支持,
    包括 Windows、Linux、BSD 和 macOS。
  • 支持实时系统的快速延迟引用计数内存管理。
  • 零开销迭代器和用户自定义方法的编译期求值等现代概念,
    结合优先使用分配在栈上的值类型数据,生成高性能代码。
  • 支持各种后端:可以被编译为 C、C++ 或 JavaScript, 所以 Nim 可以满足所有前后端的需求。

表现力

  • Nim 实现了自举:编译器和标准库都是用 Nim 本身来实现的。
  • Nim 拥有强大的宏系统,允许直接操纵 AST,提供无限的可能性。

优雅

  • 不能用宏去改变 Nim 的语法,因为并没有这个必要
    —— Nim 语法本身已经足够灵活。
  • 具有局部类型推断、元组、泛型和sum类型的现代类型系统。
  • 语句按缩进分组,也可以跨行。
import strformat

type
  Person = object
    name: string
    age: Natural # 确保年龄是正确的

let people = [
  Person(name: "John", age: 45),
  Person(name: "Kate", age: 30)
]

for person in people:
  # 类型安全的字符串插值,
  # 会在编译时检查。
  echo(fmt"{person.name} is {person.age} years old")
        
# 得益于 Nim 的“iterator”和“yield”结构,
# 迭代器和常规方法一样容易编写。
# 它们会被编译为内联循环。
iterator oddElements[Idx, T](a: array[Idx, T]): T =
  var i = 1
  while i < a.len:
    yield a[i]
    i += 2

for x in oddElements([10, 20, 30, 40, 50, 60]):
  echo x
        
# 使用 Nim 的宏系统
# 将密集的以数据为中心的x86指令描述
# 转换为汇编程序和JIT所使用的查找表。
import macros, strutils

macro toLookupTable(data: static[string]): untyped =
  result = newTree(nnkBracket)
  for w in data.split(';'):
    result.add newLit(w)

const
  data = "mov;btc;cli;xor"
  opcodes = toLookupTable(data)

for o in opcodes:
  echo o
        

最新文章

V1.0.6 发布!

Nim 团队很高兴为大家带来 1.0.6 版本发布的消息!这是我们在 Nim 1.0.0 之后带来的第三个补丁。

2019 Nim 中文社区问卷调研

我们骄傲地宣布: 2019Nim中文社区问卷 启动! 无论你当前正在使用 Nim ,还是之前用过 Nim ,或者从未使用过 Nim ; 我们都想要听听你的观点。

特色项目

Karax

SPA框架

Karax 是一个使用 Nim 开发单页应用的框架。 利用 Nim 的宏系统生成一个框架,允许开发无样板的应用程序。

Nimbus

以太坊客户端

Nimbus 旨在成为以太坊2.0区块链的分片客户端。 以太坊可能会构建在嵌入式系统中, 而 Nimbus 的设计使它将能够在物联网和个人移动设备上也有良好的表现。

从今天开始学习 Nim 吧

构建命令行应用程序、游戏、Web 服务器、内核以及其他所有内容。 Nim 不仅学习门槛不高,还能为你提供许多主流编程语言所不具备的强大功能。

Nim in Action

第一本 Nim 图书,《Nim in Action》, 现已提供电子书或纸质书购买。 学习 Nim 的语法和高级功能(包括宏)等基础知识, 并通过多个应用程序开发示例获得该语言的实践经验。

  • 讲解基础知识,包括 Nim 的语法。
  • 说明如何使用 Nimble 包管理器。
  • 包括如何开发各种应用程序的分步说明和解释,涵盖了聊天程序,Twitter克隆等。

支持 Nim

加入支持 Nim 的100多家公司和个人

Nim 项目由一群分布在全球的志愿者开发。 我们欢迎捐款,这使我们能够花更多的时间工作在 Nim 上。

顶级赞助商

查看更多

社区

在寻找 Nim 在GitHub上的存储库吗?

Nim 编译器和工具全部由 Nim 编写,并遵从MIT开源许可, 烦请务必对存储库点个 WATCH 以便及时获取 Nim 开发的最新进展,或者点个 Star 来给它提升一些关注。