Nim programming language release 1.6.0

Pagkatapos ng isang taon ng pag-unlad, ang paglabas ng system programming language na Nim 1.6 ay nai-publish, na gumagamit ng static na pag-type at nilikha na may mata sa Pascal, C++, Python at Lisp. Ang source code ng Nim ay pinagsama-sama sa isang representasyong C, C++, o JavaScript. Kasunod nito, ang resultang C/C++ code ay pinagsama-sama sa isang executable na file gamit ang anumang available na compiler (clang, gcc, icc, Visual C++), na nagbibigay-daan sa iyong makamit ang pagganap na malapit sa C, kung hindi mo isasaalang-alang ang mga gastos sa pagpapatakbo. ang basurero. Katulad ng Python, gumagamit si Nim ng indentation bilang block delimiters. Sinusuportahan ang mga tool at kakayahan ng metaprogramming para sa paglikha ng mga wikang partikular sa domain (DSL). Ang code ng proyekto ay ibinigay sa ilalim ng lisensya ng MIT.

Ang mga kapansin-pansing pagbabago sa bagong release ay kinabibilangan ng:

  • Idinagdag ang iterable[T] na klase na may uri ng pagpapatupad para sa mga iterator. template sum[T](a: iterable[T]): T = var result: T for ai in a: result += ai result assert sum(iota(3)) == 0 + 1 + 2 # o 'iota( 3).sum'
  • Nagdagdag ng pang-eksperimentong suporta para sa ".effectsOf" na mga anotasyon para sa piling paglalapat ng mga epekto. kapag tinukoy(nimHasEffectsOf): {.experimental: "strictEffects".} else: {.pragma: effectsOf.} proc mysort(s: seq; cmp: proc(a, b: T): int) {.effectsOf: cmp. }
  • Ang isang bagong import syntax na β€œimport foo {.all.}” ay iminungkahi, na nagbibigay-daan sa iyong mag-import hindi lamang ng pampubliko, kundi pati na rin ng mga pribadong simbolo. Upang ma-access ang mga pribadong field ng mga bagay, idinagdag ang std/importutils module at ang privateAccess API. mula sa system {.all.} bilang system2 import nil echo system2.ThisIsSystem import os {.all.} echo weirdTarget
  • Nagdagdag ng pang-eksperimentong suporta para sa mga operator ng tuldok, na maaaring magamit upang ipatupad ang mga dynamic na field. import std/json template '.?'(a: JsonNode, b: untyped{ident}): JsonNode = a[astToStr(b)] let j = %*{β€œa1”: {β€œa2”: 10}} assert j.?a1.?a2.getInt == 10
  • Maaaring tukuyin ang mga karagdagang parameter sa mga block argument. template fn(a = 1, b = 2, body1, body2) = itapon ang fn(a = 1): bar1 do: bar2
  • Ang suporta para sa mga literal na tinukoy ng gumagamit ay ipinatupad (halimbawa, "-128'bignum'"). func `'big`*(num: cstring): JsBigInt {.importjs: "BigInt(#)".} assert 0xffffffffffffff'big == (1'big shl 64'big) - 1'big
  • Ipinapatupad ng compiler ang command na "--eval:cmd" upang direktang patakbuhin ang mga command ng Nim mula sa command line, halimbawa 'nim -eval:"echo 1"'.
  • Nagbigay ng suporta para sa paggawa ng sarili mong mga extension para sa nimscript backend.
  • Ang mga mensahe ng error ay lubos na pinalawak upang ipakita ang kontekstong nauugnay sa error. Ipinatupad ang mga pasadyang babala ng compiler.
  • Malaking pinahusay na performance ng "--gc:arc" at "--gc:orc" na mga basurero.
  • Ang lahat ng mga backend ay napabuti ang katumpakan at pagganap ng code para sa pag-parse ng mga integer at mga numero ng floating point.
  • Pinahusay na compatibility ng JS, VM at nimscript backend na may mga module na dati ay gumagana lamang sa C backend (halimbawa, ang std/prelude module). Ang pagsubok ng mga stdlib module na may C, JS at VM backend ay naitatag.
  • Nagdagdag ng suporta para sa Apple Silicon/M1 chip, 32-bit RISC-V, armv8l at CROSSOS system.
  • Nagdagdag ng mga module std/jsbigints, std/tempfiles at std/sysrand. Ang mga makabuluhang pagpapabuti ay ginawa sa system, math, random, json, jsonutils, os, typetraits, wrapnils, lists at hashes modules.

Pinagmulan: opennet.ru

Magdagdag ng komento