Weşandina zimanê bernamenûsê Nim 1.6.0

Piştî salek pêşkeftinê, serbestberdana zimanê bernamesaziya pergalê Nim 1.6 hate weşandin, ku tîpkirina statîk bikar tîne û bi çavê Pascal, C++, Python û Lisp hate afirandin. Koda çavkaniyê Nim di nav nûneriyek C, C++, an JavaScript de tête berhev kirin. Dûv re, koda C/C++ ya ku tê encamdan bi karanîna her berhevkarek berdest (clang, gcc, icc, Visual C++) di pelek îcrakar de tê berhev kirin, ku dihêle hûn performansa nêzî C-yê bi dest bixin, ger hûn lêçûnên xebitandinê hesab nekin. berhevkarê çopê. Mîna Python, Nim wekî veqetandekên blokê veqetandinê bikar tîne. Amûr û kapasîteyên metaprogramkirinê yên ji bo afirandina zimanên taybetî yên domainê (DSL) têne piştgirî kirin. Koda projeyê di bin lîsansa MITê de tê peyda kirin.

Guhertinên girîng ên di berdana nû de ev in:

  • Çîna iterable[T] bi pêkanîna celebek ji bo dubarekeran zêde kir. berhevoka şablonê[T](a: dubare[T]): T = encamek var: T ji bo ai di a: encam += ai encam yekjimara (iota(3)) == 0 + 1 + 2 # an 'iota( 3) .
  • Ji bo sepandina bandorên bijartî ji bo şîroveyên ".effectsOf" piştgirîya ceribandinê zêde kir. dema ku tê pênase kirin(nimHasEffectsOf): {.ceribandinî: "StricEffects".} other: {.pragma: effectOf.} proc mysort(s: seq; cmp: proc(a, b: T): int) {.effectsOf: cmp. }
  • Hevoksaziyek nû ya import "import foo {.all.}" hate pêşniyar kirin, ku dihêle hûn ne tenê sembolên gelemperî, lê di heman demê de sembolên taybet jî derxînin. Ji bo gihîştina zeviyên taybet ên tiştan, modula std/importutils û API-ya PrivateAccess hatine zêdekirin. ji sîstemê {.hemû.} wek system2 import nil echo system2.ThisIsSystem import os {.all.} echo weirdTarget
  • Piştgiriya ceribandinê ya ji bo operatorên xalê zêde kir, ku dikare ji bo pêkanîna qadên dînamîkî were bikar anîn. şablonê std/json import '.?'(a: JsonNode, b: netyped{ident}): JsonNode = a[astToStr(b)] bila j = %*{“a1”: {“a2”: 10}} destnîşan bike j.?a1.?a2.getInt == 10
  • Parametreyên zêde dikarin di argumanên blokê de bêne diyar kirin. şablon fn(a = 1, b = 2, laş1, laş2) = fn (a = 1) berde: bar1 bike: bar2
  • Piştgiriya ji bo peyvên ku ji hêla bikarhêner ve hatî destnîşan kirin hate bicîh kirin (mînak, "-128'bignum'"). func `'mezin'*(hejmar: cstring): JsBigInt {.importjs: "BigInt(#)".} assert 0xffffffffffffff'big == (1'shl mezin 64'mezin) - 1'mezin
  • Berhevkar fermana "-eval:cmd" pêk tîne da ku rasterast fermanên Nim ji rêzika fermanê bimeşîne, mînakî 'nim —eval:"echo 1"'.
  • Ji bo afirandina pêvekên xwe yên ji bo paşnavê nimscript piştgirî peyda kir.
  • Peyamên çewtiyê pir hatine berfireh kirin da ku çarçoweya ku bi xeletiyê ve girêdayî ye nîşan bide. Hişyariyên berhevkarê xwerû hatine bicîh kirin.
  • Performansa berhevkarên çopê "--gc:arc" û "--gc:orc" bi girîngî çêtir kirin.
  • Hemî paşperdeyan rastbûn û performansa kodê ji bo parskirina jimareyên bêkêmasî û hejmarên xala herikandinê çêtir kirine.
  • Bi modulên ku berê tenê bi pişta C-yê re dixebitîn (mînakek, modula std/prelude) re hevahengiya pêşkeftî ya paşnavên JS, VM û nimscript. Ceribandina modulên stdlib bi paşnavên C, JS û VM ve hatî saz kirin.
  • Piştgiriya ji bo çîpê Apple Silicon/M1, pergalên RISC-V 32-bit, armv8l û CROSSOS zêde kir.
  • Modulên std/jsbigints, std/tempfiles û std/sysrand zêde kirin. Di pergalê, matematîkî, random, json, jsonutils, os, typetraits, wrapnils, lîste û modulên hashes de pêşkeftinên girîng hatine çêkirin.

Source: opennet.ru

Add a comment