Новости и события » Hi-Tech » Новая версия языка программирования Nim 0.18.0

Новая версия языка программирования Nim 0.18.0

Как сообщает opennet.ru Представлен значительный релиз языка системного программирования Nim 0.18.0. Язык использует статическую типизацию и создан с оглядкой на Pascal, C++, Python и Lisp. Код проекта поставляется под лицензией MIT.

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

В новом выпуске отмечается ряд существенных новшеств и изменений, связанных с проведением чистки стандартной библиотеки перед релизом 1.0. Также внесена большая порция изменений, нарушающих обратную совместимость. Оператор индексирования "[]" теперь выдает ошибку, если запрошенный диапазон выходит за границы строки, вместо выдачи подпадающий под запрос части строки (например, var myString = "hello world"; myString[6.. 45] теперь инициирует исключение IndexError). Также изменена логика обработки коллекций оператором "$" и прекращено приведение массивов array[x, char] к типу cstring. Спецсимвол "&92;n" теперь выводит только код перевода строки без кода возврата каретки.

Среди новшеств:

  • Добавлен модуль strformat, предоставляющий поддержку форматируемых строковых литералов, позволяющих определить строку, содержащую подстановки (например let name = "Fred"; doAssert fmt"My name is {name}."), в стиле "f"-строк Python 3.6;
  • В генератор документации добавлен макрос runnableExamples, позволяющий протестировать работу приводимых примеров кода;
  • Добавлен новый макрос mapLiterals, упрощающий создание массивов и последовательностей (например, "let x = mapLiterals([12, 34, 15, 1], uint32)");
  • Изменен алгоритм управления памятью. Новый алгоритм TLSF позволяет снизить фрагментацию памяти, ценой усложнения операций alloc и dealloc;
  • Серия изменений в модулях для асинхронного ввода/вывода. Представлена унифицированная реализация asyncdispatch и новая процедура getIoHandler, возвращающая дескриптор ввода/вывода или epoll/kqueue. В модуле asyncjs появилась новая реализация async await для бэкенда JavaScript;
  • Пакетный менеджер Nimble обновлен до версии 0.8.10, в которой появилась возможность размещения нескольких пакетов Nimble в одном репозитории Git или Hg;
  • Из stdlib в обособленные пакеты Nimble переведены библиотеки gentabs, libuv, polynumeric, pdcurses, romans, libsvm и joyent_http_parser. Объявлены устаревшими basic2d и basic3d, вместо которых следует использовать такие пакеты, как glm, arraymancer и neo.

Свежие новости Украины на сегодня и последние события в мире экономики и политики, культуры и спорта, технологий, здоровья, происшествий, авто и мото

Вверх