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 үр дүн: ai-д T: үр дүн += ai үр дүнг баталгаажуулах sum(iota(3)) == 0 + 1 + 2 # эсвэл 'iota( 3).нийлбэр'
  • Эффектүүдийг сонгон хэрэглэх ".effectsOf" тэмдэглэгээнд туршилтын дэмжлэг нэмсэн. тодорхойлогдсон үед(nimHasEffectsOf): {.туршилтын: "strictEffects".} өөр: {.pragma: effectsOf.} proc mysort(s: seq; cmp: proc(a, b: T): int) {.effectsOf: cmp. }
  • “import foo {.all.}” шинэ импортын синтаксийг санал болгосон бөгөөд энэ нь танд зөвхөн нийтийн төдийгүй хувийн тэмдэгтүүдийг импортлох боломжийг олгодог. Объектуудын хувийн талбарт хандахын тулд std/importutils модуль болон privateAccess API нэмэгдсэн. системээс {.бүгд.} систем2 байдлаар импорт хийхгүй цуурай систем2.ThisIsSystem импортын os {.all.} echo weirdTarget
  • Динамик талбаруудыг хэрэгжүүлэхэд ашиглаж болох цэгийн операторуудад туршилтын дэмжлэг нэмсэн. import std/json загвар '.?'(a: JsonNode, b: бичээгүй{ident}): JsonNode = a[astToStr(b)] let j = %*{“a1”: {“a2”: 10}} батлах j.?a1.?a2.getInt == 10
  • Нэмэлт параметрүүдийг блок аргументуудад зааж өгч болно. загвар fn(a = 1, b = 2, body1, body2) = устгах fn(a = 1): bar1 хийх: бар2
  • Хэрэглэгчийн тодорхойлсон литералуудын дэмжлэгийг хэрэгжүүлсэн (жишээлбэл, "-128'bignum'"). func `'big`*(num: cstring): JsBigInt {.importjs: "BigInt(#)".} assert 0xffffffffffffff'big == (1'big shl 64'big) - 1'big
  • Хөрвүүлэгч нь Nim командуудыг тушаалын мөрөөс шууд ажиллуулахын тулд “—eval:cmd” командыг хэрэгжүүлдэг, жишээ нь ‘nim —eval:”echo 1″‘.
  • Nimscript backend-д зориулж өөрийн өргөтгөлүүдийг бий болгоход дэмжлэг үзүүлсэн.
  • Алдаатай холбоотой контекстийг харуулахын тулд алдааны мессежийг ихээхэн өргөжүүлсэн. Захиалгат хөрвүүлэгчийн анхааруулгыг хэрэгжүүлсэн.
  • "--gc:arc" болон "--gc:orc" хог цуглуулагчийн гүйцэтгэл мэдэгдэхүйц сайжирсан.
  • Бүх backends нь бүхэл тоо болон хөвөгч цэгийн тоонуудыг задлан шинжлэхэд зориулсан кодын нарийвчлал, гүйцэтгэлийг сайжруулсан.
  • JS, VM болон nimscript backends-ийн өмнө нь зөвхөн C backend-тэй ажилладаг байсан модулиудтай нийцтэй байдал сайжирсан (жишээлбэл, std/prelude модуль). C, JS болон VM backends бүхий stdlib модулиудын туршилтыг хийсэн.
  • Apple Silicon/M1 чип, 32 битийн RISC-V, armv8l болон CROSSOS системүүдийн дэмжлэгийг нэмсэн.
  • std/jsbigints, std/tempfiles болон std/sysrand модулиудыг нэмсэн. Систем, математик, random, json, jsonutils, os, typetraits, wrapnils, lists болон hashes модулиудад мэдэгдэхүйц сайжруулалт хийгдсэн.

Эх сурвалж: opennet.ru

сэтгэгдэл нэмэх