Доступен выпуск проекта Nuitka 1.1, развивающего компилятор для трансляции скриптов на языке Python в представление на языке C, которое затем можно скомпилировать в исполняемый файл, использующий libpython для обеспечения максимальной совместимости с CPython (используются штатные средства CPython для управления объектами). Обеспечена полная совместимость с актуальными выпусками Python 2.6, 2.7, 3.3 - 3.10. По сравнению с CPython скомпилированные скрипты демонстрируют в тестах pystone повышение производительности на 335%. Код проекта распространяется под лицензией Apache...Подробнее: https://www.opennet.dev/opennews/art.shtml?num=57924
Все пытаются и пытаются ускорить питон. А он все никак не ускоряется и не ускоряется. Да что же это такое?
Его не надо ускорять. Задачи в которых его используют упираются в тормоза io. Для особо требовательных можно подключить библиотеки написанные на C.
> Задачи в которых его используют упираются в тормоза ioОга. Почему-то для других языков io работает без тормозов.
Что, на других языках мои условные 10K IOPS превратятся в 50?
Строго говоря, чтобы ответить на этот вопрос, надо знать максимальное значение IPOS, которое может обеспечить данное железо под данной ОС.
Все используют его для своих задач, для разных задач. У многих ничего в io не упирается.
Если не надо ускорять, может быть можно ещё медленнее сделать?
Просто Ван Россум хочет на пенсию и с очередной версией питона всё это ломается, ну прям как с очередным коммитом кое-где моментально ломается gccrs.А разгадка одна - надо было писать на лиспе, в котором всё это уже давно и надолго.
Чукча не читатель.
Цитата из статьи:"По сравнению с CPython скомпилированные скрипты демонстрируют в тестах pystone повышение производительности на 335%."
Огромная популярность языка и желание его ускорить делают свое дело: постепенно мы придем к быстрому, компилируемому, возможно, статически типизированному Python.
>статически типизированному Python.Проблема в том, что даже разработчики ложили на типизацию.
Обычно это всё же "что-то" либо None. Ситуации, когда тип может оказаться и строкой и целым не нормальны. Зато вот словарём и списком вполне часто встречаемая ситуация, и на основании этого можно разбирать соответственно (оставляя остальную логику неизменной). Скорее всего, разобрать и типизировать статически вполне осуществимо, только несколько раздует. Ну, как шаблоны в плюсах.
А как статическая типизация ускоряет программы? На уровне процессора типов нет.
Это как посмотреть. Типы языка высокого или низкого уровня так или и иначе связаны с регистрами процессора.А статическая типизация исключает преобразование типов, так что код сокращается, скорость выполнения растет. Но это незначительно. Типизация позволяет исключить ряд потенциальных ошибок при разработке.
Когда тебе надо поработать с переменной, например вывести в консоль, тебе придется узнать что за данные в ней содержатся. В статически типизированном языке компилятор в момент компиляции уже это знает и соотв. может применить к этим данным какой-то код. В динамически типизированном языке придется выполнять проверку на то, какой код следует применить. В ситуации с тем же выводом содержимого переменной, число перед выводом должно быть приведено к специальному формату - значениям текстовых символов. А строка уже представляет собой набор таких символов и в дополнительной обработке не нуждается.
Пример с выводом на консоль не очень удачный. fprintf() определяет тип аргументов во время исполнения, разбирая спецификаторы формата. Ну и вывод на консоль вряд ли какую программу сильно замедлит. Это не вычисления.
Консоль сама по себе одно из самые тормозных мест туда лучше ничего не выводить если нужна скорость.
А ещё лучше не путать тормоза в эмуляторе терминала, который отображает вывод в консоль, и даже может отсутствовать, и тормоза в коде программы.
> А как статическая типизация ускоряет программы? На уровне процессора типов нет.Например a + b. В 32-х разрядном процессоре. Целое число занимает 4 байта. Строка занимает 4 байта - адрес символов в памяти (плюс сами эти символы, но в данном случае это не важно).
При статической типизации. Если a и b целые, транслятор генерирует команду сложения. Если это строки - тогда вставляет вызов подпрограммы объединения строк.
При динамической типизации. К тем 4-м байтам прибавляется еще 4 байта - тэг. Транслятор генерирует вызов подпрограммы универсального сложения. Та подпрограмма проверяет тег, а потом уже вызывает соответствующее каждому типу сложение.
Но есть нюанс. Статическая типизация - обычно компилируется в машинный код. Динамическая типизация - в байт-код для интерпретатора. Интерпретатор сам по себе медленный. Статическая типизация при интерпретации не даёт ощутимого выигрыша. Она имеет смысл, когда в интерпретаторе есть ещё и JIT-компилятор для частовызываемого кода.
Быстрый питон к 2050 году
> статически типизированномуТогда это будет уже не пайтон. Типизации в современных языках вообще не нужны.
Ликбез:
Современный не равен тупому.
Правильность этого утверждения сильно зависит от того, какой смысл вкладывается в определение современного языка
Компилируемый статически типизированный python это CythonНужен ли он "если в современных языках типизация не нужна", это отдельный вопрос.
Конечно, придём. Но за несколько лет до этого вдруг резко начнётся форсирование другого модного ЯП как питона ещё относительно недавно.
И удобный, быстрый и годный питон окажется просто никому не нужен и полетит на свалку.
Вы же точно таким же образом зафорсили питон заместо перла - карма неизбежна.
Но уже давно есть лисп, в котором можно рисовать типы, а можно и не рисовать. И всё это уже давно компиляется в асм. А в питоне такого не будет.
"Выпуск 1.1"? На гитхабе тегу "1.1" уже 3 недели, а 3 дня назад вышел "1.1.5".
Релиз - это не когда создают "тег", а когда разрабы объявляют во всеуслышание, что "вот теперь все готово".16 October - Nuitka Release 1.1 - This is to inform you about the new stable release of Nuitka. https://nuitka.net/
Трансляция скриптов на языке Python в представление на языке C, которое затем можно переписать на Rust.
.. и скомилить в WASM
После чего запустить с JS-обёрткой
...в контейнере шлакпака под ксеном в виртуалке.
WASM можно сделать и из C++. В той же Фигме WASM из C++ и там всё работает.
Переписывайте, мы вам ещё и с Nim Сишников нагенерим. Чем бы растодети не тешились.
Nuitka. Как переводится это слово?
Nuitka is short for Annuitka, which is the nickname of my wife Anna who is Russian
"Нюшка" таки иначе пишется....
Анюшка наверное
Анютка (рус.)
Нюська
Сделал простой веб-сервер на FastAPI для теста, замерил rps с помощью siege, собрал проект с помощью Nuitka --onefile, получился бинарь на 30% меньше, чем получается сборка на Alpine multi-stage build. Замерил rps, получилось 80% от обычного запуска... Ладно думаю, то сеть все дела (хотя медленнее то оно стать не должно из-за сети, т.к. один и тот же lo), попробую математику. Сделай простой скрипт, без зависимостей, где простой перебор в 2-х вложенных циклах с математикой внутри и ветвлением. Делаю несколько прогонов, получается 90% от обычного запуска. Как получить обещанные +335% ?