Rilaxx tal-lingwa ta' programmar Nim 1.6.0

Wara sena ta 'żvilupp, ġie ppubblikat ir-rilaxx tal-lingwa ta' programmar tas-sistema Nim 1.6, li juża tajpjar statiku u nħolqot b'għajnejhom fuq Pascal, C++, Python u Lisp. Il-kodiċi tas-sors Nim huwa miġbur f'rappreżentazzjoni C, C++, jew JavaScript. Sussegwentement, il-kodiċi C/C++ li jirriżulta jiġi kkompilat f'fajl eżekutibbli bl-użu ta' kwalunkwe kompilatur disponibbli (clang, gcc, icc, Visual C++), li jippermettilek tikseb prestazzjoni qrib C, jekk ma tqisx l-ispejjeż tat-tħaddim. il-kollettur taż-żibel. Simili għal Python, Nim juża l-indentazzjoni bħala delimitaturi tal-blokki. Għodod u kapaċitajiet ta' metaprogrammazzjoni għall-ħolqien ta' lingwi speċifiċi għad-dominju (DSLs) huma appoġġjati. Il-kodiċi tal-proġett huwa pprovdut taħt il-liċenzja MIT.

Bidliet notevoli fir-rilaxx il-ġdid jinkludu:

  • Miżjud il-klassi iterable[T] b'implimentazzjoni tat-tip għall-iteraturi. template sum[T](a: iterable[T]): T = var result: T for ai in a: result += ai result assert sum(iota(3)) == 0 + 1 + 2 # jew 'iota( 3).sum'
  • Miżjud appoġġ sperimentali għall-annotazzjonijiet ".effectsOf" għall-applikazzjoni selettiva tal-effetti. meta definit(nimHasEffectsOf): {.experimental: "strictEffects".} inkella: {.pragma: effectsOf.} proc mysort(s: seq; cmp: proc(a, b: T): int) {.effectsOf: cmp. }
  • Ġiet proposta sintassi ta’ importazzjoni ġdida “import foo {.all.}”, li tippermettilek timporta simboli mhux biss pubbliċi, iżda wkoll privati. Biex taċċessa oqsma privati ​​ta 'oġġetti, il-modulu std/importutils u l-API privateAccess ġew miżjuda. mis-sistema {.all.} bħala system2 importazzjoni xejn echo system2.ThisIsSystem importazzjoni os {.all.} echo weirdTarget
  • Miżjud appoġġ sperimentali għall-operaturi dot, li jistgħu jintużaw biex jimplimentaw oqsma dinamiċi. importazzjoni std/json template '.?'(a: JsonNode, b: untyped{ident}): JsonNode = a[astToStr(b)] let j = %*{“a1”: {“a2”: 10}} jasserixxi j.?a1.?a2.getInt == 10
  • Parametri addizzjonali jistgħu jiġu speċifikati fl-argumenti tal-blokk. template fn(a = 1, b = 2, body1, body2) = armi fn(a = 1): bar1 do: bar2
  • Appoġġ għal letterali definiti mill-utent ġie implimentat (per eżempju, "-128'bignum'"). func `'big`*(num: cstring): JsBigInt {.importjs: "BigInt(#)".} assert 0xffffffffffffff'big == (1'big shl 64'big) - 1'big
  • Il-kompilatur jimplimenta l-kmand “—eval:cmd” biex imexxi direttament kmandijiet Nim mil-linja tal-kmand, pereżempju 'nim —eval:"echo 1″".
  • Ipprovda appoġġ għall-ħolqien tal-estensjonijiet tiegħek stess għall-backend nimscript.
  • Messaġġi ta 'żball ġew estiżi ħafna biex juru l-kuntest assoċjat ma' l-iżball. Implimentaw twissijiet tal-kompilatur tad-dwana.
  • Prestazzjoni mtejba b'mod sinifikanti tal-kolletturi taż-żibel "--gc:arc" u "--gc:orc".
  • Il-backends kollha tejbu l-eżattezza u l-prestazzjoni tal-kodiċi għall-parsing ta 'numri interi u numri floating point.
  • Kompatibilità mtejba ta 'backends JS, VM u nimscript ma' moduli li qabel kienu jaħdmu biss mal-backend C (pereżempju, il-modulu std/prelude). Ġie stabbilit l-ittestjar tal-moduli stdlib b'backends C, JS u VM.
  • Appoġġ miżjud għal ċippa Apple Silicon/M1, 32-bit RISC-V, armv8l u sistemi CROSSOS.
  • Moduli miżjuda std/jsbigints, std/tempfiles u std/sysrand. Sar titjib sinifikanti fis-sistema, matematika, każwali, json, jsonutils, os, typetraits, wrapnils, listi u moduli hashes.

Sors: opennet.ru

Żid kumment