I Nim-sproget er YRC blevet prĂŠsenteret — en trĂ„dsikker samler af cykliske referencer.

Andreas Rumpf (Araq), skaberen af programmeringssproget Nim, har annonceret en ny hukommelsesstyringsalgoritme YRC (udtales „Ürk”), som lĂžser et af de centrale problemer ved eksisterende mekanismer i Nim: den manglende evne til korrekt at hĂ„ndtere cykliske referencer, der krydser trĂ„degrĂŠnser.

FĂžr YRC kom, havde de foreslĂ„ede hukommelsesstyringsalgoritmer i Nim fĂžlgende begrĂŠnsninger: ARC — understĂžttede hverken multitrĂ„dede operationer eller behandling af cykler; Atomic ARC — var trĂ„dsikker, men hĂ„ndterede ikke cykliske referencer; ORC — hĂ„ndterede cykliske referencer, men kunne kun gĂžre det korrekt inde i Ă©n trĂ„d (brug af delte referencer mellem trĂ„de gav hukommelseslĂŠkager).

Det foreslÄede YRC kombinerer trÄdsikkerhed med hÄndtering af cykler mellem trÄde, ved hjÊlp af en kombineret tilgang: for akcyle data anvendes atomisk referenceoptÊlling, og for cykliske data anvendes en write barrier, der kun aktiveres ved tildeling af pejlemÊrker. I den foreslÄede implementering: samlerens kÞrsel udlÞses efter faktisk behov (ingen stop-the-world pauser); rod objekterne for RC er klart defineret og kombineres én gang (skannings af trÄdes stakke er ikke nÞdvendigt); der undgÄs multitrÄdet sletning under iteration (ingen global sweep fase); mutatorer lÊser frit data; enhver trÄd kan starte affaldsindsamleren efter behov (uden dedikeret GC-trÄd).

YRC bruger fuld information om hĂŠndelserne incRef/decRef, som traditionelle tracing garbage collectors kasserer og derefter er tvunget til at genoprette ved scanning af stakke og gennemgang af grafer. Implementeringen fylder kun 550 linjer kode og har formel verifikation af sikkerhed og fravĂŠr af deadlocks gennem specifikationen i TLA+ og beviser i Lean-vĂŠrktĂžjssĂŠttet. YRC positioneres som „nĂŠsten den sidste cykliske samler baseret pĂ„ referenceoptĂŠlling” (bogstavet Y forud for Z i alfabetet), samt som den nemmeste trĂ„dsikre affaldsindsamler — ifĂžlge skaberen krĂŠver den ikke mange af de komplekse mekanismer, der er unikke for traditionelle tracing garbage collectors.

YRC leverer det samme API som ORC, med destruktĂžrer, der udfĂžres under affaldssamling. Samleren hĂ„ndterer kun de underskaber af objekter, som trĂ„de arbejder med, uden at rĂžre ved urelaterede datastukturer (cacher, langlivede objekter) — en tilgang, der ligner en «ideel» generationsbaseret affaldssamler uden brug af generationer. Den primĂŠre ulempe er ydeevnen: YRC viser en sĂŠnking pĂ„ 1,5-2,0 gange sammenlignet med ORC i ydeevnetesten orcbench. Forfatteren mener, at dette er en acceptabel pris for fuld trĂ„d-sikker behandling af cykliske referencer.

YRC er allerede tilgÊngelig i udviklingsversionen af Nim og aktiveres med flaget «--mm:yrc». Dog har forfatteren i efterfÞlgende beskeder indrÞmmet, at den oprindelige implementering indeholdte alvorlige fejl og ikke indsamlede cykler korrekt. PÄ tidspunktet for offentliggÞrelsen er der forberedt et sÊt rettelser, der fjerner de fundamentale fejl. Forfatteren fortsÊtter med at justere heuristikkerne for indsamling og rette de resterende fejl, idet den grundlÊggende algoritme og dens formelle verifikation forbliver korrekt.

Kilde: opennet.ru

KĂžb pĂ„lidelig webhosting med DDoS-beskyttelse, VPS VDS-servere đŸ”„ KĂžb pĂ„lidelig webhosting med DDoS-beskyttelse, VPS VDS-servere | ProHoster