Π Π΅Π»ΠΈΠ· языка программирования Nim 1.6.0

ПослС Π³ΠΎΠ΄Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½ Ρ€Π΅Π»ΠΈΠ· языка систСмного программирования Nim 1.6, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΡΡ‚Π°Ρ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΈ создан с оглядкой Π½Π° Pascal, C++, Python ΠΈ Lisp. Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ Π½Π° языкС Nim компилируСтся Π² прСдставлСниС Π½Π° C, C++ ΠΈΠ»ΠΈ JavaScript. Π’ дальнСйшСм ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΉ C/C++ ΠΊΠΎΠ΄ компилируСтся Π² исполняСмый Ρ„Π°ΠΉΠ» ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ любого доступного компилятора (clang, gcc, icc, Visual C++), Ρ‡Ρ‚ΠΎ позволяСт Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π±Π»ΠΈΠ·ΠΊΠΎΠΉ ΠΊ Π‘ΠΈ, Ссли Π½Π΅ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ Π·Π°Ρ‚Ρ€Π°Ρ‚Ρ‹ Π½Π° Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ сборщика мусора. По Π°Π½Π°Π»ΠΎΠ³ΠΈΠΈ с Python Π² Nim Π² качСствС Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»Π΅ΠΉ Π±Π»ΠΎΠΊΠΎΠ² ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ отступы. ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ срСдства мСтапрограммирования ΠΈ возмоТности для создания ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… языков (DSL). Код ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° поставляСтся ΠΏΠΎΠ΄ Π»ΠΈΡ†Π΅Π½Π·ΠΈΠ΅ΠΉ MIT.

Π‘Ρ€Π΅Π΄ΠΈ Π·Π°ΠΌΠ΅Ρ‚Π½Ρ‹Ρ… ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² Π½ΠΎΠ²ΠΎΠΌ выпускС:

  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½ класс iterable[T] с Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ Ρ‚ΠΈΠΏΠ° для ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ². template sum[T](a: iterable[T]): T = var result: T for ai in a: result += ai result assert sum(iota(3)) == 0 + 1 + 2 # ΠΈΠ»ΠΈ ‘iota(3).sum’
  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½Π° ΡΠΊΡΠΏΠ΅Ρ€ΠΈΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Π°Ρ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Π°Π½ΠΎΡ‚Π°Ρ†ΠΈΠΉ «.effectsOf» для Π²Ρ‹Π±ΠΎΡ€ΠΎΡ‡Π½ΠΎΠ³ΠΎ примСнСния эффСктов. when defined(nimHasEffectsOf): {.experimental: «strictEffects».} else: {.pragma: effectsOf.} proc mysort(s: seq; cmp: proc(a, b: T): int) {.effectsOf: cmp.}
  • ΠŸΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ Π½ΠΎΠ²Ρ‹ΠΉ синтаксис ΠΈΠΌΠΏΠΎΡ€Ρ‚Π° «import foo {.all.}», ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΉ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹Π΅, Π½ΠΎ ΠΈ ΠΏΡ€ΠΈΠ²Π°Ρ‚Π½Ρ‹Π΅ символы. Для доступа ΠΊ ΠΏΡ€ΠΈΠ²Π°Ρ‚Π½Ρ‹ΠΌ полям ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ std/importutils ΠΈ API privateAccess. from system {.all.} as system2 import nil echo system2.ThisIsSystem import os {.all.} echo weirdTarget
  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½Π° ΡΠΊΡΠΏΠ΅Ρ€ΠΈΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Π°Ρ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ², Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΡ…ΡΡ с Ρ‚ΠΎΡ‡ΠΊΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ динамичСских ΠΏΠΎΠ»Π΅ΠΉ. import std/json template ‘.?'(a: JsonNode, b: untyped{ident}): JsonNode = a[astToStr(b)] let j = %*{«a1»: {«a2»: 10}} assert j.?a1.?a2.getInt == 10
  • Π’ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°Ρ… Π±Π»ΠΎΠΊΠ° Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΎ ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ². template fn(a = 1, b = 2, body1, body2) = discard fn(a = 1): bar1 do: bar2
  • Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Π»ΠΈΡ‚Π΅Ρ€Π°Π»ΠΎΠ², опрСдСляСмых ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ «-128’bignum'»). func `’big`*(num: cstring): JsBigInt {.importjs: «BigInt(#)».} assert 0xffffffffffffffff’big == (1’big shl 64’big) — 1’big
  • Π’ компиляторС Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° «—eval:cmd» для нСпосрСдствСнного запуска ΠΊΠΎΠΌΠ°Π½Π΄ Π½Π° языкС Nim ΠΈΠ· ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ‘nim —eval:»echo 1″‘.
  • ΠŸΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»Π΅Π½Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° создания собствСнных Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠΉ для бэкСнда nimscript.
  • Π—Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Ρ‹ сообщСния ΠΎΠ± ΠΎΡˆΠΈΠ±ΠΊΠ°Ρ…, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… обСспСчСн ΠΏΠΎΠΊΠ°Π· связанного с ошибкой контСкста. Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ настраиваСмыС прСдупрСТдСния компилятора.
  • Π—Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½Π° Ρ€Π°Π±ΠΎΡ‚Π° сборщиков мусора «—gc:arc» ΠΈ «—gc:orc».
  • Π’ΠΎ всСх бэкСндах ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½Π° Ρ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ ΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΊΠΎΠ΄Π° для парсинга Ρ†Π΅Π»Ρ‹Ρ… чисСл ΠΈ чисСл с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ запятой.
  • Π£Π»ΡƒΡ‡ΡˆΠ΅Π½Π° ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ бэкСндов JS, VM ΠΈ nimscript с модулями, Ρ€Π°Π½Π΅Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π²ΡˆΠΈΠΌΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с бэкСндом C (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΌΠΎΠ΄ΡƒΠ»ΡŒ std/prelude). НалаТСно тСстированиС ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ stdlib с бэкСндами C, JS ΠΈ VM.
  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Ρ‡ΠΈΠΏΠ° Apple Silicon/M1, 32-разрядных систСм RISC-V, armv8l ΠΈ CROSSOS.
  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ std/jsbigints, std/tempfiles ΠΈ std/sysrand. ВнСсСны Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΡ Π² ΠΌΠΎΠ΄ΡƒΠ»ΠΈ system, math, random, json, jsonutils, os, typetraits, wrapnils, lists ΠΈ hashes.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: opennet.ru