Egwyddorion dylunio crynhoydd Nimony wedi'u cyflwyno ar gyfer Nim 3.0 sydd ar ddod

Fel rhan o ddatblygiad yr iaith raglennu Nim 3.0, mae crynhoydd Nimony newydd yn cael ei ddatblygu, gyda'r egwyddor ddylunio sylfaenol o gyflawni rhagweladwyedd amser gweithredu achos gwaethaf (WCET). Mae'r gofyniad hwn yn cael ei bennu gan y ffocws ar systemau amser real caled, lle mae ymddygiad anbenderfynol yn annerbyniol. O ganlyniad, mae pensaernΓ―aeth Nimony yn eithrio'r defnydd o grynhowyr JIT a chasglwyr sbwriel olrhain, gan y gall eu gweithrediadau gyflwyno oedi anrhagweladwy.

Er mwyn sicrhau rhagweladwyedd, mae mathau data cyntefig (cyfanrifau, nodau) yn cael eu mapio'n uniongyrchol i eiriau peiriant a beitiau'r bensaernΓ―aeth gyfatebol. Mae mathau cyfansawdd (strwythurau, gwrthrychau) yn cael eu ffurfio heb ddefnyddio anuniongyrchol, gan gael eu gosod yn uniongyrchol ar y pentwr neu y tu mewn i strwythurau data eraill. Mae'r dull hwn yn lleihau gorbenion ac yn darparu gohebiaeth fwy tryloyw rhwng y cod ffynhonnell a'r cod peiriant a gynhyrchir.

Ym maes rheoli cof awtomatig (MM), mae Nimony yn ymadael Γ’'r amrywiaeth o opsiynau sydd ar gael yn Nim 2.0, gan gynnig un modd safonol: "mm:atomicArc". Mae'r modd hwn yn seiliedig ar gyfrif cyfeiriadau gan ddefnyddio gweithrediadau atomig, wedi'i ategu gan semanteg symud a galw dinistrwyr pan fydd gwrthrych yn cael ei ddinistrio, sy'n dod Γ’'r dull yn agosach at yr arferion a fabwysiadwyd yn Rust a C++ modern.

Yr arloesedd allweddol yw'r rhaniad penodol o wrthrychau yn anghylchol a rhai o bosibl yn gylchol. Yn ddiofyn, ystyrir bod gwrthrychau'n acyclic (.acyclic), sy'n ymddygiad newydd. Mae angen anodiad penodol gyda'r pragma .cyclic ar gyfer mathau o ddata y gall eu hachosion ffurfio cyfeiriadau cylchol. Nodir bod algorithm newydd ar gyfer cydosod cyfeiriadau cylchol yn cael ei ddatblygu, ond nid oes sicrwydd y bydd yn barod i'w ddefnyddio'n ddiwydiannol ar hyn o bryd. Mantais MM sy'n seiliedig ar ddinistrwyr yw ei fod yn hawdd ei gyfansoddi: mae rheoli adnoddau sydd angen eu rhyddhau (e.e. disgrifwyr ffeiliau, socedi rhwydwaith, sianeli) wedi'i integreiddio'n naturiol trwy ddinistrwyr o'r mathau cyfatebol.

Mae'r dull o drin gwallau yn Nimony wedi cael newidiadau sylweddol. Mae awdur Nim yn mynegi anfodlonrwydd Γ’ mecanweithiau eithriad traddodiadol a'u hefelychu trwy fathau data algebraidd (mathau swm). Yn lle hynny, cynigir y cysyniad o integreiddio'r cyflwr gwall yn uniongyrchol i'r gwrthrych data ei hun. Mae enghreifftiau'n cynnwys: cynrychioli gwall mewn ffrydiau I/O trwy gyflwr arbennig, gan ddefnyddio NaN ar gyfer rhifau pwynt arnofiol, neu low(int) ar gyfer gwerthoedd cyfanrif annilys. Mewn achosion lle na all gwrthrych amgΓ‘u cyflwr gwall, awgrymir defnyddio newidyn lleol-edau ar gyfer signalau.

