Профиль: Аноним (вход | регистрация) неRU opennet.me  
OpenNET

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

Релиз языка программирования Nim 2.4.0

29.10.2026 16:26 (MSK)

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

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

Основные изменения:

  • Реализован режим оптимизации коротких строк (SSO, Small-String Optimization), включаемый через опцию "--strings:sso" и приводящий к хранению небольших строк непосредственно в самом объекте, без отдельного выделения памяти в куче. Для эффективного использования этого режима предложен новый низкоуровневый API, в котором вместо синтаксиса "addr myString[offset]" предложены раздельные операции для чтения и записи (readRawData, readRawDataStable, beginStore и endStore). Например, при использовании нового API операции "addr s[i]" и "unsafeAddr s[i]" заменяются на вызов "readRawData(s, i)", а связка "setLen" и "addr s[oldLen]" заменяется на "beginStore(s, newLen, start)" с последующим "endStore(s)".
    
        # До: установка длины и копирование по адресу элемента строки
        result.setLen newLen
        copyMem(addr result[oldLen], buf, buflen)
    
        # После: beginStore устанавливает длину, обеспечивает уникальное
        # владение и возвращает указатель для записи; endStore завершает запись
        copyMem(beginStore(result, newLen, oldLen), buf, buflen)
        endStore(result)
    
  • Реализована поддержка параллельной и инкрементальной сборки, активируемой через опцию "--ic:on". Распараллеливание реализовано на основе многопроцессности, а не многопоточности, поэтому макросы, использующие глобальные переменные ".compileTime", могут потребовать доработки для ускорения сборки. Ускорение наблюдается не только при повторных пересборках, но и при первой сборке за счёт распараллеливания. Например, сборка компилятора Nim на машине с 16 физическими ядрами при использовании опции "--ic:on" сократилась с 31 до 25 секунд.
  • Добавлен новый алгоритм управления памятью YRC, активируемый опцией "--mm:yrc" и обеспечивающий корректную обработку циклических ссылок, пересекающих границы потоков. YRC предоставляет тот же API, что и ORC, но помимо возможностей последнего обеспечивает потокобезопасность. Для ациклических данных применяется атомарный подсчёт ссылок, а для циклических - барьер записи (write barrier), который активируется только при присваивании указателей. При этом в тесте orcbench YRC примерно в два раза медленнее ORC и потребляет вдвое больше памяти.
  • Поддержка типов-сумм (sum types), при объявлении которых применяется сопоставление с образцом.
    
        type
          Node = ref object
            case
            of IntLit: intVal: int
            of FloatLit: floatVal: float
            of StringLit: strVal: string
            of AddOp, SubOp:
              leftOp, rightOp: Node
            of IfStmt:
              condition, thenPart, elsePart: Node
    

    Имя ветви служит конструктором с именованными аргументами:

    
        let n = AddOp(leftOp: IntLit(intVal: 40), rightOp: IntLit(intVal: 2))
    

    Поддерживаются обобщённые типы-сумм (generic), в которых конкретный экземпляр выводится из значений полей или из ожидаемого типа:

    
        type
          Opt[T] = object
            case
            of None: discard
            of Some: val: T
    
        let a = Some(val: "abc")      # Opt[string]
        let b: Opt[int] = None()      # ожидаемый тип выбирает экземпляр
    

    Доступ к полям осуществляется исключительно через сопоставление с образцом, поэтому обращение к полю чужой ветви (FieldDefect) невозможно. Поля привязываются к именам, следующим за именем ветви:

    
        proc eval(n: Node): int =
          case n
          of IntLit(v): v                    # v привязано к intVal
          of AddOp(a, b): eval(a) + eval(b)  # a, b — leftOp, rightOp
          of SubOp(a, b): eval(a) - eval(b)
          else: raiseAssert "not an arithmetic expression"
    
  • Добавлен экспериментальный модификатор "owned" для управления памятью на основе явного владения без использования сборщика мусора, активируемый при указании опции "--experimental:ownedRefs". Типы "owned ref T" и замыкания "owned" гарантируют наличие единственного владельца у объекта. Подобные объекты нельзя копировать и можно только перемещать, а при выходе из области видимости они автоматически уничтожаются.
  • Добавлена прагма "{.cyclic.}" для обработки циклического импорта модулей, ссылающихся друг на друга, которая позволяет связывать модули напрямую без выноса типов в отдельный файл и избавляет от необходимости подбирать строгий порядок объявлений в коде.


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


