The OpenNET Project / Index page

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

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

17.10.2022 09:46

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

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

  • Расширены возможности по заданию конфигурации в формате Yaml.
  • Внесены оптимизации, связанные с исключением неиспользуемых компонентов стандартной библиотеки (zoneinfo, concurrent, asyncio и т.п.), которые позволили добиться уменьшения размера результирующих исполняемых файлов.
  • Добавлена поддержка альтернативного синтаксиса ("|") в сопоставлениях с образцом на основе оператора "match", появившегося в ветке Python 3.10.
  • Обеспечена совместимость с jinja2.PackageLoader.
  • Реализована возможность изменения размера атрибута __defaults__.
  • Добавлена поддержка функций importlib.metadata.distribution, importlib_metadata.distribution, importlib.metadata.metadata и importlib_metadata.metadata.
  • В режим компиляции в один файл (Onefile) добавлена поддержка включения в основной исполняемый файл дополнительных бинарных файлов.
  • В скомпилированных модулях реализована возможность использования функции importlib.resources.files.
  • В опции "--include-package-data" разрешено указание масок файлов, например, "--include-package-data=package_name=*.txt".
  • Для macOS реализована поддержка заверения исполняемых файлов цифровой подписью.
  • Для плагинов предоставлен метод для переопределения функций для исполняемого файла.
  • Расширены возможности плагина anti-bloat, который теперь может применяться для уменьшения числа пакетов при использовании библиотек rich, pyrect и pytorch. Реализована возможность использования регулярных выражений в правилах замены.
  • Устранены регрессивные изменения, ставшие следствием значительных оптимизаций, реализованных в прошлом выпуске.


  1. Главная ссылка к новости (https://nuitka.net/posts/nuitk...)
  2. OpenNews: Выпуск Nuitka 1.0, компилятора для языка Python
  3. OpenNews: Выпуск Brython 3.10, реализации языка Python для web-браузеров
  4. OpenNews: Доступен PikaScript 1.8, вариант языка Python для микроконтроллеров
  5. OpenNews: DeepMind открыл код S6, библиотеки с реализацией JIT-компилятора для CPython
  6. OpenNews: В JIT-компиляторе Pyston-lite реализована поддержка Python 3.10
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/57924-nuitka
Ключевые слова: nuitka, python, compile
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (42) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, Аноним (1), 10:02, 17/10/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Все пытаются и пытаются ускорить питон. А он все никак не ускоряется и не ускоряется. Да что же это такое?
     
     
  • 2.16, Chlen22sm (?), 12:04, 17/10/2022 [^] [^^] [^^^] [ответить]  
  • +4 +/
    Его не надо ускорять. Задачи в которых его используют упираются в тормоза io. Для особо требовательных можно подключить библиотеки написанные на C.
     
     
  • 3.39, YetAnotherOnanym (ok), 15:14, 17/10/2022 [^] [^^] [^^^] [ответить]  
  • –5 +/
    > Задачи в которых его используют упираются в тормоза io

    Ога. Почему-то для других языков io работает без тормозов.

     
     
  • 4.44, Аноним (44), 16:36, 17/10/2022 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Что, на других языках мои условные 10K IOPS превратятся в 50?
     
     
  • 5.56, YetAnotherOnanym (ok), 18:02, 17/10/2022 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Строго говоря, чтобы ответить на этот вопрос, надо знать максимальное значение IPOS, которое может обеспечить данное железо под данной ОС.
     
  • 3.64, Ванёк (?), 02:26, 18/10/2022 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Все используют его для своих задач, для разных задач. У многих ничего в io не упирается.
     
  • 3.69, Аноним (69), 09:36, 18/10/2022 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Если не надо ускорять, может быть можно ещё медленнее сделать?
     
  • 2.71, Аноним (-), 19:10, 18/10/2022 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Просто Ван Россум хочет на пенсию и с очередной версией питона всё это ломается, ну прям как с очередным коммитом кое-где моментально ломается gccrs.

    А разгадка одна - надо было писать на лиспе, в котором всё это уже давно и надолго.

     
  • 2.75, Прохожий (??), 06:46, 19/10/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Чукча не читатель.
    Цитата из статьи:"По сравнению с CPython скомпилированные скрипты демонстрируют в тестах pystone повышение производительности на 335%."
     

  • 1.2, Аноним (2), 10:06, 17/10/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +6 +/
    Огромная популярность языка и желание его ускорить делают свое дело: постепенно мы придем к быстрому, компилируемому, возможно, статически типизированному Python.
     
     
  • 2.3, commiethebeastie (ok), 10:08, 17/10/2022 [^] [^^] [^^^] [ответить]  
  • +/
    >статически типизированному Python.

    Проблема в том, что даже разработчики ложили на типизацию.

     
     
  • 3.11, Аноним (11), 11:21, 17/10/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Обычно это всё же "что-то" либо None. Ситуации, когда тип может оказаться и строкой и целым не нормальны. Зато вот словарём и списком вполне часто встречаемая ситуация, и на основании этого можно разбирать соответственно (оставляя остальную логику неизменной). Скорее всего, разобрать и типизировать статически вполне осуществимо, только несколько раздует. Ну, как шаблоны в плюсах.
     
  • 3.22, a_kusb (ok), 12:25, 17/10/2022 [^] [^^] [^^^] [ответить]  
  • –2 +/
    А как статическая типизация ускоряет программы? На уровне процессора типов нет.
     
     
  • 4.25, Арикайнен Анатолий (?), 12:43, 17/10/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Это как посмотреть. Типы языка высокого или низкого уровня так или и иначе связаны с регистрами процессора.

    А статическая типизация исключает преобразование типов, так что код сокращается, скорость выполнения растет. Но это незначительно. Типизация позволяет исключить ряд потенциальных ошибок при разработке.

     
  • 4.26, Аноним (26), 12:55, 17/10/2022 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Когда тебе надо поработать с переменной, например вывести в консоль, тебе придется узнать что за данные в ней содержатся. В статически типизированном языке компилятор в момент компиляции уже это знает и соотв. может применить к этим данным какой-то код. В динамически типизированном языке придется выполнять проверку на то, какой код следует применить. В ситуации с тем же выводом содержимого переменной, число перед выводом должно быть приведено к специальному формату - значениям текстовых символов. А строка уже представляет собой набор таких символов и в дополнительной обработке не нуждается.
     
     
  • 5.36, n00by (ok), 13:28, 17/10/2022 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Пример с выводом на консоль не очень удачный. fprintf() определяет тип аргументов во время исполнения, разбирая спецификаторы формата. Ну и вывод на консоль вряд ли какую программу сильно замедлит. Это не вычисления.
     
     
  • 6.67, Аноним (67), 09:19, 18/10/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Консоль сама по себе одно из самые тормозных мест туда лучше ничего не выводить если нужна скорость.
     
     
  • 7.70, n00by (ok), 12:45, 18/10/2022 [^] [^^] [^^^] [ответить]  
  • –1 +/
    А ещё лучше не путать тормоза в эмуляторе терминала, который отображает вывод в консоль, и даже может отсутствовать, и тормоза в коде программы.
     
  • 4.34, n00by (ok), 13:22, 17/10/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > А как статическая типизация ускоряет программы? На уровне процессора типов нет.

    Например a + b. В 32-х разрядном процессоре. Целое число занимает 4 байта. Строка занимает 4 байта - адрес символов в памяти (плюс сами эти символы, но в данном случае это не важно).

    При статической типизации. Если a и b целые, транслятор генерирует команду сложения. Если это строки - тогда вставляет вызов подпрограммы объединения строк.

    При динамической типизации. К тем 4-м байтам прибавляется еще 4 байта - тэг. Транслятор генерирует вызов подпрограммы универсального сложения. Та подпрограмма проверяет тег, а потом уже вызывает соответствующее каждому типу сложение.

    Но есть нюанс. Статическая типизация - обычно компилируется в машинный код. Динамическая типизация - в байт-код для интерпретатора. Интерпретатор сам по себе медленный. Статическая типизация при интерпретации не даёт ощутимого выигрыша. Она имеет смысл, когда в интерпретаторе есть ещё и JIT-компилятор для частовызываемого кода.

     
  • 2.6, Аноним (6), 10:32, 17/10/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Быстрый питон к 2050 году
     
  • 2.15, Chlen22sm (?), 12:03, 17/10/2022 [^] [^^] [^^^] [ответить]  
  • –5 +/
    > статически типизированному

    Тогда это будет уже не пайтон. Типизации в современных языках вообще не нужны.

     
     
  • 3.20, Тот_Самый_Анонимус_ (?), 12:19, 17/10/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Ликбез:
    Современный не равен тупому.
     
  • 3.31, fake_name (?), 13:10, 17/10/2022 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Правильность этого утверждения сильно зависит от того, какой смысл вкладывается в определение современного языка
     
  • 2.19, Igraine (ok), 12:16, 17/10/2022 [^] [^^] [^^^] [ответить]  
  • –3 +/
    Компилируемый статически типизированный python это Cython

    Нужен ли он "если в современных языках типизация не нужна", это отдельный вопрос.

     
  • 2.33, Бывалый смузихлёб (?), 13:21, 17/10/2022 [^] [^^] [^^^] [ответить]  
  • –4 +/
    Конечно, придём. Но за несколько лет до этого вдруг резко начнётся форсирование другого модного ЯП как питона ещё относительно недавно.
    И удобный, быстрый и годный питон окажется просто никому не нужен и полетит на свалку.
     
     
  • 3.73, Аноним (-), 19:14, 18/10/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Вы же точно таким же образом зафорсили питон заместо перла - карма неизбежна.
     
  • 2.72, Аноним (-), 19:12, 18/10/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Но уже давно есть лисп, в котором можно рисовать типы, а можно и не рисовать. И всё это уже давно компиляется в асм. А в питоне такого не будет.
     

  • 1.8, Аноним (8), 11:05, 17/10/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • –5 +/
    "Выпуск 1.1"? На гитхабе тегу "1.1" уже 3 недели, а 3 дня назад вышел "1.1.5".
     
     
  • 2.9, Аноним (1), 11:11, 17/10/2022 [^] [^^] [^^^] [ответить]  
  • +4 +/
    Релиз - это не когда создают "тег", а когда разрабы объявляют во всеуслышание, что "вот теперь все готово".

    16 October - Nuitka Release 1.1 - This is to inform you about the new stable release of Nuitka. https://nuitka.net/

     

  • 1.29, Лолштоним (ok), 13:05, 17/10/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Трансляция скриптов на языке Python в представление на языке C, которое затем можно переписать на Rust.
     
     
  • 2.35, Бывалый смузихлёб (?), 13:23, 17/10/2022 [^] [^^] [^^^] [ответить]  
  • +/
    .. и скомилить в WASM
    После чего запустить с JS-обёрткой
     
     
  • 3.61, Аноним (61), 20:03, 17/10/2022 [^] [^^] [^^^] [ответить]  
  • +/
    ...в контейнере шлакпака под ксеном в виртуалке.
     
  • 3.68, Аноним (67), 09:21, 18/10/2022 [^] [^^] [^^^] [ответить]  
  • +/
    WASM можно сделать и из C++. В той же Фигме WASM из C++ и там всё работает.
     
  • 2.37, Аноним (37), 13:32, 17/10/2022 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Переписывайте, мы вам ещё и с Nim Сишников нагенерим. Чем бы растодети не тешились.
     

  • 1.59, Аноним (-), 19:08, 17/10/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Nuitka. Как переводится это слово?
     
     
  • 2.60, Анно Домини (?), 19:24, 17/10/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Nuitka is short for Annuitka, which is the nickname of my wife Anna who is Russian
     
     
  • 3.62, Аноним (62), 21:09, 17/10/2022 [^] [^^] [^^^] [ответить]  
  • +/
    "Нюшка" таки иначе пишется....
     
     
  • 4.63, Аноним (63), 01:29, 18/10/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Анюшка наверное
     
     
  • 5.66, economist (?), 07:48, 18/10/2022 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Анютка (рус.)
     
     
  • 6.74, Аноним (74), 00:47, 19/10/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Нюська
     

  • 1.76, Аноним (76), 17:43, 10/11/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Сделал простой веб-сервер на FastAPI для теста, замерил rps с помощью siege, собрал проект с помощью Nuitka --onefile, получился бинарь на 30% меньше, чем получается сборка на Alpine multi-stage build. Замерил rps, получилось 80% от обычного запуска... Ладно думаю, то сеть все дела (хотя медленнее то оно стать не должно из-за сети, т.к. один и тот же lo), попробую математику. Сделай простой скрипт, без зависимостей, где простой перебор в 2-х вложенных циклах с математикой внутри и ветвлением. Делаю несколько прогонов, получается 90% от обычного запуска. Как получить обещанные +335% ?
     

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



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру