28.02.2024

Выпуск Nuitka 2.0, компилятора для языка Python

Доступен выпуск проекта Nuitka 2.0, развивающего компилятор для трансляции скриптов на языке Python в представление на языке C, которое затем можно скомпилировать в исполняемый файл, использующий libpython для обеспечения максимальной совместимости с CPython (используются штатные средства CPython для управления объектами). Обеспечена полная совместимость с актуальными выпусками Python 2.6, 2.7, 3.3 — 3.11. По сравнению с CPython скомпилированные скрипты демонстрируют в тестах pystone повышение производительности на 335%. Код проекта распространяется под лицензией Apache.

Среди изменений в новой версии:

  • Добавлена возможность использования переменных в конфигурации пакета, позволяющая во время компиляции запрашивать значения из установленных пакетов и использовать эти значения для определения бэкенда. Поддержка переменных в конфигурации позволяет решить штатными способами многие задачи, для которых ранее требовалось подключение плагинов.
  • Добавлена поддержка параметров, задаваемых пользователем для влияния на конфигурацию каждого пакета. Параметры могут быть прочитаны при помощи новой функции get_parameter и использованы для выбора поведения модулей (например, можно выставить параметр для отключения Numba JIT или Torch JIT).
  • Добавлена опция «—include-onefile-external-data» для задания шаблонов файлов с данными, которые определены в конфигурации но должны поставляться отдельно от исполняемого файла при сборке в однофайловом режиме (onefile).
  • Добавлена опция «—cf-protection» для выставления в GCC режима защиты CFI (Control Flow Integrity), блокирующего нарушения нормального порядка выполнения (control flow).
  • Для yaml-файлов плагинов реализована возможность создания контрольных сумм для проверки целостности, которые в будущем планируют использовать для организации верификации во время выполнения.
  • В Actions разрешено указание нескольких опций, разделённых по строкам (новая строка используется как разделитель). Например:
     include-data-dir: | a=b c=d
    
  • Реализован анализ типов циклов, который в будущем будет задействован для реализации выборочных оптимизаций.
  • Добавлены оптимизации для ускорения работы с неразделяемыми и экранированными переменными.
  • Расширены возможности плагина anti-bloat, который теперь может применяться для уменьшения числа пакетов при использовании библиотек streamlit, torch, knetworkx, distributed, skimage, bitsandbytes, tf_keras, pip, networkx и pywt (в основном исключена привязка к pytest, IPython, nose, triton и dask).

Источник: https://www.opennet.ru/opennews/art.shtml?num=60558 Источник.