Обсуждение (82) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.2, Инопланетянин (?), 16:39, 29/10/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +4 +/–
    Какой Ним, какой Раст? На Гусе писать надо https://github.com/aardappel/goose Он быстрее плюсов и раста.
     
     
  • 2.4, Аноним (4), 16:44, 29/10/2026 [^] [^^] [^^^] [ответить]  
  • –2 +/–
    Додо, только удалять элементы из контейнеров не умеет.
     
     
  • 3.10, Инопланетянин (?), 17:08, 29/10/2026 [^] [^^] [^^^] [ответить]  
  • +3 +/–
    Умеет вроде, но с конца. Вообще надо походы менять.

    > Это фундаментальное архитектурное решение автора языка, Воутера ван Оортмерссена. Так как Goose полностью отказывается от динамической кучи (heap), он заставляет разработчика проектировать структуры данных как монолитные последовательные плоские блоки памяти.

     
     
  • 4.15, Аноним (15), 17:43, 29/10/2026 [^] [^^] [^^^] [ответить]  
  • +2 +/–
    Ну то есть, не подходит для хоть чего-то, где требуется какая-либо обработка данных, что 99% программ
     
     
  • 5.22, Инопланетянин (?), 18:36, 29/10/2026 [^] [^^] [^^^] [ответить]  
  • +/–
    > Ну то есть, не подходит для хоть чего-то, где требуется какая-либо обработка
    > данных, что 99% программ

    Примеры посмотрел?

     
  • 5.48, Аноним (48), 02:02, 30/10/2026 [^] [^^] [^^^] [ответить]  
  • +/–
    Какая либо обработка это в смысле "и так сойдёт"?
     
  • 4.38, Аноним (38), 23:21, 29/10/2026 [^] [^^] [^^^] [ответить]  
  • –1 +/–
    > Goose полностью отказывается от динамической кучи (heap), он заставляет разработчика проектировать структуры данных как монолитные последовательные плоские блоки памяти

    Это подходит только для микроконтроллеров.

     
     
  • 5.44, Инопланетянин (?), 00:42, 30/10/2026 [^] [^^] [^^^] [ответить]  
  • +1 +/–
    >> Goose полностью отказывается от динамической кучи (heap), он заставляет разработчика проектировать структуры данных как монолитные последовательные плоские блоки памяти
    > Это подходит только для микроконтроллеров.

    Автор сейчас в геймдеве работает. В примерах разное есть.

     
  • 3.47, Аноним (48), 02:00, 30/10/2026 [^] [^^] [^^^] [ответить]  
  • +2 +/–
    А зачем тебе удалять элементы из контейнеров?
     
     
  • 4.68, Аноним (68), 15:43, 30/10/2026 [^] [^^] [^^^] [ответить]  
  • –1 +/–
    Ненужны стали, зря место занимают?
     
     
  • 5.71, Аноним (71), 16:35, 30/10/2026 [^] [^^] [^^^] [ответить]  
  • –2 +/–
    Делать upset контейнеры, это признак скудоумия и моветон. Блейзин фаст библиотеки и продукты так не работают с данными.
     
  • 4.91, Кот (??), 00:17, 31/10/2026 [^] [^^] [^^^] [ответить]  
  • +/–
    Потому что реальная жизнь такая. Нужно вставлять и удалять элементы.
     
  • 2.6, name (??), 16:50, 29/10/2026 [^] [^^] [^^^] [ответить]  
  • +/–
    1. Уберите var/let/fn
    2. Напишите на этом хотя бы ядро ОС
    Тогда мы вам проверим.
     
     
  • 3.50, Аноним (48), 02:05, 30/10/2026 [^] [^^] [^^^] [ответить]  
  • +1 +/–
    Микроядро написать, как нефиг делать, там такой же принцип передачи данных, как и в IPC
     
  • 2.32, Anonim (??), 20:48, 29/10/2026 [^] [^^] [^^^] [ответить]  
  • +1 +/–
    Быстрее аж на минус 50%, дада
     
  • 2.49, Аноним (48), 02:03, 30/10/2026 [^] [^^] [^^^] [ответить]  
  • –1 +/–
    Вангую, через пару лет вытеснит и C/C++ и Rust.
     
     
  • 3.54, Anonimous (?), 05:23, 30/10/2026 [^] [^^] [^^^] [ответить]  
  • +1 +/–
    Пара лет, это очень мало.
     
     
  • 4.56, Аноним (48), 09:03, 30/10/2026 [^] [^^] [^^^] [ответить]  
  • +/–
    С текущими ИИ и аналогичным расту синтаксису переписать все можно гораздо быстрее
     
  • 4.60, Пыщь (?), 10:16, 30/10/2026 [^] [^^] [^^^] [ответить]  
  • +1 +/–
    Если пенделировать всеми доступными ресурсами как ржавчину, то и не такое полетит на сверхзвуке.
     
     
  • 5.62, Аноним (48), 10:45, 30/10/2026 [^] [^^] [^^^] [ответить]  
  • +/–
    Главное не подпускать к проекту любителей поупражняться в программировании
     
  • 2.53, Anonimous (?), 05:23, 30/10/2026 [^] [^^] [^^^] [ответить]  
  • –1 +/–
    Так язык выбирают не из за скорости. К гусю претензий нет.
     
     
  • 3.57, Аноним (48), 09:06, 30/10/2026 [^] [^^] [^^^] [ответить]  
  • –1 +/–
    Там концепция владения другая. И все сильно упрощено, по сравнению с C++/Rust. По сути это грамотный C.
     
     
  • 4.67, Аноним (68), 15:41, 30/10/2026 [^] [^^] [^^^] [ответить]  
  • +1 +/–
    Претендентов стать грамотнвми сями уже полно: C3, Zig, Hare
     
     
  • 5.72, Аноним (71), 16:37, 30/10/2026 [^] [^^] [^^^] [ответить]  
  • +1 +/–
    Zig смог только в явную передачу коллектора везде где можно и нельзя. Если человек пишет на Фортране, то он на любом языке будет писать как на фортране
     
     
  • 6.73, Аноним (71), 16:38, 30/10/2026 [^] [^^] [^^^] [ответить]  
  • –1 +/–
    > Zig смог только в явную передачу коллектора везде где можно и нельзя.
    > Если человек пишет на Фортране, то он на любом языке будет
    > писать как на фортране

    *Аллокатора

     
  • 5.78, Инопланетянин (?), 17:36, 30/10/2026 [^] [^^] [^^^] [ответить]  
  • +/–
    > Претендентов стать грамотнвми сями уже полно: C3, Zig, Hare

    Hare не предлагает ничего нового.

     
     
  • 6.94, другой аноним (?), 06:59, 31/10/2026 [^] [^^] [^^^] [ответить]  
  • +/–
    Хуже. Там есть тонкая засада: язык и его стандарные библиотеки построены вокруг типов сумм (что само по себе хорошо и правильно), и тег типа фиксируется не на этапе сборки, как в большинстве нормальных языков (по сути указатель куда-то в рантайм), а на этапе компиляции хешем от описания типа. И он всего 32 бита. То есть, даже случайно может совпасть (атака дней рожденья может сама получиться), а уж подобрать два типа с одинаковым хэшем -- как нефиг делать, он не крипто. Причём это фиксированно на уровне требований к языку, починить нельзя. Вообще автор, похоже, склонен в упор не видеть проблемы "хэши совпали". У него она игнорируется во всех примерах... но это типа ладно, учебные примеры, мы просто пишем покороче для наглядности, в реальном коде будет не так... но оно и в реальном так. И всё.
     

  • 1.8, Гость (??), 16:56, 29/10/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +3 +/–
    вот, даже этот Nim лучше чем rust.

    почему? потому что нет головной боли с указателями и всё просто работает как в питоне или Go.

    если нужна головная боль, то даже C++ лучше чем Rust, и даже тут нужно ещё постараться и специально не юзать удобные умные указатели, чтобы выстрелить себе в ногу.

     
     
  • 2.9, Инопланетянин (?), 17:04, 29/10/2026 [^] [^^] [^^^] [ответить]  
  • –4 +/–
    > почему? потому что нет головной боли с указателями и всё просто работает как в питоне или Go.

    Как понять какой код будет? Как отлаживать? Генеренные исходники си?

     
     
  • 3.40, Аноним (38), 23:25, 29/10/2026 [^] [^^] [^^^] [ответить]  
  • +/–
    Как всегда: printf() Ну или как там оно в Nim.
     
     
  • 4.43, Инопланетянин (?), 00:41, 30/10/2026 [^] [^^] [^^^] [ответить]  
  • +1 +/–
    > Как всегда: printf() Ну или как там оно в Nim.

    Тут ниже эксперты говорят, что есть дебагер, но ИИ говорит, что далеко не все гладко. Есть опыт?

     
     
  • 5.75, Брат Анон (ok), 17:32, 30/10/2026 [^] [^^] [^^^] [ответить]  
  • +/–
    Есть. Дебаггер настраивается больно, очень больно. Но при желании можно.
     
  • 4.76, Брат Анон (ok), 17:32, 30/10/2026 [^] [^^] [^^^] [ответить]  
  • +/–
    echo же.
     
     
  • 5.85, Аноним (85), 19:27, 30/10/2026 [^] [^^] [^^^] [ответить]  
  • +/–
    from std/sugar import dump

    from pretty import print
    from pretty import printTable

     
  • 4.86, Аноним (85), 19:32, 30/10/2026 [^] [^^] [^^^] [ответить]  
  • +/–
    import std/strformat
    let name = NimVersion
    let version = 2.4.0
    echo fmt"Hello from {name} version {version}!"
    let x = 42
    echo fmt"{x=}" # Выведет: x = 42
     
  • 2.14, Аноним (14), 17:42, 29/10/2026 [^] [^^] [^^^] [ответить]  
  • +3 +/–
    > C++ [...] нужно ещё постараться и специально не юзать удобные умные указатели, чтобы выстрелить себе в ногу.

    Лол. В C++ запросто отстреливаются ноги даже чисто с использованием ссылок и итераторов - без явного использования кучи и умных указателей для нее.

     
  • 2.26, Боевой Петух (?), 19:07, 29/10/2026 [^] [^^] [^^^] [ответить]  
  • +/–
    В nim из python только условный хеллоуврот на 100 строк заведется без изменения кода.
     
     
  • 3.77, Брат Анон (ok), 17:34, 30/10/2026 [^] [^^] [^^^] [ответить]  
  • +/–
    В nim целый пакет, который с помощью макросов и шаблонов делает из nim питон на стероидах. С почти полным доступом к стандартной библиотеке питона.
     

  • 1.16, Аноним (16), 17:44, 29/10/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/–
    C++ высокоуровневый язык вообще-то.
     
     
  • 2.31, Инопланетянин (?), 19:53, 29/10/2026 [^] [^^] [^^^] [ответить]  
  • –2 +/–
    > C++ высокоуровневый язык вообще-то.

    высокогрейдовый

     

  • 1.18, Аноним (15), 17:48, 29/10/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • –7 +/–
    Слишком сложен C? Нужен язык безопаснее, чем C++? Ну хорошо, а чем обычный C# не устраивает?
     
     
  • 2.19, Аноним (19), 18:06, 29/10/2026 [^] [^^] [^^^] [ответить]  
  • +1 +/–
    Требованием CLR, очевидно.
     
     
  • 3.35, aname (ok), 21:46, 29/10/2026 [^] [^^] [^^^] [ответить]  
  • –3 +/–
    Уже пилят компиляцию в натив
     
     
  • 4.36, Аноним (36), 21:59, 29/10/2026 [^] [^^] [^^^] [ответить]  
  • +1 +/–
    Ух ты. Интересные ветра задули. Но поздно
     
  • 4.41, Аноним (38), 23:30, 29/10/2026 [^] [^^] [^^^] [ответить]  
  • +2 +/–
    Ну хорошо, вот тогда и посмотрим, когда M$ на нём, компилируемом в натив, ядро напишет.
     
  • 4.55, Смузихеб забывший пароль (?), 08:41, 30/10/2026 [^] [^^] [^^^] [ответить]  
  • +1 +/–
    Уже даром не надо. Поезд лет как 5-10 назад уехал, вихляя задом

    Xamarin помер по сути( как раз из-за всяких IL ). Яблок, точнее, яблоСтору, сильно не понравилось, что у самариновских приложений под капотом какой-то посторонний байт-код и карманная ВМ для него, хотя это прямо запрещено требованиями( React-Native обошёл ограничения тем, что JS в нём исполнялся яблочным же жс-двиглом, а не хз чем под капотом. Т.е никаких посторонних ВМ он не тащил, а всё имеющееся исполнялось штатными средствами системы )
    Т.е получалась типо кроссплатформенная штука, посредством которой не собрать приложение, которое можно выгрузить в стор( в отличие от RN и Flutter ), т.е в мобильной разработке - на помойку

    В десктопной - там хз какая и чего поддержка на разных ОС разных версий. Ещё и что-то дополнительно ставить( почти как для прог на VB:) ) Десктопность под разные ОС - тоже отпадает.
    Он получается даже хуже электрона и котлин композ.

    Вроде в игровом двжике Юнити3Д как один из вариантов написания логики использовался шарп. Там оно кстати было удобно, но были и другие варианты.

    Остаётся лишь веб. Серверная часть. Но там и без шарпа полно претендентов

    Ну и на кой оно надо что с байткодом что с компиляцией и каковы перспективы ?

     
  • 4.61, Hezal (?), 10:21, 30/10/2026 [^] [^^] [^^^] [ответить]  
  • +1 +/–
    >> Уже пилят компиляцию в натив

    И что? Вы хоть понимаете, что именно компилируете?

    Native AOT не превращает C# в язык без runtime. В бинарник статически вшивается урезанный NativeAOT runtime, в котором по-прежнему есть GC и система типов. Просто больше не требуется отдельно установленный .NET Runtime и JIT.

    При этом получаешь ограничения: никакого Assembly.LoadFile, Reflection.Emit, обязательный trimming и необходимость проверять весь граф NuGet-зависимостей на AOT-совместимость.

    То есть это не "обычный C# теперь компилируется как C". Это отдельный режим публикации с ограничениями, которые приходится учитывать при проектировании приложения.

    Сам факт наличия AOT ещё ничего не говорит о том, насколько эта модель эквивалентна нативной разработке на других языках.

     
     
  • 5.63, aname (ok), 11:46, 30/10/2026 [^] [^^] [^^^] [ответить]  
  • +/–
    >[оверквотинг удален]
    > И что? Вы хоть понимаете, что именно компилируете?
    > Native AOT не превращает C# в язык без runtime. В бинарник статически
    > вшивается урезанный NativeAOT runtime, в котором по-прежнему есть GC и система
    > типов. Просто больше не требуется отдельно установленный .NET Runtime и JIT.
    > При этом получаешь ограничения: никакого Assembly.LoadFile, Reflection.Emit, обязательный
    > trimming и необходимость проверять весь граф NuGet-зависимостей на AOT-совместимость.
    > То есть это не "обычный C# теперь компилируется как C". Это отдельный
    > режим публикации с ограничениями, которые приходится учитывать при проектировании приложения.
    > Сам факт наличия AOT ещё ничего не говорит о том, насколько эта
    > модель эквивалентна нативной разработке на других языках.

    Так и пиление ещё в процессе. Не сделают нормально- ну помрёт язык, да и гой с ним. Плакать, чтоли, если сдохнет?

     
     
  • 6.64, Hezal (?), 13:29, 30/10/2026 [^] [^^] [^^^] [ответить]  
  • +/–
    >Так и пиление ещё в процессе.

    Ну вот когда допилят, тогда и будем говорить об этом, а сейчас это маркетинговая блёвань.

     
  • 5.84, Аноним (85), 19:18, 30/10/2026 [^] [^^] [^^^] [ответить]  
  • +/–
    "Native AOT не превращает C# в язык без runtime." Я бы даже хотел с грустью заметить что "Native AOT не превращает ХХХХХХХ в язык без runtime.", а где либо/когда либо было такое, что изначально в язык без runtime и его без существенных изменений кодовой базы превратили  в язык без runtime? Видимо фарш обратно не провернуть, кодовая база как раз расползается и использует то, что язык не надо компилировать. См. примеры с Ruby -> Crystal. Вроде Kotlin там чего-то пытается, но так просто там ничего не перевести уже существующие проекты.
     
     
  • 6.87, Аноним (85), 19:38, 30/10/2026 [^] [^^] [^^^] [ответить]  
  • +/–
    Пардон: а где либо/когда либо было такое, что изначально в язык c runtime и его без существенных изменений кодовой базы превратили  в язык без runtime? Уважаемые знатоки может есть кто знает примеры?
     

  • 1.20, Аноним (20), 18:09, 29/10/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • –2 +/–
    Лучше не смотрите на то, что это генерирует вместо кода на си.
     
     
  • 2.23, Инопланетянин (?), 18:50, 29/10/2026 [^] [^^] [^^^] [ответить]  
  • –1 +/–
    > Лучше не смотрите на то, что это генерирует вместо кода на си.

    Вот вопрос такой же. Как отлаживают это? То не говорите, что принтами.

     
     
  • 3.27, Боевой Петух (?), 19:09, 29/10/2026 [^] [^^] [^^^] [ответить]  
  • +5 +/–
    У сабжа есть отладчик для отладки. Впредь не задавайте глупые  провокационные вопросы, а спросите хотя бы у гугло-нейронки.
     
     
  • 4.30, Инопланетянин (?), 19:52, 29/10/2026 [^] [^^] [^^^] [ответить]  
  • –2 +/–
    > У сабжа есть отладчик для отладки. Впредь не задавайте глупые  провокационные
    > вопросы, а спросите хотя бы у гугло-нейронки.

    Личный опыт есть? ИИ говорит


    3. Где начинаются сложности (Минусы)

    Есть несколько сценариев, когда отладка сгенерированного кода становится запутанной:
    • Макросы и шаблоны (Metaprogramming): Если вы активно используете macro в Nim, код генерируется «на лету». Отладчик покажет вам точку вызова макроса, но не покажет пошагово, как выполнялся сгенерированный им AST-код.
    • Сложные типы данных: Простые типы (int, string, float) видны хорошо. Однако объекты, кортежи и последовательности (seq) внутри C превращаются в структуры с указателями. Чтобы увидеть их содержимое в GDB, приходится «пробиваться» через поля вроде p.data.
    • Сборщик мусора (ARC/ORC): В C-коде будет много автоматических вызовов для управления памятью (nimNew, операции копирования/перемещения). При пошаговой отладке в C-режиме они могут отвлекать.

     
  • 4.42, cheburnator9000 (ok), 23:55, 29/10/2026 [^] [^^] [^^^] [ответить]  
  • –4 +/–
    транспиленный код не реально толком отлаживать вы врете сами себе.

    единственный правильный способ это быть языком над LLVM https://github.com/arnetheduck/nlvm там есть debug.

     
     
  • 5.45, нах. (?), 01:25, 30/10/2026 [^] [^^] [^^^] [ответить]  
  • +3 +/–
    Нпучись уже гуглить
     
  • 4.82, Аноним (85), 19:04, 30/10/2026 [^] [^^] [^^^] [ответить]  
  • +/–
    года три назад как-то мне удавалось прикрутить QtCreator с отладчиком(там есть спец плагин по поддерже нима), не помню правда насколько удобно отображалось значение переменных, но в целом отладка по шагам заход внутрь фнукции и брякпойнты работали. Спустя это время уже появились LSP а также плагины Sublime Text, Zed, Vscode с различно степенью поодержки в том числе и отладки.
     
  • 2.29, вдцлсоцжтфчлыь (ok), 19:14, 29/10/2026 [^] [^^] [^^^] [ответить]  
  • +3 +/–
    ну так его цель — машинная трансляция в си, не обязательно читабельная.
     
  • 2.46, нах. (?), 01:26, 30/10/2026 [^] [^^] [^^^] [ответить]  
  • +/–
    ты и не должен это смотреть, ты же не смотришь машинный код
     

  • 1.24, Боевой Петух (?), 19:04, 29/10/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +3 +/–
    Что опять поломали в плане совместимости? Помнится,этот язык прославился именно этим.
     
     
  • 2.34, Аноним (34), 21:40, 29/10/2026 [^] [^^] [^^^] [ответить]  
  • +/–
    Для малвари как раз хорошо, сигнатуры поменяются
     

  • 1.25, Аноним (25), 19:05, 29/10/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • –5 +/–
    >Реализован режим оптимизации коротких строк (SSO, Small-String Optimization), включаемый через опцию "--strings:sso" и приводящий к хранению небольших строк непосредственно в самом объекте, без отдельного выделения памяти в куче.

    замечательно, но удар по abi; было бы хорошо так приделывать подобъекты к объекту, но без разделения на полустатику и кучу

     
     
  • 2.28, Боевой Петух (?), 19:10, 29/10/2026 [^] [^^] [^^^] [ответить]  
  • +2 +/–
    Кому не пофиг на твой abi?
     
  • 2.83, Аноним (85), 19:12, 30/10/2026 [^] [^^] [^^^] [ответить]  
  • +/–
    ABI нужно делать когда у вас боооольшой заопарк исходников и вы компириуете в бинарник а потом линкуете это когда-нибудь потом. Кстате до этого релиза не было инкрементальной компиляции, так что ни а какой раздельной компиляции и речи быть не могло. К счастью язык достаточно быстро компилируется даже с учётом двухстайдиной компияляции НИМ -> C -> exe(сам компилятор себя за минуту компилирует). Единственно, когда вам нужна эта ABI совместимость это когда вы компилирует билиотеку которую будете использовать ликовать через СИ интрефейсы(pragma exportC) -- ну тогда вы ручками и вбиваете эти Си функции которые вам нужно экспортировать -- и соотвественно ничего у вас от версии к версии не поплывёт.
     

  • 1.33, Tron is Whistling (?), 21:14, 29/10/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/–
    Очередная очень нужная закорючка со значимыми пробелами.
    И как не надоедает...
     
  • 1.37, Аноним (37), 22:04, 29/10/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/–
    Где применяется?
     
     
  • 2.39, Аноним (34), 23:23, 29/10/2026 [^] [^^] [^^^] [ответить]  
  • +/–
    Ну как где? В майнерах, в шеллкодиках, в троянчиках
     
  • 2.51, нах. (?), 02:17, 30/10/2026 [^] [^^] [^^^] [ответить]  
  • +1 +/–
    буду краток: нигде
     
  • 2.58, user1985 (?), 09:08, 30/10/2026 [^] [^^] [^^^] [ответить]  
  • –3 +/–
    Быстрый ответ Алисы AI
    Содержимое ответа
    На языке Nim можно создавать проекты самого разного типа — от веб-сервисов и утилит до игр и системных библиотек. Я подобрала для вас несколько примеров реальных проектов и инструментов, которые демонстрируют возможности языка. codechick.io
    Примеры проектов

        Веб-фреймворки и серверы. HappyX — полнофункциональный веб-фреймворк, который компилируется как в C, так и в JavaScript. На его основе можно разрабатывать как серверные, так и клиентские веб-приложения. habr.com
        Серверы и API. Проект Mummy — это HTTP- и WebSocket-сервер, написанный на Nim. libhunt.com
        Криптографические библиотеки. Constantine — высокопроизводительная криптографическая библиотека. adorabilis.wordpress.com
        Асинхронное программирование. nim-chronos — эффективная библиотека для асинхронного программирования. dev.toadorabilis.wordpress.com
        Сериализация. nim-serialization — расширяемый модуль для эффективной сериализации данных. adorabilis.wordpress.com
        Инструменты для разработки. Nimalyzer — утилита для статического анализа кода на Nim. adorabilis.wordpress.com
        Графика и игры. nimgl — библиотека Nim, которая предоставляет привязки к популярным библиотекам компьютерной графики. github.com
        Криптография. nimbluez — модули Nim для доступа к системным ресурсам Bluetooth. github.com
        Криптографические обёртки. nimpy — пакет, который позволяет вызывать код на Nim из Python. habr.com

     
  • 2.59, Axonic (ok), 09:11, 30/10/2026 [^] [^^] [^^^] [ответить]  
  • +/–
    github.com/search?q=language%3ANim&type=Repositories&ref=advsearch&l=&l=Nim&s=&o=desc
     
  • 2.81, Аноним (85), 18:56, 30/10/2026 [^] [^^] [^^^] [ответить]  
  • +/–
    Nitter — (AGPLv3+) легковесный альтернативный веб-интерфейс для X (ранее Twitter).

    Nimbus: An Ethereum consensus layer (Ethereum 2.0) client built by Status

    Для веб разработки его иногда используют. как фронтэнд так и бекэнд.

    Еще благодоря всяким макросо-программисткми штукам его очень любят использовать для того что-бы писать небольшие DSL и модули к Python. см. Ускоряем код на Python с помощью Nim.
    И как уже было написано пишут майлварь. В общем там где не охота на си во время компиляции парсить файлы и генерировать статический контент(в вебе кстати тоже широко используеться).

     
     
  • 3.88, Аноним (85), 20:03, 30/10/2026 [^] [^^] [^^^] [ответить]  
  • +/–
    Модули к Python:

    https://github.com/juancarlospaco/faster-than-requests
    Вот эти функции залили в питон
    get() post() put() head()
    patch() delete() download() download2()
    scraper() scraper2() scraper3() scraper4()
    scraper5() scraper6() scraper7() get2str()
    get2str2() get2dict() get2json()
    post2str() post2dict() post2json() post2list()
    download3() tuples2json() set_headers() multipartdata2str()
    datauri() urlparse() urlencode() urldecode()
    encodequery() encodexml() debugs() minifyhtml()
    websocket_send() websocket_ping()

     
  • 3.89, Инопланетянин (?), 20:56, 30/10/2026 [^] [^^] [^^^] [ответить]  
  • +/–
    > Nitter — (AGPLv3+) легковесный альтернативный веб-интерфейс для X (ранее Twitter).

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

     
     
  • 4.92, Аноним (92), 00:55, 31/10/2026 [^] [^^] [^^^] [ответить]  
  • +/–
    Можно ссылку на источник?
     
     
  • 5.93, Инопланетянин (?), 01:00, 31/10/2026 [^] [^^] [^^^] [ответить]  
  • +/–
    > Можно ссылку на источник?

    Можно у ИИ спросить ^^

    https://github.com/zedeus/nitter/discussions/1212

    > The long-term plan is to rewrite the source code in Go, as I'm no longer interested in using Nim.

     

  • 1.66, разраб (?), 14:52, 30/10/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/–
    есть же зиг и C# F#. зачем еще что-то& не понимаю
     
     
  • 2.79, Брат Анон (ok), 17:39, 30/10/2026 [^] [^^] [^^^] [ответить]  
  • +/–
    1) а перед тобой должен автор отчитываться?
    2) а слабо на сайт проекта сходить и почитать зачем?
     
     
  • 3.95, User (??), 07:52, 31/10/2026 [^] [^^] [^^^] [ответить]  
  • +/–
    О! Вот и нашёлся человек, который рекламе производителя верит))).
     

  • 1.70, Аноним (70), 16:14, 30/10/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/–
    В какой-то момент много стало opinionated хрени.
    Это тот самый язык, который запретил табы и установил кодстайл с отступами 2 пробела.
    Ну и если серьёзно, языки построенные вокруг наследования (в наше-то пока ещё просвещённое время) и multiple dispatch, чьё гибельное воздействие на композируемость и (как следствие) экосистему на примере julia давно уже стало общим знанием...
     
     
  • 2.74, Axonic (ok), 16:40, 30/10/2026 [^] [^^] [^^^] [ответить]  
  • +1 +/–
    Nim поддерживает только одиночное наследование объектов (object of, ref object of RootObj), и оно необязательно. Идиоматичный Nim опирается на структуры без наследования, свободные процедуры, дженерики, концепты и композицию.

    Наследование используют редко и в основном для динамического полиморфизма.

     

  • 1.80, Аноним (85), 18:47, 30/10/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/–
    В новости не указано, что также сопровождается/представлен релиз предыдущая ветки 2.2.12->2.2.14 c различными исправлениями багов. А также то что, разрабатывается следующая ветка Nimony/Nim 3 для которой также работает "режим оптимизации коротких строк (SSO, Small-String Optimization)"
     

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



    XSQUARE
    Inferno Solutions
    Hosting by Hoster.ru
    Хоcтинг: