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 нәтиже: a ішіндегі ai үшін T: нәтиже += ai нәтиже қосындысын растау(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 қосылды. {.all.} жүйесінен жүйе2 ретінде импорттау нөл echo system2.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 істеу: bar2
  • Пайдаланушы анықтайтын литералдарды қолдау жүзеге асырылды (мысалы, "-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 сервері үшін жеке кеңейтімдеріңізді жасауға қолдау көрсетіледі.
  • Қате туралы хабарлар қатемен байланысты мәтінмәнді көрсету үшін айтарлықтай кеңейтілді. Орнатылған теңшелетін компилятор ескертулері.
  • "--gc:arc" және "--gc:orc" қоқыс жинағыштарының өнімділігі айтарлықтай жақсарды.
  • Барлық серверлер бүтін сандар мен өзгермелі нүкте сандарын талдауға арналған кодтың дәлдігі мен өнімділігін жақсартты.
  • JS, VM және nimscript серверлерінің бұрын тек C серверімен жұмыс істеген модульдермен жақсартылған үйлесімділігі (мысалы, std/prelude модулі). C, JS және VM серверлері бар stdlib модульдерін тестілеу орнатылды.
  • Apple Silicon/M1 чипі, 32-биттік RISC-V, armv8l және CROSSOS жүйелеріне қолдау қосылды.
  • std/jsbigints, std/tempfiles және std/sysrand модульдері қосылды. Жүйеге, математикаға, random, json, jsonutils, os, typetraits, wrapnils, тізімдер және хэштер модульдеріне айтарлықтай жақсартулар жасалды.

Ақпарат көзі: opennet.ru

пікір қалдыру