The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

В языке Nim представлен YRC - потокобезопасный сборщик циклических ссылок

12.02.2026 16:20 (MSK)

Андреас Румпф (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". Однако в последующих сообщениях автор признал, что первоначальная реализация содержала серьёзные ошибки и не собирала циклы корректно. На момент публикации подготовлен набор исправлений, устраняющий основные ошибки. Автор продолжает настройку эвристик сборки и исправление оставшихся ошибок, при этом базовый алгоритм и его формальная верификация остаются корректными.

  1. Главная ссылка к новости (https://forum.nim-lang.org/t/1...)
  2. OpenNews: Выпуск языка программирования Nim 2.2.6
  3. OpenNews: Представлены принципы дизайна компилятора Nimony для будущего Nim 3.0
  4. OpenNews: Для Nim 3.0 развивается новый компиляторный бэкенд на основе формата NIF
  5. OpenNews: Релиз языка программирования Nim 2.0
Автор новости: User097
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/64785-nim
Ключевые слова: nim
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (4) RSS
  • 1.1, Аноним (1), 16:41, 12/02/2026 [ответить]  
  • –3 +/
    как произносится Ürk и на каком это языке вообще?
     
     
  • 2.4, Аноним (4), 17:16, 12/02/2026 [^] [^^] [^^^] [ответить]  
  • +/
    Автор из Германии, поэтому предположу что язык немецкий.
    Буква Übermut
    Ü ü [yː] /ʏ/, /y:/

    ü в начале слова читается как "и" например Überweg → Ибервег

    Т.е по русски будет "Ирк"


     
  • 2.5, анондирован (?), 17:21, 12/02/2026 [^] [^^] [^^^] [ответить]  
  • +/
    немецкий и другие языки https://auf-deutsch.eu/ru/govorenie/nemetskoe-proiznoshenie/proiznoshenie-umla
     

  • 1.6, 12yoexpert (ok), 17:59, 12/02/2026 [ответить]  
  • +/
    > Андреас

    к логопеду

     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2026 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру