Nim Улучшает Асинхронность


Существует новый выпуск Nim, языка системного программирования, который фокусируется на производительности, переносимости и выразительности. Nim, который ранее назывался Nimrod, статически типизирован и скомпилирован.

Nim строго типизирован и имеет функции первого класса. Он объектно-ориентирован, но композиция предпочтительнее наследования. Nim компилируется в C по умолчанию, но может использоваться с различными бэкэндами компилятора для создания JavaScript, C++ или Objective-C.

Опции Nim включают в себя сборщик мусора с отложенным подсчетом ссылок, который является быстрым, инкрементным и без паузы; или мягкий сборщик мусора в реальном времени, который позволяет указать его максимальное время паузы. Существуют также другие оптоины для сбора мусора.

Работа над новым выпуском Nim в основном была направлена на очистку стандартной библиотеки в рамках подготовки к версии v1.0, но помимо этого есть некоторые улучшения. Работа над библиотекой действительно означает, что в этом выпуске есть критические изменения, в том числе оператор индексирования [], который берет срез, теперь вызывает исключение IndexError, когда оно выходит за пределы.

Помимо критических изменений, разработчики говорят, что лучшим улучшением является модуль strformat, который реализует форматирование строк, очень похожее на f-строки Python 3. 

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

Существует также новый макрос mapLiterals, который позволяет создавать литералы массивов и последовательностей, а также новый алгоритм диспетчера памяти, предназначенный для уменьшения фрагментации памяти.

Асинхронные улучшения в модулях ввода-вывода стандартной библиотеки означают, что больше нет “предстоящего” и стандартного разделения asyncdispatch, первое было объединено и теперь является реализацией asyncdispatch по умолчанию. Теперь доступна новая процедура getIoHandler, которая возвращает дескриптор к базовому порту завершения ввода-вывода или epoll/kqueue fd, используемому asyncdispatch. Это означает, что библиотеки теперь имеют больший контроль над циклом событий.  Новая реализация async await также была добавлена для бэкенда JavaScript в модуле asyncjs.

Последние основные улучшения относятся к менеджеру пакетов Nim, Nimble. Его главной новой функцией является поддержка нескольких быстрых пакетов в одном репозитории Git/Hg.


Добавить комментарий