ИзданиС Π½Π° програмскиот јазик 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.

Π—Π½Π°Ρ‡Π°Ρ˜Π½ΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ Π²ΠΎ Π½ΠΎΠ²ΠΎΡ‚ΠΎ ΠΈΠ·Π΄Π°Π½ΠΈΠ΅ Π²ΠΊΠ»ΡƒΡ‡ΡƒΠ²Π°Π°Ρ‚:

  • Π”ΠΎΠ΄Π°Π΄Π΅Π½Π° Π΅ класата ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π»ΠΈΠ²Π°[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

Π”ΠΎΠ΄Π°Π΄Π΅Ρ‚Π΅ ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€