Andreas Rumpf (Araq), autori i gjuhĂ«s programuese Nim, njoftoi njĂ« algoritĂ«m tĂ« ri pĂ«r menaxhimin e memories YRC (i shqiptuar «Ărk»), i cili zgjidh njĂ« nga problemet kryesore tĂ« mekanizmave ekzistues nĂ« Nim: paaftĂ«sinĂ« pĂ«r tĂ« trajtuar nĂ« mĂ«nyrĂ« tĂ« saktĂ« lidhjet ciklike qĂ« kalojnĂ« kufijtĂ« e flukseve.
Para shfaqjes së YRC në algoritmet e propozuara për menaxhimin e memories në Nim, kishte këto kufizime: ARC - nuk mbështeste as shumëflokshmërinë, as trajtimin e cikleve; Atomic ARC - ishte i sigurt për flukse, por nuk trajtonte lidhjet ciklike; ORC - trajtonte lidhjet ciklike, por mund ta bënte këtë në mënyrë të saktë vetëm brenda një fluksi (në përdorimin e lidhjeve të zakonshme midis flukseve shfaqeshin humbje memories).
YRC e propozuar kombinon sigurinë për flukse dhe trajtimin e cikleve midis flukseve, përmes përdorimit të një qasjeje të kombinuar: për të dhënat e paçikluara aplikohet numërimi atomik i lidhjeve, ndërsa për ato ciklike - barrierë shkrimi (write barrier), e cila aktivizohet vetëm në rastin e dhënies së treguesve. Në implementimin e propozuar: kolektori aktivizohet sipas nevojës reale (pa ndalime stop-the-world); objektet rrënjësore RC janë të përcaktuara qartë dhe bashkohen një herë (nuk kërkohet skanimi i stekëve të flukseve); shmanget eliminimi shumëflokësh gjatë iteraimeve (nuk ka fazë globale pastrimi); mutatoret mund të lexojnë të dhënat lirisht; çdo fluks mund të aktivizojë mbledhësin e mbeturinave sipas nevojës (pa një fluks të dedikuar GC).
YRC përdor informacionin e plotë për ngjarjet incRef/decRef, që mbledhësit e mbeturinave të zakonshëm që ndjekin (tracing GC) e shpërfillin dhe më pas detyrohen ta rikuperojnë përmes skanimit të stekëve dhe kalimit të grafit. Implementimi zë vetëm 550 rreshta kodi dhe ka verificimin formal të sigurisë dhe mungesës së bllokimeve të ndërsjella përmes specifikimit në gjuhën TLA+ dhe provës në mjetet Lean. YRC pozicionohet si "gati mbledhësi përfundimtar i cikleve bazuar në numërimin e lidhjeve" (leta Y i paraprin Z në alfabet), si dhe si mbledhësi më i thjeshtë i mbeturinave të sigurt për flukse - sipas autorit, ai nuk kërkon shumë mekanizma të komplikuara që janë të pranishme në mbledhësit tradicionalë të ndjekur.
YRC ofron të njëjtin API si ORC, me ekzekutimin e destruktorëve gjatë mbledhjes së mbeturinave. Mbledhësi trajton vetëm ato nëngrafika objektesh me të cilat punojnë fluksit, duke mos prekur strukturat e dhënash që nuk janë të lidhura (cache, objekte me jetëgjatësi të gjatë) - një qasje e ngjashme me "mbledhësin ideal" të mbeturinave gjeneruese pa përdorimin e gjeneratave. Disavantazhi kryesor është performanca: YRC tregon një ngadalësim prej 1.5-2.0 herë në krahasim me ORC në testin e performancës orcbench. Autori e konsideron këtë një çmim të pranueshëm për trajtimin e plotë të sigurt të lidhjeve ciklike.
YRC tani Ă«shtĂ« nĂ« versionin zhvillimor tĂ« Nim dhe aktivizohet me flamurin "âmm:yrc". MegjithatĂ«, nĂ« mesazhet e mĂ«vonshme, autori pranoi se implementimi fillestar kishte gabime tĂ« rĂ«ndĂ«sishme dhe nuk trajtonte ciklet nĂ« mĂ«nyrĂ« tĂ« saktĂ«. NĂ« momentin e publikimit Ă«shtĂ« pĂ«rgatitur njĂ« grumbull rregullimesh qĂ« eliminon gabimet kryesore. Autori vazhdon tĂ« rregullojĂ« heurisht e mbledhjes dhe tĂ« rregullojĂ« gabimet e mbetura, ndĂ«rsa algoritmi thelbĂ«sor dhe verifikimi i tij formal mbeten tĂ« sakta.
Burimi: opennet.ru
