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 լիցենզիայի ներքո:

Նոր թողարկման ուշագրավ փոփոխությունները ներառում են.

  • Ավելացրել է iterable[T] դասը՝ իտերատորների տիպի ներդրմամբ: ձևանմուշ գումար[T](a: կրկնվող[T]): T = var արդյունք. T ai-ի համար a. արդյունք += ai արդյունք պնդել գումարը(iota(3)) == 0 + 1 + 2 # կամ 'iota( 3) գումար
  • Ավելացվեց փորձնական աջակցություն «.effectsOf» ծանոթագրությունների համար՝ ընտրովիորեն կիրառելու էֆեկտներ: երբ սահմանվում է(nimHasEffectsOf): {.experimental: "strictEffects".} else: {.pragma: effectOf.} proc mysort(s: seq; cmp: proc(a, b: T): int) {.effectsOf: cmp. }
  • Առաջարկվել է ներմուծման նոր շարահյուսություն «import foo {.all.}», որը թույլ է տալիս ներմուծել ոչ միայն հանրային, այլև մասնավոր նշաններ: Օբյեկտների մասնավոր դաշտեր մուտք գործելու համար ավելացվել են std/importutils մոդուլը և privateAccess API-ը: համակարգից {.all.} որպես system2 ներմուծում nil echo system2.ThisIsSystem ներմուծում os {.all.} echo weirdTarget
  • Ավելացվեց փորձնական աջակցություն կետային օպերատորների համար, որոնք կարող են օգտագործվել դինամիկ դաշտեր իրականացնելու համար: ներմուծել std/json ձևանմուշ '.?'(a: JsonNode, b: untyped{ident}): JsonNode = a[astToStr(b)] թող j = %*{“a1”: {“a2”: 10}} պնդում j.?a1.?a2.getInt == 10
  • Լրացուցիչ պարամետրերը կարող են նշվել բլոկային արգումենտներում: կաղապար fn(a = 1, b = 2, body1, body2) = հրաժարվել fn(a = 1): bar1 do: bar2
  • Օգտատիրոջ կողմից սահմանված բառացիների աջակցությունն իրականացվել է (օրինակ՝ «-128'bignum'»): func `'big'* (համարը: cstring).
  • Կազմողն իրականացնում է «—eval:cmd» հրամանը՝ ուղղակիորեն գործարկելու Nim հրամանները հրամանի տողից, օրինակ՝ «nim —eval:»echo 1″»։
  • Աջակցություն է տրամադրել nimscript-ի հետին պլանի համար ձեր սեփական ընդլայնումներ ստեղծելու համար:
  • Սխալի հաղորդագրությունները մեծապես ընդլայնվել են՝ ցույց տալու սխալի հետ կապված համատեքստը: Իրականացված մաքսային կոմպիլյատորի նախազգուշացումներ:
  • Զգալիորեն բարելավվել է «--gc:arc» և «--gc:orc» աղբահանների աշխատանքը:
  • Բոլոր հետին մասերը բարելավել են կոդի ճշգրտությունն ու կատարումը ամբողջ թվերի և լողացող կետով թվերի վերլուծության համար:
  • JS, VM և nimscript backend-ների բարելավված համատեղելիությունը մոդուլների հետ, որոնք նախկինում աշխատում էին միայն C backend-ի հետ (օրինակ՝ std/prelude մոդուլը): Ստեղծվել է stdlib մոդուլների փորձարկում C, JS և VM backend-ներով:
  • Ավելացվել է Apple Silicon/M1 չիպի, 32-բիթանոց RISC-V, armv8l և CROSSOS համակարգերի աջակցություն:
  • Ավելացված մոդուլներ std/jsbigints, std/tempfiles և std/sysrand: Զգալի բարելավումներ են կատարվել համակարգի, math, random, json, jsonutils, os, typetraits, wrapnils, lists և hashes մոդուլներում:

Source: opennet.ru

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