👑 Nim

Компилируемый язык с Python-подобным синтаксисом: типы, циклы, процедуры, макросы.

Шпаргалки · Программирование · #nim #systems

IDE и запуск

VS Code + расширение Nim, IntelliJ. nim c -r app.nim, nimble init, nimble install pkg, nimble test. Компилируется в C / C++ / JS.

Типы данных

let n: int = 1          # let неизменяемо, var изменяемо, const на этапе компиляции
var s = "a"; var f = 1.5; var b = true; var c = 'c'
var arr: array[3, int] = [1, 2, 3]
var sq: seq[int] = @[1, 2, 3]       # динамический массив
var t = (1, "a"); var tbl = {"a": 1}.toTable
type User = object
  id: int
  name: string
type Color = enum red, green, blue

Операторы

+ - * /, div, mod, == !=, and or not, & (склейка), $ (в строку), in, .. / ..<, shl shr.

Циклы

for i in 0 ..< 3: echo i
for i, x in sq: echo i, x
while cond: discard

Процедуры

proc add(a, b: int): int = a + b
func pure(x: int): int = x * x        # без побочных эффектов
let r = sq.mapIt(it * 2)              # sequtils

Встроенные

echo, len, add, contains, parseInt, strutils.split, sequtils.filter, algorithm.sort, os.fileExists.

Асинхронность

import asyncdispatch
proc work(): Future[int] {.async.} =
  await sleepAsync(100); return 1
echo waitFor work()

Коллекции

seq, array, Table, HashSet, CountTable, Deque (std/tables, std/sets, std/deques).

Библиотеки по задачам

Jester, Prologue (веб), Karax (UI на JS), nimpy (мост с Python), unittest (тесты), cligen (CLI).