Ним жіпке қауіпсіз сілтеме жинаушы YRC-ті таныстырады.

Nim бағдарламалау тілінің авторы Андреас Румпф (Araq) Nim тіліндегі қолданыстағы механизмдердің негізгі мәселелерінің бірін, яғни ағын шекараларын кесіп өтетін айналмалы сілтемелерді дұрыс өңдей алмауды шешетін жаңа жадты басқару алгоритмі YRC ("Ürk" деп оқылады) туралы хабарлады.

YRC-ге дейін Nim ұсынған жадты басқару алгоритмдерінде келесі шектеулер болды: ARC көп ағынды немесе циклді өңдеуді қолдамады; Atomic ARC ағынға қауіпсіз болды, бірақ циклдік сілтемелерді өңдемеді; ORC циклдік сілтемелерді өңдеді, бірақ мұны тек бір ағын ішінде дұрыс жасай алды (ағындар арасында ортақ сілтемелерді пайдаланған кезде жадтың ағып кетуі орын алды).

Ұсынылған YRC гибридті тәсілді қолдана отырып, ағын қауіпсіздігі мен ағынаралық циклді өңдеуді біріктіреді: ациклдік деректер үшін атомдық сілтеме санау қолданылады, ал циклдік деректер үшін тек көрсеткіштерді тағайындаған кезде ғана белсендірілетін жазу кедергісі қолданылады. Ұсынылған іске асыруда: коллектор іс жүзінде қажет болған кезде іске қосылады (әлемді тоқтату кідірістері жоқ); RC түбірлік нысандары нақты анықталады және бір рет біріктіріледі (ағын стегін сканерлеу қажет емес); итерация кезінде көп ағынды жоюдан аулақ болу керек (жаһандық тазарту фазасы жоқ); мутациялаушылар деректерді оқи алады; кез келген ағын қажет болған кезде қоқыс жинағышын іске қоса алады (арнайы GC ағыны жоқ).

YRC дәстүрлі бақылау қоқыс жинаушылары (GC) тастайтын және стек сканерлеу және графиктерді шарлау арқылы қалпына келтіруі керек толық incRef/decRef оқиға ақпаратын пайдаланады. Іске асыру тек 550 жол кодты алады және TLA+ сипаттамасы және Lean құралдар жинағындағы дәлел арқылы қауіпсіздік пен тұйықталу еркіндігі үшін ресми түрде тексеріледі. YRC «сілтеме санау циклінің соңғы жинаушысы» (әліпбиде Y әрпі Z әрпінен бұрын тұрады), сондай-ақ ең қарапайым жіпке қауіпсіз қоқыс жинаушы ретінде сатылады — автордың айтуынша, ол дәстүрлі бақылау қоқыс жинаушыларына тән көптеген күрделі механизмдерді қажет етпейді.

YRC ORC сияқты API ұсынады, қоқыс жинау кезінде деструкторлар орындалады. Коллектор тек ағындар арқылы қол жеткізілген нысанның ішкі графиктерін өңдейді, байланыссыз деректер құрылымдарын (кэштер, ұзақ өмір сүретін нысандар) өзгеріссіз қалдырады — бұл генерациялық GC жоқ «идеалды» генерациялық қоқыс жинаушыға ұқсас тәсіл. Негізгі кемшілігі - өнімділік: YRC orcbench эталонында ORC-мен салыстырғанда 1.5-2.0 есе баяулауды көрсетеді. Автор мұны циклдік сілтемелерді толығымен ағынмен қауіпсіз өңдеу үшін қолайлы келісім деп санайды.

YRC Nim әзірлеу нұсқасында қазірдің өзінде қолжетімді және оны "--mm:yrc" жалаушасымен қосуға болады. Дегенмен, кейінгі жазбаларда автор бастапқы іске асыруда елеулі қателер болғанын және циклдарды дұрыс құрастырмағанын мойындады. Жариялау кезінде негізгі мәселелерді шешетін патчтар жиынтығы дайындалды. Автор құрастыру эвристикасын реттеуді және қалған қателерді түзетуді жалғастыруда, ал негізгі алгоритм және оның ресми растауы дұрыс болып қала береді.

Ақпарат көзі: opennet.ru

DDoS қорғауы бар сайттар үшін сенімді хостинг, VPS VDS серверлерін сатып алыңыз 🔥 DDoS қорғанысы, VPS VDS серверлері бар сенімді веб-сайт хостингін сатып алыңыз | ProHoster