Π‘Π»Π΅Π΄ Π³ΠΎΠ΄ΠΈΠ½Π° Π½Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ° Π±Π΅ΡΠ΅ ΠΏΡΠ±Π»ΠΈΠΊΡΠ²Π°Π½Π° Π²Π΅ΡΡΠΈΡΡΠ° Π½Π° Π΅Π·ΠΈΠΊΠ° Π·Π° ΡΠΈΡΡΠ΅ΠΌΠ½ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠ°Π½Π΅ Nim 1.6, ΠΊΠΎΠΉΡΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΡΡΠ°ΡΠΈΡΠ½ΠΎ ΠΏΠΈΡΠ°Π½Π΅ ΠΈ Π΅ ΡΡΠ·Π΄Π°Π΄Π΅Π½ Ρ ΠΎΠ³Π»Π΅Π΄ Π½Π° Pascal, C++, Python ΠΈ Lisp. ΠΠ·Ρ ΠΎΠ΄Π½ΠΈΡΡ ΠΊΠΎΠ΄ Π½Π° Nim ΡΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ° Π² C, C++ ΠΈΠ»ΠΈ JavaScript ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΡΠ½Π΅. ΠΠΏΠΎΡΠ»Π΅Π΄ΡΡΠ²ΠΈΠ΅ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡΡ C/C++ ΠΊΠΎΠ΄ ΡΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ° Π² ΠΈΠ·ΠΏΡΠ»Π½ΠΈΠΌ ΡΠ°ΠΉΠ», ΠΊΠ°ΡΠΎ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π²ΡΠ΅ΠΊΠΈ Π½Π°Π»ΠΈΡΠ΅Π½ ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΎΡ (clang, gcc, icc, Visual C++), ΠΊΠΎΠ΅ΡΠΎ Π²ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π΄Π° ΠΏΠΎΡΡΠΈΠ³Π½Π΅ΡΠ΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡ, Π±Π»ΠΈΠ·ΠΊΠ° Π΄ΠΎ C, Π°ΠΊΠΎ Π½Π΅ Π²Π·Π΅ΠΌΠ΅ΡΠ΅ ΠΏΡΠ΅Π΄Π²ΠΈΠ΄ ΡΠ°Π·Ρ ΠΎΠ΄ΠΈΡΠ΅ Π·Π° ΡΠ°Π±ΠΎΡΠ° Π±ΠΎΠΊΠ»ΡΠΊΡΠΈΡ. ΠΠΎΠ΄ΠΎΠ±Π½ΠΎ Π½Π° Python, Nim ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΎΡΡΡΡΠΏΠΈ ΠΊΠ°ΡΠΎ ΡΠ°Π·Π΄Π΅Π»ΠΈΡΠ΅Π»ΠΈ Π½Π° Π±Π»ΠΎΠΊΠΎΠ²Π΅. ΠΠΎΠ΄Π΄ΡΡΠΆΠ°Ρ ΡΠ΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΈ Π·Π° ΠΌΠ΅ΡΠ°ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠ°Π½Π΅ ΠΈ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Π·Π° ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ Π½Π° ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ½ΠΈ Π·Π° Π΄ΠΎΠΌΠ΅ΠΉΠ½ Π΅Π·ΠΈΡΠΈ (DSL). ΠΠΎΠ΄ΡΡ Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠ° ΡΠ΅ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Ρ ΠΏΠΎΠ΄ Π»ΠΈΡΠ΅Π½Π·Π° Π½Π° MIT.
ΠΠ°Π±Π΅Π»Π΅ΠΆΠΈΡΠ΅Π»Π½ΠΈΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½ΠΈ Π² Π½ΠΎΠ²Π°ΡΠ° Π²Π΅ΡΡΠΈΡ Π²ΠΊΠ»ΡΡΠ²Π°Ρ:
- ΠΠΎΠ±Π°Π²Π΅Π½ Π΅ iterable[T] ΠΊΠ»Π°Ρ Ρ Π²Π½Π΅Π΄ΡΡΠ²Π°Π½Π΅ Π½Π° ΡΠΈΠΏ Π·Π° ΠΈΡΠ΅ΡΠ°ΡΠΎΡΠΈ. ΡΠ°Π±Π»ΠΎΠ½ sum[T](a: iterable[T]): T = var ΡΠ΅Π·ΡΠ»ΡΠ°Ρ: T Π·Π° ai Π² a: ΡΠ΅Π·ΡΠ»ΡΠ°Ρ += ai ΡΠ΅Π·ΡΠ»ΡΠ°Ρ assert sum(iota(3)) == 0 + 1 + 2 # ΠΈΠ»ΠΈ 'iota( 3).sum'
- ΠΠΎΠ±Π°Π²Π΅Π½Π° Π΅ Π΅ΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠ°Π»Π½Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π·Π° Π°Π½ΠΎΡΠ°ΡΠΈΠΈ ".effectsOf" Π·Π° ΡΠ΅Π»Π΅ΠΊΡΠΈΠ²Π½ΠΎ ΠΏΡΠΈΠ»Π°Π³Π°Π½Π΅ Π½Π° Π΅ΡΠ΅ΠΊΡΠΈ. ΠΊΠΎΠ³Π°ΡΠΎ Π΅ Π΄Π΅ΡΠΈΠ½ΠΈΡΠ°Π½(nimHasEffectsOf): {.experimental: "strictEffects".} else: {.pragma: effectsOf.} proc mysort(s: seq; cmp: proc(a, b: T): int) {.effectsOf: cmp. }
- ΠΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ Π΅ Π½ΠΎΠ² ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ Π·Π° ΠΈΠΌΠΏΠΎΡΡΠΈΡΠ°Π½Π΅ βimport foo {.all.}β, ΠΊΠΎΠΉΡΠΎ Π²ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π΄Π° ΠΈΠΌΠΏΠΎΡΡΠΈΡΠ°ΡΠ΅ Π½Π΅ ΡΠ°ΠΌΠΎ ΠΏΡΠ±Π»ΠΈΡΠ½ΠΈ, Π½ΠΎ ΠΈ ΡΠ°ΡΡΠ½ΠΈ ΡΠΈΠΌΠ²ΠΎΠ»ΠΈ. ΠΠ° Π΄ΠΎΡΡΡΠΏ Π΄ΠΎ ΡΠ°ΡΡΠ½ΠΈ ΠΏΠΎΠ»Π΅ΡΠ° Π½Π° ΠΎΠ±Π΅ΠΊΡΠΈ ΡΠ° Π΄ΠΎΠ±Π°Π²Π΅Π½ΠΈ ΠΌΠΎΠ΄ΡΠ»ΡΡ std/importutils ΠΈ privateAccess API. ΠΎΡ ΡΠΈΡΡΠ΅ΠΌΠ° {.all.} ΠΊΠ°ΡΠΎ system2 import nil echo system2.ThisIsSystem import os {.all.} echo weirdTarget
- ΠΠΎΠ±Π°Π²Π΅Π½Π° Π΅ Π΅ΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠ°Π»Π½Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π·Π° ΡΠΎΡΠΊΠΎΠ²ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΈ, ΠΊΠΎΠΈΡΠΎ ΠΌΠΎΠ³Π°Ρ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ Π·Π° Π²Π½Π΅Π΄ΡΡΠ²Π°Π½Π΅ Π½Π° Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ½ΠΈ ΠΏΠΎΠ»Π΅ΡΠ°. ΠΈΠΌΠΏΠΎΡΡΠΈΡΠ°Π½Π΅ Π½Π° std/json ΡΠ°Π±Π»ΠΎΠ½ '.?'(a: JsonNode, b: untyped{ident}): JsonNode = a[astToStr(b)] let j = %*{βa1β: {βa2β: 10}} assert j.?a1.?a2.getInt == 10
- ΠΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π½ΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈ ΠΌΠΎΠ³Π°Ρ Π΄Π° Π±ΡΠ΄Π°Ρ Π·Π°Π΄Π°Π΄Π΅Π½ΠΈ Π² Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΈΡΠ΅ Π½Π° Π±Π»ΠΎΠΊΠ°. ΡΠ°Π±Π»ΠΎΠ½ fn(a = 1, b = 2, body1, body2) = ΠΎΡΡ Π²ΡΡΠ»ΡΠ½Π΅ fn(a = 1): bar1 do: bar2
- ΠΡΠ²Π΅Π΄Π΅Π½Π° Π΅ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π·Π° Π΄Π΅ΡΠΈΠ½ΠΈΡΠ°Π½ΠΈ ΠΎΡ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ Π»ΠΈΡΠ΅ΡΠ°Π»ΠΈ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ "-128'bignum'"). func `'big`*(num: cstring): JsBigInt {.importjs: "BigInt(#)".} assert 0xffffffffffffff'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