Увеличивает ли строгая типизация производительность программы 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
14 Задание: Типы данных и структуры данных Python для DevOps
14 Задание: Типы данных и структуры данных Python для DevOps
проверить тип данных используемой переменной, мы можем просто написать: your_variable=100
Python PyPDF2 - запись метаданных PDF
Python PyPDF2 - запись метаданных PDF
Python скрипт, который будет записывать метаданные в PDF файл, для этого мы будем использовать PDF ридер из библиотеки PyPDF2 . PyPDF2 - это...
Переменные, типы данных и операторы в Python
Переменные, типы данных и операторы в Python
В Python переменные используются как место для хранения значений. Пример переменной формы:
Почему Python - идеальный выбор для проекта AI и ML
Почему Python - идеальный выбор для проекта AI и ML
Блог, которым поделился Harikrishna Kundariya в нашем сообществе Developer Nation Community.
Как автоматически добавлять котировки в заголовки запросов с помощью PyCharm
Как автоматически добавлять котировки в заголовки запросов с помощью PyCharm
Как автоматически добавлять котировки в заголовки запросов с помощью PyCharm
Анализ продукта магазина на Tokopedia
Анализ продукта магазина на Tokopedia
Tokopedia - это место, где продавцы могут продавать свои товары. Товар должен быть размещен на витрине, чтобы покупателям было легче найти товар...
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

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