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 обязательно


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

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

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


     
     
  • 3.7, анон (?), 18:24, 12/02/2026 [^] [^^] [^^^] [ответить]  
  • +/
    > Автор из Германии, поэтому предположу что язык немецкий.
    > Буква Übermut
    > Ü ü  [yː] /ʏ/, /y:/
    > ü в начале слова читается как "и" например Überweg → Ибервег
    > Т.е по русски будет "Ирк"

    Т.е. или ты не умеешь в IPA или/и это очередной, без раздумий скопипащенный, бред чатгопоты.

    Читается примерно как ю в "любоффь". Это к слову о Ü.
    Точно то же тебе расскажет о [yː] https://en.wikipedia.org/wiki/Close_front_rounded_vowel там даже аудиофайл есть 🙄

     
  • 3.12, Аноним (12), 19:17, 12/02/2026 [^] [^^] [^^^] [ответить]  
  • +/
    > ü в начале слова читается как "и"

    Нет, конечно.

    https://en.wiktionary.org/wiki/File:De-über-.ogg
    https://en.wiktionary.org/wiki/File:De-über2.ogg
    https://en.wiktionary.org/wiki/File:De-über3.ogg

    Многие топонимы и имена собственные закрепились с кривой транслитерацией, так уж исторически сложилось. Не надо пытаться к ним аппелировать. Есть IPA, им и надо пользоваться.

    Говорящий пример: https://ru.wikipedia.org/wiki/Жужуй

     
  • 2.5, анондирован (?), 17:21, 12/02/2026 [^] [^^] [^^^] [ответить]  
  • +/
    немецкий и другие языки https://auf-deutsch.eu/ru/govorenie/nemetskoe-proiznoshenie/proiznoshenie-umla
     
  • 2.9, kusb 129412 (?), 18:49, 12/02/2026 [^] [^^] [^^^] [ответить]  
  • +/
    А Suse должно произноситься как Цузе?
     

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

    к логопеду

     
  • 1.8, Аноним (8), 18:29, 12/02/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    >который решает одну из ключевых проблем существующих механизмов в Nim

    сам Nim какие проблемы решает?

    > Однако в последующих сообщениях автор признал, что первоначальная реализация содержала серьёзные ошибки и не собирала циклы корректно. На момент публикации подготовлен набор исправлений, устраняющий основные ошибки. Автор продолжает настройку эвристик сборки и исправление оставшихся ошибок, при этом базовый алгоритм и его формальная верификация остаются корректными.

    что-то тут не так :)

     
     
  • 2.10, Аноним (10), 18:55, 12/02/2026 [^] [^^] [^^^] [ответить]  
  • +2 +/
    > сам Nim какие проблемы решает?

    Удовлетворение NIH-синдрома. Вполне себе проблема и вполне себе решение.

     
  • 2.14, Аноним (14), 19:24, 12/02/2026 [^] [^^] [^^^] [ответить]  
  • +/
    >сам Nim какие проблемы решает?

    Затрудняет распространение хороших языков. Здесь и управляющие отступы с питоноподобным синтаксисом, и империативный подход с разделением на инструкции и выражения, и сишная модель управления памятью с утечками и порчей памяти, и отсутствие компиляции, а только трансляция в си, что затрудняет отладку, и куча эпических ошибок в реализации практически всего, типа новой системы управления памятью, в которой сразу же после релиза обнаружена куча ошибок.

     
     
  • 3.16, Аноним (16), 19:32, 12/02/2026 Скрыто ботом-модератором     [к модератору]
  • +/
     
  • 2.15, Аноним (16), 19:28, 12/02/2026 [^] [^^] [^^^] [ответить]  
  • +/
    >> Однако в последующих сообщениях автор признал, что первоначальная реализация содержала серьёзные ошибки и не собирала циклы корректно. На момент публикации подготовлен набор исправлений, устраняющий основные ошибки. Автор продолжает настройку эвристик сборки и исправление оставшихся ошибок, при этом базовый алгоритм и его формальная верификация остаются корректными.
    > что-то тут не так :)

    Да все так. Он же код TLA+ верифицировал, лол, а не его реализацию на NIM. Теперь, наверное, искренне недоумевает, где же он просчитался...

     

  • 1.11, Аноним (11), 18:58, 12/02/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    > YRC

    Наши ребята из Яндекса написали.

     
  • 1.13, Аноним (16), 19:21, 12/02/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    > Реализация [...] имеет формальную верификацию безопасности и отсутствия взаимных блокировок через спецификацию на языке TLA+ и доказательство в инструментарии Lean
    > первоначальная реализация [...] не собирала циклы корректно.
    > Автор продолжает настройку эвристик сборки
    > базовый алгоритм и его формальная верификация остаются корректными.

    Пхахаха! 😂 Вроде же до 1 апреля далеко еще?

    * Делаем формальную верификацию алгоритма, написанного на абсолютно левом языке.
    * Пишем код теперь уже на Nim, который к этой верификации и ее гарантиям ВНЕЗАПНО не имеет никакого отношения.
    * Искренне недоумеваем, почему это "базовый алгоритм и его формальная верификация остаются корректными", а вот наш "не базовый" алгоритм на Nim без формальной верификации тупо "не собирает циклы корректно".

    Просчитался, но... где?

     

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



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

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