Nimis keeles on esitatud YRC — lõimeteavetohendav tsüklite ohutu kokkuvõtja.

Andreas Rumpf (Araq), Nim programmeerimiskeele looja, kuulutas välja uue mäluhalduse algoritmi YRC (hääldatakse "Ürk"), mis lahendab ühe peamise probleemi olemasolevates mehhanismides Nim'is: tsükliliste viidete õige töötlemise võimetus, mis ületavad lõngade piire.

Enne YRC-d olid Nim'i mäluhalduse algoritmides järgmised piirangud: ARC - ei toetanud ei mitme lõnga tööd ega tsüklite töötlemist; Atomic ARC - oli lõngade turvaline, kuid ei töötlenud tsükliliste viidete; ORC - töötles tsüklilisi viiteid, kuid suudab seda korralikult teha ainult ühe lõnga sees (kui jagatud viidete vahel tekkisid mälulekked).

Pakutud YRC ühendab lõngade turvalisuse ja tsüklite töötlemise teiste lõngade vahel, kasutades kombineeritud lähenemist: acükliliste andmete jaoks rakendatakse aatomaarset viidete arvestust, ja tsükliliste jaoks kirjutamisbarjääri (write barrier), mis aktiveerub ainult viidete määramisel. Pakutud teostuse kohaselt: kollektsionäär käivitatakse tegeliku vajaduse korral (ilma stop-the-world pausideta); juure objekte RC on selgelt määratletud ja ühendatud ühe korra (pole vaja lõngade steke skaneerida); välditakse mitme lõnga eemaldamist iteratsiooni ajal (pole globaalset puhastusfaasi); mutatoorid loevad andmeid vabalt; iga lõng võib käivitada prügikoguja vajadusel (ilma eraldiseisva GC lõngata).

YRC kasutab täielikku teavet sündmuste incRef/decRef kohta, mida traditsioonilised jälgivad prügikoguja (tracing GC) loobuvad ja peavad seejärel taastama stekide skaneerimise ja graafi läbimise kaudu. Teostus hõlmab vaid 550 koodiread ja omab formaalset kontrollimist turvalisuse ja surnud lukustuste puudumise osas TLA+ spetsiifikatsiooniga ja tõestamisega Lean tööriistakomplekti kaudu. YRC positsioneeritakse kui "peaaegu viimane ringide kogujate, mis põhinevad viidete arvestusel" (tähe Y eelneb Z-ile tähestikus) ja samuti kui kõige lihtsam lõngade turvaline prügikoguja - autori väitel ei vaja see palju keerulisi mehhanisme, mis on iseloomulikud traditsioonilistele jälgivatele prügikogujatele.

YRC pakub sama API-d kui ORC, hävitajate täitmisega prügikogumise ajal. Kollektsionäär käsitleb ainult neid objektide alagruppide, millega lõngad töötavad, mitte puudutamata seondumatud andmestruktuurid (vahemäcache'id, pika elueaga objektid) - lähenemine, mis on sarnane "ideaalsele" generatiivsele prügikogujale ilma põlvkondade kasutamiseta. Peamine puudus on jõudlus: YRC näitab aeglustumist 1.5-2.0 korda võrreldes ORC-iga orcbench'i jõudlustestis. Autor peab seda vastuvõetavaks hinnaks täieliku lõngade turvalise tsükliliste viidete töötlemise eest.

YRC on juba saadaval Nim'i arendusversioonis ja seda aktiveeritakse lipuga "—mm:yrc". Kuid hilisemaid sõnumeid silmas pidades tunnustas autor, et esialgne teostus sisaldas tõsiseid vigu ja ei töötlenud tsüklit õigesti. Avaldamise hetkel on valmistatud paranduste komplekt, mis kõrvaldab peamised vead. Autor jätkab kogumise heuristikate seadistamist ja ülejäänud vigade parandamist, samas kui põhi algoritm ja selle formaalne kontrollimine jäävad korrektseks.

Allikas: opennet.ru

Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid 🔥 Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster