ΠΠΎ Π΅Π΄Π½Π° Π³ΠΎΠ΄ΠΈΠ½Π° ΡΠ°Π·Π²ΠΎΡ, Π±Π΅ΡΠ΅ ΠΎΠ±ΡΠ°Π²Π΅Π½ΠΎ ΠΈΠ·Π΄Π°Π½ΠΈΠ΅ΡΠΎ Π½Π° ΡΠΈΡΡΠ΅ΠΌΡΠΊΠΈΠΎΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΡΠΊΠΈ ΡΠ°Π·ΠΈΠΊ Nim 1.6, ΠΊΠΎΡ ΠΊΠΎΡΠΈΡΡΠΈ ΡΡΠ°ΡΠΈΡΠΊΠΎ ΠΏΠΈΡΡΠ²Π°ΡΠ΅ ΠΈ Π±Π΅ΡΠ΅ ΡΠΎΠ·Π΄Π°Π΄Π΅Π½ ΡΠΎ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Pascal, C++, Python ΠΈ Lisp. ΠΠ·Π²ΠΎΡΠ½ΠΈΠΎΡ ΠΊΠΎΠ΄ Π½Π° Nim ΡΠ΅ ΠΊΠΎΠΌΠΏΠ°ΡΠ»ΠΈΡΠ° Π²ΠΎ C, C++ ΠΈΠ»ΠΈ JavaScript ΡΠ΅ΠΏΡΠ΅Π·Π΅Π½ΡΠ°ΡΠΈΡΠ°. ΠΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»Π½ΠΎ, Π΄ΠΎΠ±ΠΈΠ΅Π½ΠΈΠΎΡ C/C++ ΠΊΠΎΠ΄ ΡΠ΅ ΠΊΠΎΠΌΠΏΠ°ΡΠ»ΠΈΡΠ° Π²ΠΎ ΠΈΠ·Π²ΡΡΠ½Π° Π΄Π°ΡΠΎΡΠ΅ΠΊΠ° ΠΊΠΎΡΠΈΡΡΠ΅ΡΡΠΈ ΠΊΠΎΡ Π±ΠΈΠ»ΠΎ Π΄ΠΎΡΡΠ°ΠΏΠ΅Π½ ΠΊΠΎΠΌΠΏΠ°ΡΠ»Π΅Ρ (clang, gcc, icc, Visual C++), ΡΡΠΎ Π²ΠΈ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΡΠ²Π° Π΄Π° ΠΏΠΎΡΡΠΈΠ³Π½Π΅ΡΠ΅ ΠΏΠ΅ΡΡΠΎΡΠΌΠ°Π½ΡΠΈ Π±Π»ΠΈΡΠΊΡ Π΄ΠΎ C, Π°ΠΊΠΎ Π½Π΅ Π³ΠΈ Π·Π΅ΠΌΠ΅ΡΠ΅ ΠΏΡΠ΅Π΄Π²ΠΈΠ΄ ΡΡΠΎΡΠΎΡΠΈΡΠ΅ Π·Π° ΠΈΠ·Π²ΡΡΡΠ²Π°ΡΠ΅ ΡΠΎΠ±ΠΈΡΠ°ΡΠΎΡ Π½Π° ΡΡΠ±ΡΠ΅. Π‘Π»ΠΈΡΠ½ΠΎ Π½Π° Python, Nim ΠΊΠΎΡΠΈΡΡΠΈ Π²ΠΎΠ²Π»Π΅ΠΊΡΠ²Π°ΡΠ΅ ΠΊΠ°ΠΊΠΎ Π±Π»ΠΎΠΊ ΡΠ΅ΠΏΠ°ΡΠ°ΡΠΎΡΠΈ. ΠΠΎΠ΄Π΄ΡΠΆΠ°Π½ΠΈ ΡΠ΅ Π°Π»Π°ΡΠΊΠΈ ΠΈ ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Π·Π° ΠΌΠ΅ΡΠ°ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠ°ΡΠ΅ Π·Π° ΡΠΎΠ·Π΄Π°Π²Π°ΡΠ΅ ΡΠ°Π·ΠΈΡΠΈ ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ½ΠΈ Π·Π° Π΄ΠΎΠΌΠ΅Π½ (DSL). ΠΡΠΎΠ΅ΠΊΡΠ½ΠΈΠΎΡ ΠΊΠΎΠ΄ Π΅ ΠΎΠ±Π΅Π·Π±Π΅Π΄Π΅Π½ ΠΏΠΎΠ΄ Π»ΠΈΡΠ΅Π½ΡΠ°ΡΠ° MIT.
ΠΠ½Π°ΡΠ°ΡΠ½ΠΈΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½ΠΈ Π²ΠΎ Π½ΠΎΠ²ΠΎΡΠΎ ΠΈΠ·Π΄Π°Π½ΠΈΠ΅ Π²ΠΊΠ»ΡΡΡΠ²Π°Π°Ρ:
- ΠΠΎΠ΄Π°Π΄Π΅Π½Π° Π΅ ΠΊΠ»Π°ΡΠ°ΡΠ° ΠΏΠΎΠ²ΡΠΎΡΠ»ΠΈΠ²Π°[T] ΡΠΎ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠ° Π½Π° ΡΠΈΠΏ Π·Π° ΠΈΡΠ΅ΡΠ°ΡΠΎΡΠΈ. ΡΠ°Π±Π»ΠΎΠ½ ΡΡΠΌΠ°[T](a: ΠΏΠΎΠ²ΡΠΎΡΠ»ΠΈΠ²[T]): T = var ΡΠ΅Π·ΡΠ»ΡΠ°Ρ: T Π·Π° ai Π²ΠΎ a: ΡΠ΅Π·ΡΠ»ΡΠ°Ρ += ai ΡΠ΅Π·ΡΠ»ΡΠ°Ρ ΡΠ²ΡΠ΄ΠΈ ΡΡΠΌΠ°(iota(3)) == 0 + 1 + 2 # ΠΈΠ»ΠΈ 'iota( 3).Π·Π±ΠΈΡ'
- ΠΠΎΠ΄Π°Π΄Π΅Π½Π° Π΅ Π΅ΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠ°Π»Π½Π° ΠΏΠΎΠ΄Π΄ΡΡΠΊΠ° Π·Π° ΠΏΡΠΈΠ±Π΅Π»Π΅ΡΠΊΠΈΡΠ΅ β.effectsOfβ Π·Π° ΡΠ΅Π»Π΅ΠΊΡΠΈΠ²Π½ΠΎ ΠΏΡΠΈΠΌΠ΅Π½Π° Π½Π° Π΅ΡΠ΅ΠΊΡΠΈ. ΠΊΠΎΠ³Π° Π΅ Π΄Π΅ΡΠΈΠ½ΠΈΡΠ°Π½ΠΎ(nimHasEffectsOf): {.Π΅ΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠ°Π»Π½ΠΎ: βstrictEffectsβ.} Π΄ΡΡΠ³ΠΎ: {.pragma: effectOf.} proc mysort(s: seq; cmp: proc(a, b: T): int) {.effectsOf: cmp. }
- ΠΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½Π° Π΅ Π½ΠΎΠ²Π° ΡΠΈΠ½ΡΠ°ΠΊΡΠ° Π·Π° ΡΠ²ΠΎΠ· βimport foo {.all.}β, ΡΡΠΎ Π²ΠΈ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΡΠ²Π° Π΄Π° ΡΠ²Π΅Π·ΡΠ²Π°ΡΠ΅ Π½Π΅ ΡΠ°ΠΌΠΎ ΡΠ°Π²Π½ΠΈ, ΡΡΠΊΡ ΠΈ ΠΏΡΠΈΠ²Π°ΡΠ½ΠΈ ΡΠΈΠΌΠ±ΠΎΠ»ΠΈ. ΠΠ° ΠΏΡΠΈΡΡΠ°ΠΏ Π΄ΠΎ ΠΏΡΠΈΠ²Π°ΡΠ½ΠΈ ΠΏΠΎΠ»ΠΈΡΠ° Π½Π° ΠΎΠ±ΡΠ΅ΠΊΡΠΈ, Π΄ΠΎΠ΄Π°Π΄Π΅Π½ΠΈ ΡΠ΅ ΠΌΠΎΠ΄ΡΠ»ΠΎΡ std/importutils ΠΈ privateAccess API. ΠΎΠ΄ ΡΠΈΡΡΠ΅ΠΌΠΎΡ {.ΡΠΈΡΠ΅.} ΠΊΠ°ΠΊΠΎ ΡΠΈΡΡΠ΅ΠΌ2 ΡΠ²Π΅Π·ΠΈ Π½ΡΠ»Π° Π΅Ρ ΠΎ ΡΠΈΡΡΠ΅ΠΌ2.ThisIsSystem ΡΠ²ΠΎΠ· os {.all.} Π΅Ρ ΠΎ weirdTarget
- ΠΠΎΠ΄Π°Π΄Π΅Π½Π° Π΅ Π΅ΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠ°Π»Π½Π° ΠΏΠΎΠ΄Π΄ΡΡΠΊΠ° Π·Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΈ ΡΠΎ ΡΠΎΡΠΊΠΈ, ΠΊΠΎΡΠ° ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈ Π·Π° ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠ° Π½Π° Π΄ΠΈΠ½Π°ΠΌΠΈΡΠΊΠΈ ΠΏΠΎΠ»ΠΈΡΠ°. ΡΠ²Π΅Π·ΠΈ ΡΠ°Π±Π»ΠΎΠ½ std/json '.?'(a: JsonNode, b: untyped{ident}): JsonNode = a[astToStr(b)] Π½Π΅ΠΊΠ° j = %*{βa1β: {βa2β: 10}} ΡΠ²ΡΠ΄ΠΈ 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 backends ΡΠΎ ΠΌΠΎΠ΄ΡΠ»ΠΈ ΠΊΠΎΠΈ ΠΏΡΠ΅ΡΡ ΠΎΠ΄Π½ΠΎ ΡΠ°Π±ΠΎΡΠ΅Π° ΡΠ°ΠΌΠΎ ΡΠΎ C backend (Π½Π° ΠΏΡΠΈΠΌΠ΅Ρ, std/prelude ΠΌΠΎΠ΄ΡΠ»ΠΎΡ). ΠΠΎΡΠΏΠΎΡΡΠ°Π²Π΅Π½ΠΎ Π΅ ΡΠ΅ΡΡΠΈΡΠ°ΡΠ΅ Π½Π° ΠΌΠΎΠ΄ΡΠ»ΠΈ stdlib ΡΠΎ C, JS ΠΈ VM backends.
- ΠΠΎΠ΄Π°Π΄Π΅Π½Π° Π΅ ΠΏΠΎΠ΄Π΄ΡΡΠΊΠ° Π·Π° Apple Silicon/M1 ΡΠΈΠΏ, 32-Π±ΠΈΡΠ½ΠΈ RISC-V, armv8l ΠΈ CROSSOS ΡΠΈΡΡΠ΅ΠΌΠΈ.
- ΠΠΎΠ΄Π°Π΄Π΅Π½ΠΈ ΡΠ΅ ΠΌΠΎΠ΄ΡΠ»ΠΈΡΠ΅ std/jsbigints, std/tempfiles ΠΈ std/sysrand. ΠΠ°ΠΏΡΠ°Π²Π΅Π½ΠΈ ΡΠ΅ Π·Π½Π°ΡΠ°ΡΠ½ΠΈ ΠΏΠΎΠ΄ΠΎΠ±ΡΡΠ²Π°ΡΠ° Π½Π° ΡΠΈΡΡΠ΅ΠΌΡΠΊΠΈΡΠ΅, ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΡΠΊΠΈ, ΡΠ»ΡΡΠ°Π΅Π½, json, jsonutils, os, typetraits, wrapnils, ΡΠΏΠΈΡΠΎΡΠΈ ΠΈ Ρ Π°Ρ ΠΌΠΎΠ΄ΡΠ»ΠΈ.
ΠΠ·Π²ΠΎΡ: opennet.ru