Увеличивает ли строгая типизация производительность программы Python?

На основе таких вопросов Что делает C быстрее, чем Python? Я узнал, что динамическая/статическая типизация не является основной причиной того, что C быстрее, чем Python. Похоже, это во многом потому, что программы на Python интерпретируются, а программы на C компилируются.

Мне интересно, устранит ли строгая типизация разрыв в производительности для интерпретируемых и скомпилированных программ настолько, чтобы строгая типизация стала жизнеспособной стратегией для повышения производительности интерпретируемых программ Python постфактум?

Если ответ «да», делается ли это в контексте разработки?

Нет; все по-прежнему динамически типизируется во время выполнения. Подсказки статического типа используются только для проверки правильности самого исходного кода.

chepner 20.11.2022 19:12

Тогда будет ли статическая типизация иметь противоположный эффект и мешать Python делать свою работу?

Mustafa 20.11.2022 19:16

@Mustafa, проверка типов во время выполнения добавляет работу к тому, что уже должен делать Python. Я бы не назвал это «мешать», но я ожидаю, что любое измеримое влияние на производительность будет отрицательным.

John Bollinger 20.11.2022 19:18

Подсказки типов игнорируются во время выполнения, кроме того, что они сохраняются в атрибутах __annotation__ на объектах function и class. Если единовременная стоимость создания этих атрибутов при запуске негативно влияет на вашу производительность, вам, вероятно, вообще не следует использовать Python.

chepner 20.11.2022 19:22

Спасибо, @chepner - docs.python.org/3/library/typing.html похоже, я мог бы узнать, что здесь игнорируются подсказки, и сохранил тему. Цените помощь!

Mustafa 20.11.2022 21:39
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
3
5
106
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

В текущих версиях Python аннотации типов в основном являются подсказками для программиста и, возможно, некоторыми инструментами проверки, но игнорируются компилятором и не используются во время выполнения интерпретатором байт-кода, что аналогично поведению Typescript.

Возможно, можно изменить семантику Python, чтобы в некоторых случаях использовать преимущества статической типизации для создания более эффективного байт-кода и, возможно, для выполнения своевременной генерации исполняемого кода (JIT). Расширенные механизмы Javascript используют сложную эвристику для достижения этого без аннотаций типов. Оба подхода могут помочь сделать программы Python намного быстрее и в некоторых случаях работать лучше, чем эквивалентный код C.

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

Интересно, что в языке C стандартным способом достижения «производительности» также является использование библиотек предварительно оптимизированных подпрограмм. Это то, что касается MKL/IPL от Intel и других примеров, таких как FFTW, SAL от Mercury, VSIPL и т. д. Все, что в конечном итоге делает C, — это упорядочивание вызовов в/из таких библиотек. Это также объясняет, почему возня с привязкой к ядрам приносит так мало пользы, особенно когда диапазон процессоров, на которых, возможно, придется запускать двоичный файл, может сильно различаться по встроенному набору кодов операций и количеству ядер. Мы, твердолобые встроенные высокопроизводительные типы, уже десятилетиями используем библиотеки и доверяем планировщикам ОС, чтобы сделать все правильно :-)

bazza 20.11.2022 22:07

В моей области сейчас стоит серьезный вопрос, стоит ли отказываться от C. Так много научных процедур сейчас создается для Python; не обязательно существует C-версия такой библиотеки, даже если пакет Python изначально был написан на C. Конечно, вызов/вывод пакетов из Python добавляет накладные расходы, но не слишком много, и, вероятно, всегда более целесообразно (особенно для разработчика) понести эти накладные расходы и добавить еще одно ядро ​​ЦП для компенсации проблемы, если это необходимо. И TBH, современные процессоры настолько быстры, что у людей заканчиваются проблемы, которые могут облагать их налогом!

bazza 20.11.2022 22:16

Другие вопросы по теме