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


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

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

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


     
     
  • 3.7, анон (?), 18:24, 12/02/2026 [^] [^^] [^^^] [ответить]  
  • +4 +/
    > Автор из Германии, поэтому предположу что язык немецкий.
    > Буква Ü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 должно произноситься как Цузе?
     
     
  • 3.38, Аноним (38), 01:04, 13/02/2026 Скрыто ботом-модератором     [к модератору]
  • +/
     

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

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

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

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

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

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

     
     
  • 3.16, Аноним (16), 19:32, 12/02/2026 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Затрудняет распространение хороших языков

    Да ничего он не затрудняет. Это просто игрушка для автора, которая находится в состоянии перманентного переписывания и никем нигде не используется.

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

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

     
  • 2.21, BrainFucker (ok), 21:35, 12/02/2026 [^] [^^] [^^^] [ответить]  
  • +3 +/
    > сам Nim какие проблемы решает?

    Решает проблему потребности в языке с нормальным высокоуровневым синтаксисом типа Python, а не упоротым как Rust, но при этом чтобы компилировалось в машинный код и результат работал на близких к сишному коду скоростях.

     
     
  • 3.22, пэпэ (?), 21:40, 12/02/2026 [^] [^^] [^^^] [ответить]  
  • –5 +/
    >проблему потребности в языке с нормальным высокоуровневым синтаксисом

    Ну как же вы достали, а. Не существует такой проблемы. Запомни, а лучше запиши. Про нее говорят только те, кто на Расте не пишет. Положить на синтаксис. Вот вообще, хоть брейнфак. Если ЯП даёт гибкую семантику - напиши DSL. Синтаксис исправить можно силами программиста. Семантику - невозможно.

     
     
  • 4.23, BrainFucker (ok), 21:44, 12/02/2026 [^] [^^] [^^^] [ответить]  
  • +/
    > напиши DSL.

    Или вместо траты времени на это использовать Nim или другое на вкус (Python, Crystal и т.д. на вкус).

     
     
  • 5.24, пэпэ (?), 21:55, 12/02/2026 [^] [^^] [^^^] [ответить]  
  • –3 +/
    Стоять, Мурзик. Тезис был про решение проблемы синтаксиса Раста. То, что эту проблему ты взял из головы легко аргументируется отсутствием потока программистов переходящих с Раста на Ним. И количеством проектов на Ним, не превышающих кажется 0.0001% с полным отсутствием динамики.

    Говоря проще - ты врешь.

     
     
  • 6.25, 12yoexpert (ok), 22:02, 12/02/2026 [^] [^^] [^^^] [ответить]  
  • +1 +/
    но ведь врёшь ты: проектов на раст ничуть не больше, чем проектов на nim, а не переходят с раста потому, что сектанты с промытыми мозгами, которых уже ничто не спасёт
     
     
  • 7.27, пэпэ (?), 22:08, 12/02/2026 [^] [^^] [^^^] [ответить]  
  • –1 +/
    >проектов на раст ничуть не больше, чем проектов на nim

    Да что ты говоришь. Сделать выборку по ЯП на житхабе по ЯП сам осилишь или тебе ссылочки дать?
    >а не переходят с раста потому, что сектанты с промытыми мозгами

    Да да. А ещё Раст был в файлах Эпштейна, календаре Майя и манускрипте Войнича. Ты в курсе, что такое нефальсифицируемая теория или вы ещё не проходили?
    >но ведь врёшь ты

    Аргументируй. Держу пари, что ты как всегда промолчишь, а потом напишешь сюда через неделю.

     
     
  • 8.28, 12yoexpert (ok), 22:10, 12/02/2026 [^] [^^] [^^^] [ответить]  
  • +/
    о да, давай посмотрим статистику на сайте конторы, которая и пролоббирует этот я... текст свёрнут, показать
     
     
  • 9.33, Аноним (16), 23:06, 12/02/2026 [^] [^^] [^^^] [ответить]  
  • +/
    А давай Ведь это те самые конторы, которые пишут твой любимы Линукс, Андроид и ... текст свёрнут, показать
     
     
  • 10.36, 12yoexpert (ok), 00:44, 13/02/2026 [^] [^^] [^^^] [ответить]  
  • +1 +/
    очередные маркетинговые нарративчики и что, твоим тиммейтам по аджайлу такое зах... текст свёрнут, показать
     
  • 3.32, Аноним (16), 23:04, 12/02/2026 [^] [^^] [^^^] [ответить]  
  • +/
    >> сам Nim какие проблемы решает?
    > Решает проблему потребности в языке с нормальным высокоуровневым синтаксисом типа Python [...] но при этом чтобы компилировалось в машинный код и результат работал на близких к сишному коду скоростях.

    D на 6 лет старше сабжа и, в отличие от него, не является вечно переписываемой игрушкой одного сумрачного гения.

     
  • 2.26, 12yoexpert (ok), 22:04, 12/02/2026 [^] [^^] [^^^] [ответить]  
  • +/
    они не наши
     

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

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

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

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

     
     
  • 2.17, funny.falcon (?), 20:49, 12/02/2026 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Когда у тебя есть формально доказанный алгоритм и его реализация хоть на каком-нибудь языке, пусть даже таком странном, как TLA+, ты по крайней мере знаешь, куда двигаться. Ты можешь сравнить свою реализацию и референсную, чтобы отыскать ошибку.

    Если же ты и алгоритм на ходу придумываешь, и пишешь сразу в конечном языке, и доказать корректность алгоритма не можешь, дела твои обстоят намного хуже.

     
     
  • 3.18, Аноним (16), 21:09, 12/02/2026 [^] [^^] [^^^] [ответить]  
  • +/
    > ты по крайней мере знаешь, куда двигаться. Ты можешь сравнить свою реализацию и референсную, чтобы отыскать ошибку

    Как показывает новость, связи абсолютно никакой. Потому что математическая верификация конкретного кода доказывает корректность работы именно этого самого кода. А левого - не доказывает. Это как бы логично.

    И сравнивать там нечего, ибо языки разные.

    > Если же ты и алгоритм на ходу придумываешь, и пишешь сразу в конечном языке, и доказать корректность алгоритма не можешь

    В этом как бы и смысл: формальная верификация относится сугубо к коду, который она верифицирует. В левом коде она не доказывает вообще ничего.

     
  • 2.30, Сладкая булочка (?), 22:56, 12/02/2026 [^] [^^] [^^^] [ответить]  
  • +/
    > Просчитался, но... где?

    Нигде, он формально верифицировал сам аглоритм.

     
     
  • 3.34, Аноним (16), 23:15, 12/02/2026 [^] [^^] [^^^] [ответить]  
  • +/
    >> > Просчитался, но... где?
    > Нигде, он формально верифицировал сам аглоритм.

    А то, что на Nim написано - это не алгоритм?

    В том-то и ирония, что верифицировать абстрактный алгоритм в вакууме на левом языке - бессмыслица. Потому что даже если ты дословно переписываешь его на другом языке, то весь вспомогательный код (как написанный вручную, так и библиотечные функции, алгоритмы, структуры данных и т.п.) тоже становятся частью алгоритма.

    В итоге автор написал на Nim алгоритм, который тупо не работал.

     
     
  • 4.37, Сладкая булочка (?), 00:48, 13/02/2026 [^] [^^] [^^^] [ответить]  
  • +/
    >>> > Просчитался, но... где?
    >> Нигде, он формально верифицировал сам аглоритм.
    > В том-то и ирония, что верифицировать абстрактный алгоритм в вакууме на левом
    > языке - бессмыслица.

    Почему? Доказывается, что он корректен на языке, на котором происходит доказательство, если я правильно понимаю. Например, у вас есть алгоритм сортировки, на вход массив чисел (для простоты целых). Тут без конкретного языка реализации можного доказать.

    > Потому что даже если ты дословно переписываешь его
    > на другом языке, то весь вспомогательный код (как написанный вручную, так
    > и библиотечные функции, алгоритмы, структуры данных и т.п.) тоже становятся частью
    > алгоритма.

    На практике, почти все на это забивают, насколько я понимаю.


     

  • 1.29, Сладкая булочка (?), 22:55, 12/02/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    > Основным недостатком является производительность: YRC показывает замедление в 1.5-2.0 раза по сравнению с ORC в тесте производительности orcbench. Автор считает это приемлемой платой за полную потокобезопасную обработку циклических ссылок.

    Он хочет оставить YRC единственным сборщиком?

     
  • 1.35, cheburnator9000 (ok), 00:40, 13/02/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Пусть займутся переносом своего языка на базу LLVM. Сейчас там только транспайлер, из-за чего нет ни толкового дебага, ни нормально интеграции с разными IDE.

    ARC, ORC, ... я это уже 6 лет от проекта слышу, никакого развития нет.

     
  • 1.39, Аноним (38), 01:07, 13/02/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    > YRC позиционируется как "почти последний сборщик циклов на основе подсчёта ссылок" (буква Y предшествует Z в алфавите), а также как самый простой потокобезопасный сборщик мусора - по утверждению автора, он не требует множества сложных механизмов, присущих традиционным трассирующим сборщикам мусора

    А насколько он хорош в реальном проде мы скоро узнаем. А нет, не узнаем, никакого реального прода на этом очередном нескучном ЯП не написано.

     
     
  • 2.40, Сладкая булочка (?), 01:19, 13/02/2026 [^] [^^] [^^^] [ответить]  
  • +/
    >> YRC позиционируется как "почти последний сборщик циклов на основе подсчёта ссылок" (буква Y предшествует Z в алфавите), а также как самый простой потокобезопасный сборщик мусора - по утверждению автора, он не требует множества сложных механизмов, присущих традиционным трассирующим сборщикам мусора
    > А насколько он хорош в реальном проде мы скоро узнаем. А нет,
    > не узнаем, никакого реального прода на этом очередном нескучном ЯП не
    > написано.

    nitter

     

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



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

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