The OpenNET Project / Index page

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

Выпуск языка программирования Nim 2.2.10

25.04.2026 09:30 (MSK)

Представлен релиз языка системного программирования Nim 2.2.10. Nim – статически типизированный компилируемый язык программирования с синтаксисом, вдохновлённым Python, и возможностями метапрограммирования на уровне Lisp. Язык компилируется в C, C++ и JavaScript, обеспечивая производительность на уровне C при выразительности высокоуровневых языков. Код проекта поставляется под лицензией MIT.

Возможности Nim включают систему макросов, работающих на AST во время компиляции, поддержку обобщённого программирования с концептами, множественную диспетчеризацию (multiple dispatch), детерминированное управление памятью с поддержкой нескольких стратегий (ARC/ORC, refc, маркировка-и-подметание), встроенную поддержку async/await для асинхронного программирования и FFI для простой интеграции с C/C++/JavaScript. Nim позиционируется как системный язык, подходящий для разработки от встраиваемых систем до веб-серверов, с акцентом на эффективность, безопасность памяти и удобство разработки.

Изменения в языке и компиляторе:

  • Добавлен экспериментальный флаг "--experimental:typeBoundOps", реализующий RFC #380 и повышающий надёжность работы интерфейсов "hash", "$", "==" для именованных типов при непрямых импортах. Пример:
    
      import std/hashes
      type Obj* = object
         x*, y*: int
         z*: string
    
       proc `==`*(a, b: Obj): bool = a.x == b.x and a.y == b.y
       proc hash*(a: Obj): Hash = $!(hash(a.x) &! hash(a.y))
    
       # main.nim
       {.experimental: "typeBoundOps".}
       from objs import Obj
       import std/tables
    
       var t: Table[Obj, int]
       t[Obj(x: 3, y: 4, z: "debug")] = 34
       echo t[Obj(x: 3, y: 4, z: "ignored")]  # 34
    
  • Исправлена ошибка, при которой "sizeof(T)" внутри шаблона "typedesc", вызываемого из when-выражения дженерика, приводил к ошибке компиляции.

