ВСрсия Π½Π° Π΅Π·ΠΈΠΊΠ° Π·Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅ Nim 1.6.0

Π‘Π»Π΅Π΄ Π³ΠΎΠ΄ΠΈΠ½Π° Π½Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° бСшС ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ²Π°Π½Π° вСрсията Π½Π° Π΅Π·ΠΈΠΊΠ° Π·Π° систСмно ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅ 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

ДобавянС Π½Π° Π½ΠΎΠ² ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€