Fodd bynnag, cedwir mecanwaith eithriad traddodiadol Nim, ond gydag un eglurhad pwysig: rhaid anodi unrhyw weithdrefn sy'n gallu codi eithriad gyda'r pragma {.raises.} nawr. Nod y gofyniad hwn yw nodi'n benodol drawsnewidiadau rheoli posibl nad ydynt yn lleol.

Fel dewis arall neu gyflenwad, cyflwynir math newydd wedi'i restru, sef ErrorCode. Mae'r math hwn yn ddiogel o ran math ac mae angen prosesu trylwyr o bob achos posibl (yn debyg i ddatganiad achos ar gyfer enum). Mae ErrorCode wedi'i gynllunio i gael ei fapio i godau gwall safonol gwahanol systemau a phrotocolau, megis codau gwall a chodau gwall POSIX. Windows API HTTP a Chodau Statws. Y nod yw uno trin gwallau ar draws gwahanol lyfrgelloedd a galluogi cyfieithu gwallau system yn uniongyrchol (e.e., "disg yn llawn") i godau statws cyfatebol (e.e., HTTP 507) heb drosi ychwanegol. Mae defnyddio ErrorCode hefyd yn caniatΓ‘u trin a lledaenu gwallau heb ddyrannu cof ar y pentwr, sy'n hanfodol ar gyfer trin sefyllfaoedd allan o gof (OOM).

Mae Nimony yn ymdrin Γ’ sefyllfaoedd Allan o Gof (OOM) yn wahanol i'r arfer cyffredin o chwalu'r rhaglen ("marw ar OOM"). Yn lle hynny, cynigir mecanwaith i ganiatΓ‘u i'r rhaglen barhau i redeg. Mae cynwysyddion a gweithrediadau dyrannu cof na allant gyflawni cais yn galw'r trinwr oomHandler y gellir ei ddiystyru. Mae'r gweithrediad diofyn yn ysgrifennu maint y cais aflwyddiannus i newidyn lleol-edau ac yn caniatΓ‘u i'r gweithrediad barhau. Gellir gwirio'r cyflwr diffyg cof ar gyfer yr edau gyfredol drwy alw threadOutOfMem().

Gall y datblygwr ddarparu ei weithrediad oomHandler ei hun, er enghraifft ar gyfer logio neu ddamwain y rhaglen, os dyma'r ymddygiad a ffefrir. Agwedd bwysig yw trin gweithrediadau adeiladu gwrthrych cyfeirio a allai fethu oherwydd OOM. Yn Nimony, gall canlyniad gweithrediadau o'r fath (e.e. trwy adeiladwyr newydd neu debyg) fod yn ddim, ac mae'r crynhoydd yn gorfodi trin yr achos hwn mewn ffordd debyg i drin mathau o Opsiwn, gan atal gwallau dadgyfeirio pwyntydd nwl. Yng nghyd-destun gweithdrefnau sydd wedi'u hanodio Γ’ {.raises.}, gellir trosi gwerth dychwelyd dim yn awtomatig i ErrorCode.OutOfMemError.

Mae mecanwaith generig Nimony wedi gwella o'i gymharu Γ’ Nim 2.0. Y gwelliant allweddol yw bod gwirio math llawn o god generig bellach yn cael ei berfformio adeg y diffiniad, yn hytrach na dim ond pan gaiff ei greu gyda mathau concrit. Disgwylir i hyn ganiatΓ‘u i wallau gael eu canfod yn gynharach yn y broses lunio, darparu negeseuon gwall mwy addysgiadol, a gwella cefnogaeth gan IDEs, fel cwblhau cod.

Mae cysyniadau, sydd eisoes yn bresennol yn Nim, yn cadw eu rΓ΄l fel mecanwaith ar gyfer disgrifio'n statig y gofynion ar gyfer paramedrau math swyddogaethau a mathau generig. Maent yn caniatΓ‘u i un nodi'n ffurfiol pa weithrediadau neu briodweddau y mae'n rhaid i fath eu bodloni er mwyn cael ei ddefnyddio mewn cyd-destun cyffredinoledig penodol.

Nod Nimony yw uno modelau rhaglennu anghydamserol ac aml-edau o dan un adeiladwaith silio. Mae'r penderfyniad a fydd tasg a gychwynnwyd trwy spawn yn cael ei gweithredu ar yr un edau (yn anghydamserol) neu ar edau ar wahΓ’n i'r pwll (aml-edau) yn cael ei wneud gan yr amserlennwr yn ystod amser rhedeg. Mae hyn yn gosod gofynion penodol ar y dadleuon a basiwyd i silio: rhaid iddynt fod yn ddiogel i edau.

Bydd gweithrediad mewnol y model cydamseredd yn seiliedig ar barhadau, a bydd y crynhoydd yn perfformio trawsnewidiad rhaglen i'r Arddull Pasio-Parhad (CPS). Nodir bod y lluniad spawn ei hun yn cael ei weithredu nid fel nodwedd iaith adeiledig, ond fel ategyn crynhoydd.

Gwelir cyfochrogrwydd fel problem symlach na chydamseroldeb. Ar gyfer ysgrifennu cod cwbl gyfochrog, sy'n canolbwyntio ar gyfrifiadura (e.e. prosesu araeau o ddata), mae Nimony yn cynnig adeiladwaith arbennig fel dolenni cyfochrog, a ddynodir gan y "||" gweithredwr. Bydd hyn yn caniatΓ‘u gweithredu algorithmau cyfochrog heb yr angen am amrywiadau llif, a all fod yn ddefnyddiol ar gyfer cyfrifiadura gwyddonol neu dasgau rhaglennu GPU.

Mae system meta-raglennu Nim, sy'n adnabyddus am ei macros, yn esblygu yn Nimony tuag at ategion crynhoydd. Cod sy'n cael ei lunio'n gyfarwyddiadau brodorol a'i weithredu'n hwyr yng ngweithrediad y crynhoydd, ar Γ΄l y cam gwirio math, yw ategion. Mae hyn yn rhoi mynediad i ategion at wybodaeth lawn am y mathau a semanteg y cod sy'n cael ei ddadansoddi.

Mae APIs gwell a mwy cyfleus ar gyfer datblygu ategion wedi'u haddo. Dylai defnyddio'r NIF (Fformat Canolradd Nim) hefyd symleiddio gweithredu gwahanol drawsnewidiadau cod. Gellir gweithredu ategion yn raddol ac yn gyfochrog, sy'n helpu i wella perfformiad llunio.

Mathau o ategion:

  • Ategion Templedi: Ymlynwch wrth dempledi penodol a phroseswch god sy'n gysylltiedig Γ’'u galwadau.
  • Ategion Modiwl: Cymerwch fel mewnbwn yr AST (Coeden Gystrawen Haniaethol) o'r modiwl cyfan a rhaid dychwelyd y goeden wedi'i thrawsnewid. Mae'r adeiladwaith spawn yn enghraifft o weithredu trwy ategyn modiwlaidd.
  • Ategion Iterator: Yn debyg i ategion templed, ond yn cael eu cymhwyso i iteryddion.
  • Ategion Math Enwol: Gellir eu clymu i fathau data penodol, gan ddisodli mecanwaith "macros ailysgrifennu termau" Nim. Mae hyn yn caniatΓ‘u ar gyfer optimeiddio fel dileu gwrthrychau dros dro wrth gyflawni gweithrediadau matrics.

Darperir dogfennaeth Nimony ar wefan sydd wedi'i chynhyrchu'n gyfan gwbl gan AI ac wedi'i gwirio gan awdur Nim am gywirdeb.

Ffynhonnell: opennet.ru

Prynu gwesteio dibynadwy ar gyfer gwefannau sydd Γ’ diogelwch DDoS, gweinyddwyr VPS VDS πŸ”₯ Prynu cynnal gwefannau dibynadwy gyda diogelwch DDoS, gweinyddion VPS VDS | ProHoster