Nim proqramlaşdırma dili buraxılışı 1.6.0

Bir illik inkişafdan sonra, statik yazmaqdan istifadə edən və Pascal, C++, Python və Lisp dillərinə nəzər salmaqla yaradılmış Nim 1.6 sistem proqramlaşdırma dilinin buraxılışı nəşr olundu. Nim mənbə kodu C, C++ və ya JavaScript təqdimatında tərtib edilmişdir. Sonradan əldə edilən C/C++ kodu istənilən mövcud kompilyatordan (clang, gcc, icc, Visual C++) istifadə etməklə icra edilə bilən fayla yığılır ki, bu da işləmə xərclərini nəzərə almasanız, C-yə yaxın performansa nail olmağa imkan verir. zibil yığan. Python kimi, Nim blok ayırıcıları kimi abzasdan istifadə edir. Metaproqramlaşdırma alətləri və domenə xas dillər (DSL) yaratmaq üçün imkanlar dəstəklənir. Layihə kodu MIT lisenziyası ilə təmin edilir.

Yeni buraxılışda diqqətəlayiq dəyişikliklərə aşağıdakılar daxildir:

  • İteratorlar üçün tip tətbiqi ilə təkrarlana bilən [T] sinfi əlavə edildi. şablon cəmi[T](a: təkrarlana bilən[T]): T = var nəticə: a-da ai üçün T: nəticə += ai nəticə təsdiq sum(iota(3)) == 0 + 1 + 2 # və ya 'iota( 3).cəm'
  • Effektlərin seçmə tətbiqi üçün ".effectsOf" annotasiyaları üçün eksperimental dəstək əlavə edildi. müəyyən edildikdə(nimHasEffectsOf): {.eksperimental: "strictEffects".} başqa: {.pragma: effectsOf.} proc mysort(s: seq; cmp: proc(a, b: T): int) {.effectsOf: cmp. }
  • Təkcə ictimai deyil, həm də şəxsi simvolları idxal etməyə imkan verən “import foo {.all.}” yeni idxal sintaksisi təklif edilmişdir. Obyektlərin şəxsi sahələrinə daxil olmaq üçün std/importutils modulu və privateAccess API əlavə edilib. sistemdən {.all.} sistem2 olaraq idxal sıfır echo system2.ThisIsSystem import əməliyyat sistemi {.all.} echo weirdTarget
  • Dinamik sahələri həyata keçirmək üçün istifadə edilə bilən nöqtə operatorları üçün eksperimental dəstək əlavə edildi. import std/json şablonu '.?'(a: JsonNode, b: yazılmamış{ident}): JsonNode = a[astToStr(b)] let j = %*{“a1”: {“a2”: 10}} təsdiq edin j.?a1.?a2.getInt == 10
  • Əlavə parametrlər blok arqumentlərində göstərilə bilər. şablon fn(a = 1, b = 2, gövdə1, gövdə2) = ləğv edin fn(a = 1): bar1 et: bar2
  • İstifadəçi tərəfindən təyin edilmiş literallar üçün dəstək həyata keçirilib (məsələn, "-128'bignum'"). func `'big`*(num: cstring): JsBigInt {.importjs: "BigInt(#)".} assert 0xffffffffffffff'big == (1'big shl 64'big) - 1'big
  • Kompilyator Nim əmrlərini komanda xəttindən birbaşa icra etmək üçün “—eval:cmd” əmrini həyata keçirir, məsələn, ‘nim —eval:”echo 1″‘.
  • Nimscript backend üçün öz uzantılarınızı yaratmaq üçün dəstək verilir.
  • Səhv mesajları xəta ilə əlaqəli konteksti göstərmək üçün xeyli genişləndirilib. Fərdi kompilyator xəbərdarlıqlarını həyata keçirdi.
  • "--gc:arc" və "--gc:orc" zibil yığanlarının performansı əhəmiyyətli dərəcədə təkmilləşdirildi.
  • Bütün arxa hissələr tam ədədləri və üzən nöqtə nömrələrini təhlil etmək üçün kodun dəqiqliyini və performansını yaxşılaşdırmışdır.
  • JS, VM və nimscript backendlərinin əvvəllər yalnız C arxa hissəsi ilə işləyən modullarla təkmilləşdirilmiş uyğunluğu (məsələn, std/prelude modulu). C, JS və VM backendləri ilə stdlib modullarının sınaqdan keçirilməsi qurulmuşdur.
  • Apple Silicon/M1 çipi, 32-bit RISC-V, armv8l və CROSSOS sistemləri üçün əlavə dəstək.
  • std/jsbigints, std/tempfiles və std/sysrand modulları əlavə edildi. Sistem, riyaziyyat, təsadüfi, json, jsonutils, os, typetraits, wrapnils, siyahılar və hash modullarında əhəmiyyətli təkmilləşdirmələr edilmişdir.

Mənbə: opennet.ru

Добавить комментарий