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

Новости мира unix. Хотите узнать секрет вечного счастья? Откройте страницу 246.
Ответить
acolyte
Аватара пользователя
Сообщения: 2593
Зарегистрирован: 20.08.2022

#

Релиз языка программирования Nim 2.0
Дата публикации:Wed, 02 Aug 2023 14:06:32 +0300




Представлен релиз языка системного программирования Nim 2.0. Язык Nim ориентирован на решение задач системного программирования, использует статическую типизацию и создан с оглядкой на Pascal, C++, Python и Lisp. Исходный код на языке Nim компилируется в представление на C, C++, Objective-C или JavaScript. В дальнейшем полученный C/C++ код компилируется в исполняемый файл при помощи любого доступного компилятора (clang, gcc, icc, Visual C++), что позволяет добиться производительности близкой к Си, если не учитывать затраты на выполнение сборщика мусора. По аналогии с Python в Nim в качестве разделителей блоков применяются отступы. Поддерживаются средства метапрограммирования и возможности для создания предметно-ориентированных языков (DSL). Код проекта поставляется под лицензией MIT.



Среди изменений в новом выпуске:
  • По умолчанию задействован сборщик мусора ORC, который использует тот же алгоритм подсчёта ссылок на объекты, что и сборщик мусора ARC, но дополнительно поддерживает обработчик циклов, позволяющий использовать ARC с реализацией механизма async в стандартной библиотеке.

    Улучшена распаковка кортежей и добавлена возможность вложенной распаковки:

    proc returnsNestedTuple(): (int, (int, int), int, int) = (4, (5, 7), 2, 3)
    let (x, (_, y), _, z) = returnsNestedTuple()



    Добавлена возможность нисходящего вывода типов:

    let foo: seq[(float, byte, cstring)] = @[(1, 2, "abc")]


    Добавлена прагма .forbids для определения запрещённых тегов.

    В стандартной библиотеке модуль "os" разделён на несколько отдельных модулей: std/oserrors, std/envvars, std/paths, std/dirs, std/files, std/symlinks, std/appdirs и std/cmdline.

    Стабилизирована поддержка перегрузки перечисляемых типов (enum).
    Для объектов предоставлена возможность определения значений полей по умолчанию.

    type
    Rational* = object
    num: int = 0
    den: int = 1

    Бэкенд для генерации кода JavaScript переведён на использование типа BigInt для 64-разрядных целых типов (int64 и uint64).


    Улучшена переносимость с кодом на языке C++.
Новость позаимствована с opennet.ru
Ссылка на оригинал: https://www.opennet.ru/opennews/art.shtml?num=59542

Жизнь за Нер'зула!

Ответить