Π’ языкС Nim прСдставлСн YRC — потокобСзопасный сборщик цикличСских ссылок

АндрСас Π ΡƒΠΌΠΏΡ„ (Araq), Π°Π²Ρ‚ΠΎΡ€ языка программирования Nim, анонсировал Π½ΠΎΠ²Ρ‹ΠΉ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ управлСния ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ YRC (произносится «ÜrkΒ»), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ€Π΅ΡˆΠ°Π΅Ρ‚ ΠΎΠ΄Π½Ρƒ ΠΈΠ· ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΎΠ² Π² Nim: Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠΉ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ цикличСских ссылок, ΠΏΠ΅Ρ€Π΅ΡΠ΅ΠΊΠ°ΡŽΡ‰ΠΈΡ… Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ².

Π”ΠΎ появлСния YRC Π² ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π²ΡˆΠΈΡ…ΡΡ Π² Nim Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°Ρ… управлСния ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ, имСлись ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ограничСния: ARC β€” Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π» Π½ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ, Π½ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ Ρ†ΠΈΠΊΠ»ΠΎΠ²; Atomic ARC β€” Π±Ρ‹Π» потокобСзопасСн, Π½ΠΎ Π½Π΅ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π» цикличСскиС ссылки; ORC β€” ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π» цикличСскиС ссылки, Π½ΠΎ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ ΠΌΠΎΠ³ Π΄Π΅Π»Π°Ρ‚ΡŒ это Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ° (ΠΏΡ€ΠΈ использовании ΠΎΠ±Ρ‰ΠΈΡ… ссылок ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π»ΠΈ ΡƒΡ‚Π΅Ρ‡ΠΊΠΈ памяти).

ΠŸΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΉ YRC сочСтаСт ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ Ρ†ΠΈΠΊΠ»ΠΎΠ² ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ, Π·Π° счёт использования ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π°: для ацикличСских Π΄Π°Π½Π½Ρ‹Ρ… примСняСтся Π°Ρ‚ΠΎΠΌΠ°Ρ€Π½Ρ‹ΠΉ подсчёт ссылок, Π° для цикличСских β€” Π±Π°Ρ€ΡŒΠ΅Ρ€ записи (write barrier), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ активируСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΈ присваивании ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ. Π’ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠΉ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ: ΠΊΠΎΠ»Π»Π΅ΠΊΡ‚ΠΎΡ€ запускаСтся ΠΏΠΎ фактичСской нСобходимости (отсутствиС stop-the-world ΠΏΠ°ΡƒΠ·); ΠΊΠΎΡ€Π½Π΅Π²Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ RC явно ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ ΠΈ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΡŽΡ‚ΡΡ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π· (Π½Π΅ трСбуСтся сканированиС стСков ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²); избСгаСтся ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠ΅ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ Π²ΠΎ врСмя ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ (Π½Π΅Ρ‚ глобальной Ρ„Π°Π·Ρ‹ sweep); ΠΌΡƒΡ‚Π°Ρ‚ΠΎΡ€Ρ‹ свободно Ρ‡ΠΈΡ‚Π°ΡŽΡ‚ Π΄Π°Π½Π½Ρ‹Π΅; любой ΠΏΠΎΡ‚ΠΎΠΊ ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ сборщик мусора ΠΏΡ€ΠΈ нСобходимости (Π±Π΅Π· Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ GC-ΠΏΠΎΡ‚ΠΎΠΊΠ°).

YRC ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΏΠΎΠ»Π½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ событиях incRef/decRef, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹Π΅ Ρ‚Ρ€Π°ΡΡΠΈΡ€ΡƒΡŽΡ‰ΠΈΠ΅ сборщики мусора (tracing GC) ΠΎΡ‚Π±Ρ€Π°ΡΡ‹Π²Π°ΡŽΡ‚ ΠΈ Π·Π°Ρ‚Π΅ΠΌ Π²Ρ‹Π½ΡƒΠΆΠ΄Π΅Π½Ρ‹ Π²ΠΎΡΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ Ρ‡Π΅Ρ€Π΅Π· сканированиС стСков ΠΈ ΠΎΠ±Ρ…ΠΎΠ΄ Π³Ρ€Π°Ρ„Π°. РСализация Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ всСго 550 строк ΠΊΠΎΠ΄Π° ΠΈ ΠΈΠΌΠ΅Π΅Ρ‚ Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΡƒΡŽ Π²Π΅Ρ€ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡŽ бСзопасности ΠΈ отсутствия Π²Π·Π°ΠΈΠΌΠ½Ρ‹Ρ… Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΎΠΊ Ρ‡Π΅Ρ€Π΅Π· ΡΠΏΠ΅Ρ†ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡŽ Π½Π° языкС TLA+ ΠΈ Π΄ΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒΡΡ‚Π²ΠΎ Π² инструмСнтарии Lean. YRC позиционируСтся ΠΊΠ°ΠΊ Β«ΠΏΠΎΡ‡Ρ‚ΠΈ послСдний сборщик Ρ†ΠΈΠΊΠ»ΠΎΠ² Π½Π° основС подсчёта ссылок» (Π±ΡƒΠΊΠ²Π° Y ΠΏΡ€Π΅Π΄ΡˆΠ΅ΡΡ‚Π²ΡƒΠ΅Ρ‚ Z Π² Π°Π»Ρ„Π°Π²ΠΈΡ‚Π΅), Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΊΠ°ΠΊ самый простой потокобСзопасный сборщик мусора β€” ΠΏΠΎ ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΡŽ Π°Π²Ρ‚ΠΎΡ€Π°, ΠΎΠ½ Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ мноТСства слоТных ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΎΠ², присущих Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹ΠΌ Ρ‚Ρ€Π°ΡΡΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΌ сборщикам мусора.

YRC прСдоставляСт Ρ‚ΠΎΡ‚ ΠΆΠ΅ API, Ρ‡Ρ‚ΠΎ ΠΈ ORC, с Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ дСструкторов Π²ΠΎ врСмя сборки мусора. Π‘Π±ΠΎΡ€Ρ‰ΠΈΠΊ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π΅ ΠΏΠΎΠ΄Π³Ρ€Π°Ρ„Ρ‹ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ ΠΏΠΎΡ‚ΠΎΠΊΠΈ, Π½Π΅ трогая нСсвязанныС структуры Π΄Π°Π½Π½Ρ‹Ρ… (кэши, Π΄ΠΎΠ»Π³ΠΎΠΆΠΈΠ²ΡƒΡ‰ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹) β€” ΠΏΠΎΠ΄Ρ…ΠΎΠ΄, Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹ΠΉ Β«ΠΈΠ΄Π΅Π°Π»ΡŒΠ½ΠΎΠΌΡƒΒ» Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΌΡƒ сборщику мусора Π±Π΅Π· использования ΠΏΠΎΠΊΠΎΠ»Π΅Π½ΠΈΠΉ. ΠžΡΠ½ΠΎΠ²Π½Ρ‹ΠΌ нСдостатком являСтся ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ: YRC ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π·Π°ΠΌΠ΅Π΄Π»Π΅Π½ΠΈΠ΅ Π² 1.5-2.0 Ρ€Π°Π·Π° ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с ORC Π² тСстС ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ orcbench. Автор считаСт это ΠΏΡ€ΠΈΠ΅ΠΌΠ»Π΅ΠΌΠΎΠΉ ΠΏΠ»Π°Ρ‚ΠΎΠΉ Π·Π° ΠΏΠΎΠ»Π½ΡƒΡŽ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΡƒΡŽ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ цикличСских ссылок.

YRC ΡƒΠΆΠ΅ доступСн Π² development-вСрсии Nim ΠΈ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Ρ„Π»Π°Π³ΠΎΠΌ Β«β€”mm:yrcΒ». Однако Π² ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… сообщСниях Π°Π²Ρ‚ΠΎΡ€ ΠΏΡ€ΠΈΠ·Π½Π°Π», Ρ‡Ρ‚ΠΎ ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½Π°Ρ рСализация содСрТала ΡΠ΅Ρ€ΡŒΡ‘Π·Π½Ρ‹Π΅ ошибки ΠΈ Π½Π΅ собирала Ρ†ΠΈΠΊΠ»Ρ‹ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ. На ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²Π»Π΅Π½ Π½Π°Π±ΠΎΡ€ исправлСний, ΡƒΡΡ‚Ρ€Π°Π½ΡΡŽΡ‰ΠΈΠΉ основныС ошибки. Автор ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ‚ настройку эвристик сборки ΠΈ исправлСниС ΠΎΡΡ‚Π°Π²ΡˆΠΈΡ…ΡΡ ошибок, ΠΏΡ€ΠΈ этом Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ ΠΈ Π΅Π³ΠΎ Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Π°Ρ вСрификация ΠΎΡΡ‚Π°ΡŽΡ‚ΡΡ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹ΠΌΠΈ.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: opennet.ru

Π°Π²Π°Ρ‚Π°Ρ€ Π°Π²Ρ‚ΠΎΡ€Π°
Erik Peterson Π Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€, ΠœΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€
A ProHoster specialist with over seven years of experience in hosting, network infrastructure, and internet security. I participate in the development and maintenance of server solutions, VPN services, and client platforms. I specialize in stability, data protection, and service optimization for clients. I regularly monitor updates in industry standards and best practices.

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