Основные изменения, влияющие на обратную совместимость:

  • По умолчанию активирован флаг "-d:nimPreviewFloatRoundtrip". Функции "system.addFloat" и оператор "$" теперь используют алгоритм Dragonbox для генерации минимальных строковых представлений чисел с плавающей точкой с гарантиями корректного округления и обратимости преобразования. Для возврата к старому поведению доступен флаг "-d:nimLegacySprintf".
  • Параметр "default" в функции "tables.getOrDefault" переименован в "def" во избежание конфликтов с "system.default". Код, использующий именованные аргументы "getOrDefault(..., default = ...)", требует обновления.
  • При включении флага "-d:nimPreviewCheckedClose" функция "close" в модуле "std/syncio" теперь генерирует исключение при ошибках ввода-вывода.
  • Неизвестные предупреждения и подсказки компилятора теперь генерируют предупреждение "warnUnknownNotes" вместо ошибок.
  • С флагом "-d:nimPreviewAsmSemSymbol" в операторах asm/emit добавлена проверка типов для символов в обратных кавычках.
  • Блок "except:" без указания типа теперь вызывает панику при перехвате "Defect". Для обработки рекомендуется использовать "except Exception:" или "except Defect:". Для миграции предусмотрен флаг "--legacy:noPanicOnExcept".
  • С флагом "-d:nimPreviewCStringComparisons" операторы сравнения ({, >, {=, >=) для "cstring" переключены с семантики ссылок на семантику значений, аналогично "==" и "!=".
  • Модуль std/parsesql вынесен в отдельный nimble-пакет; для установки требуется "nimble install parsesql" или использование менеджера atlas.
  • С флагом "-d:nimPreviewDuplicateModuleError" импорт двух модулей с одинаковым именем становится ошибкой компиляции. Для разрешения коллизий рекомендуется использовать алиасы: "import foo as foo1".
  • Добавлена опция "--mangle:nim|cpp" для выбора стиля манглинга имён при включённой отладочной информации (по умолчанию - cpp).
  • Второй параметр функций succ, pred, inc, dec в модуле system теперь принимает тип "SomeInteger" вместо "Ordinal".
  • Операторы битовых сдвигов (shl, shr, ashr) применяют битовую маску к правому операнду в бэкендах C/C++/VM/JS.
  • Добавлено предупреждение "--warning:ImplicitRangeConversion", обнаруживающее потенциально опасные неявные преобразования к диапазонам меньшего размера (например, int -> range[0..255]), способные вызвать панику времени выполнения.

Нововведения в стандартной библиотеке:

  • В модуль "setutils" добавлены функции "symmetricDifference", оператор "-+-" и инлайн-версия "toggle" для эффективного вычисления симметрической разности битовых множеств.
  • В "strutils.multiReplace" добавлена перегрузка для замены символов из набора за один проход - полезно для санитизации строк.
  • В модуль std/files добавлены процедуры с поддержкой типа Path: getFilePermissions, setFilePermissions, tryRemoveFile, copyFile (с настраиваемым буфером и обработкой ссылок), copyFileWithPermissions, copyFileToDir. Экспортированы типы CopyFlag и FilePermission для тонкого контроля операций с файлами.
  • Модуль std/dirs получил новые процедуры: copyDir и copyDirWithPermissions для рекурсивного копирования каталогов с сохранением атрибутов.
  • В бэкендах refc, JS и VM реализована поддержка функции "system.setLenUninit" для типа "string", позволяющей изменять длину строки без инициализации новой памяти при расширении.
  • В std/parseopt добавлена поддержка нескольких режимов парсинга аргументов командной строки через перечисление CliMode: Nim (по умолчанию), а также экспериментальные Lax и Gnu.
  • В std/math оператор "^" теперь поддерживает вещественные числа в качестве показателя степени.
  • Функции min, max и их аналоги из sequtils для openArray теперь принимают пользовательскую функцию сравнения.
  • Оптимизирована реализация system.substr: при наличии используется copymem (обёртка над C memcpy).
  • Функция system.newStringUninit помечена как свободная от побочных эффектов, что позволяет использовать её с флагом "--experimental:strictFuncs".

Инструменты и документация:

  • В генератор документации добавлен флаг "--raw" для отключения рендеринга разметки в JSON-выводе.
  • Добавлен флаг "--stdinfile" для задания имени файла при запуске кода из stdin (по умолчанию - stdinfile.nim).
  • Флаг "--styleCheck:warning" позволяет трактовать нарушения стилевых проверок как предупреждения, а не ошибки.
  • В руководство добавлена документация по прагме completeStruct.

Исправлено более 30 ошибок, в том числе:

  • Ошибки работы new с ref object и генерации кода для кортежей в массивах;
  • Проблемы с обработкой static-параметров и typedesc;
  • Регрессии в системах управления памятью ORC/refc, включая выравнивание объектов и избыточные вызовы nimZeroMem;
  • Ошибки парсинга в parseopt, parsecfg и генерации кода для бэкенда JavaScript;
  • Утечки и падения при использовании замыканий, итераторов и больших объектов.


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


Обсуждение (29) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, Аноним (1), 09:53, 25/04/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/
    Лучший ЯП стал еще лучше!
     

  • 1.2, aname (ok), 09:54, 25/04/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    А это безопасный язык?
     
     
  • 2.4, A.Stahl (ok), 09:58, 25/04/2026 [^] [^^] [^^^] [ответить]  
  • +6 +/
    Ну я не слышал чтобы он на кого-то напал или взорвался. Вполне безопасный, скорее всего.
     
     
  • 3.18, небесный ученый (?), 11:13, 25/04/2026 [^] [^^] [^^^] [ответить]  
  • +1 +/
    правительство скрывает это от вас
     
  • 2.33, Аноним (32), 15:21, 25/04/2026 Скрыто ботом-модератором     [к модератору]
  • +/
     

  • 1.3, Аноним (3), 09:56, 25/04/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    >'=='*

    А более читаемо для обычных смертных нельзя было сделать? Или этот язык под ИИ заточен, а не под человеков?

     
     
  • 2.5, A.Stahl (ok), 09:59, 25/04/2026 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Мне кажется это перегрузка оператора ==. Так что кавычки тут вполне ок.
     
  • 2.8, Аноним (8), 10:10, 25/04/2026 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Человекам не мешало бы понимать, что представления о правильности синтаксиса, усвоенные из одного языка, бессмысленно тащить в другой язык.
     
     
  • 3.10, Аноним (10), 10:16, 25/04/2026 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Не о правильности, а о читаемости речь.
     
  • 2.13, Аноним (13), 10:20, 25/04/2026 [^] [^^] [^^^] [ответить]  
  • +/
    ИИ для простых людей уже мертво. Посмотри какие нынче цены. С 20 долларами ты уже особо ничего не накодишь.
     
  • 2.15, Аноним (15), 10:24, 25/04/2026 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Нужно больше закорючек.
     

  • 1.6, Аноним (6), 10:04, 25/04/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Чем он лучше TypeScript?
     
     
  • 2.9, Аноним (8), 10:11, 25/04/2026 [^] [^^] [^^^] [ответить]  
  • +5 +/
    Тем, что он не TypeScript.
     
  • 2.12, Аноним (13), 10:19, 25/04/2026 [^] [^^] [^^^] [ответить]  
  • +/
    Ты бы еще с турбопаскалем сравнил
     
     
  • 3.16, анонимс (?), 10:28, 25/04/2026 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Паскаль суперский. В одном ряду с C и в чём-то наподобие модулей превосходит его.
     
     
  • 4.21, Аноним (21), 11:38, 25/04/2026 [^] [^^] [^^^] [ответить]  
  • +/
    > В одном ряду с C и в чём-то наподобие модулей превосходит его.

    В плане модулей он и C++ превосходит.

     
     
  • 5.26, Смузихлеб забывший пароль (?), 13:16, 25/04/2026 [^] [^^] [^^^] [ответить]  
  • +1 +/
    В плане осей колёс телега превосходит грузовик. Точнее, в плане смазывания их дёгтем
     

  • 1.17, Аноним (17), 11:02, 25/04/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Эх, если бы тот же python изначально запилили таким образом, тогда не было таких проблем с производительностью. Но как говорится, задним числом мы все умные. А так, по сути неплохая была бы замена-альтергатива для python, но увы сообщество очень небольшое.

    Поглядим, что там будет дальше, кроме того непонятно что там будет в nim 3 со стратегией управления памятью, или добавят что-то новое, или что-то просто выкинут. В общем в продакшен с таким подходом он явно никогда не попадет.

     
     
  • 2.20, Аноним (20), 11:33, 25/04/2026 [^] [^^] [^^^] [ответить]  
  • +/
    >В общем в продакшен с таким подходом он явно никогда не попадет.

    Т.е. <<продакшн>> для тебя это что-то устаревшее и неизменное?

     
  • 2.22, Аноним (21), 11:43, 25/04/2026 [^] [^^] [^^^] [ответить]  
  • +2 +/
    > Эх, если бы тот же python изначально запилили таким образом, тогда не было таких проблем с производительностью.

    Каким "таким" образом? Игрушечной поделкой без конкретной цели существования, где в каждом минорном релизе ломается обратная совметимость (вон список в новости) и каждые N лет половина синтаксиса переизобретается с нуля? Нет уж, спасибо...

    А жаловаться про якобы "проблемы с производительностью" в СКРИПТОВОМ языке - это вообще специальная олимпиада.

     
  • 2.30, Гуманоид (?), 14:40, 25/04/2026 [^] [^^] [^^^] [ответить]  
  • +/
    Производительность программы обратно пропорциональна производительности человека при ее создании.
     

  • 1.19, Аноним (20), 11:31, 25/04/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    >документация по прагме completeStruct.

    <<Прагма>> чо за модное слово?

     
     
  • 2.25, анм (?), 13:05, 25/04/2026 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Игорь такая вышла, прагмата
    Вот и отсылки пихают куда ни попадя
     
  • 2.28, Axonic (ok), 13:53, 25/04/2026 Скрыто ботом-модератором     [к модератору]
  • +/
     
  • 2.29, Axonic (ok), 13:55, 25/04/2026 Скрыто ботом-модератором     [к модератору]
  • +/
     

  • 1.23, Аноним (23), 12:17, 25/04/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Нужна нужна "родная" графика "из коробки", как в Thinter в Pynhon. Чтобы без танцев с бубном при подключении сторонних графических инструментов. Тогда может выстрелить. Ну у автора амбиции, хочет влезть в нишу языка системного программирования. А туда уже Rust прёт как танк. Да и Си уже там, совершенствуется и покидать её не собирается.
     
     
  • 2.27, Axonic (ok), 13:50, 25/04/2026 Скрыто ботом-модератором     [к модератору]
  • +/
     
  • 2.31, Аноним (32), 15:19, 25/04/2026 [^] [^^] [^^^] [ответить]  
  • +/
    >Нужна нужна "родная" графика "из коробки"

    Наркоман. В приличные языки графику из коробки не суют. Попроси разработчиков Qt и GTK чтобы написали привязку к языку Nim.

     

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



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

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