nimlang编程语言简介

1,820 阅读2分钟

高效、凝练、优雅

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

中文网站近期发布, 学习访问 Nim中文社区