Найти в Дзене

Почему ещё Python ощутимо медленнее C и вообще один из самых медленных языков программирования?

Оглавление

В прошлой статье на эту тему я сконцентрировался на одной теме — том, что самая популярная реализация языка Python (CPython) работает с компилятором. И в общем случае языки, использующие интерпретаторы, никогда не достигнут скорости языков-компиляторов. Для того же Python по этой причине написали PyPy, компилятор, чтобы писать более быстрые программы.

Но! Игорь Болгов и Bashkatov справедливо напомнили мне, что это не единственная причина и часто далеко не самая важная! Подумав, я решил, что, возможно, моим подписчикам будет интереснее глубже взглянуть на этот вопрос.

Какие ещё причины того, что Python такой медленный?

Серьёзно, если смотреть множество исследований и тестов, Python из популярных языков может выглядеть самым медленным! Речь о сравнении C, C++, C#, Java, JavaScript с CPython, самой популярной версией Python, разумеется.

Почему же так выходит? Причин, на самом деле, много. Но если брать самые важные и понятные новичкам в программировании, можно поговорить о двух вещах (кроме использования интерпретатора, а не компилятора). Это динамическая типизация и универсальность CPython.

Динамическая типизация

Я писал на схожую тему в этой статье, здесь перескажу коротко. Когда вы пишете код на языке Python, вы можете записывать в переменную всё, что угодно. Захотели, записали в переменную число. А через какое-то время записали в неё же строку (текст). А потом вообще логический ноль или ссылку на какой-то объект. Это динамическая типизация, тип данных в переменной динамический, изменяемый.

А в C++, например, так нельзя. Там когда вы в первый раз сообщаете в коде, что у вас есть некая переменная num1, нужно обязательно указать, какого типа данные там будут (строка? целое число? число с дробной частью?). И для чисел, например, ещё и сколько байт (ячеек памяти) будет занимать эта переменная. (один? два? четыре?). ВСЁ! После этого в переменную можно записать только строго такие данные, такого типа и чтобы помещались в количество байт, которое указано. Это статическая типизация, тип данных в переменной статичен, неизменяем.

-2

Новички скажут, что динамическая типизация это здорово, но в той статье я уже объяснял, что минусы тоже есть. И в том числе минус в том, что динамическая типизация приводит к более медленной работе программы.

Как же так? А так, за удобство надо платить. Опять же, можно говорить о нескольких причинах, но самая понятная — если тип переменной статичен, то он записан и программа быстро просто узнаёт, какой именно тип данных и что с ним делать. А если тип переменной динамичен, может в любой момент измениться — значит, постоянно нужно этот тип данных проверять, тратить время на выяснение, что же там — число ли или какой-нибудь текст?

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

Универсальность

-3

А она-то при чём? А при том, что вроде бы есть Java и C#, которые тоже интерпретируемые. И технологии .Net и Виртуальная машина Java медленно запускаются. Кроме того, для того, чтобы ускорить работу программ на этих языках, используется технология JIT. Благодаря ней получается оптимизировать код и программы работают быстрее... Но запускаются ещё медленнее!

CPython более универсальный инструмент, таким и планировался. Если использовать технологию JIT и для него, маленькие скриптики на Python, которые должны быстро сделать своё дело и «выключиться», будут тоже долго запускаться. Куда дольше, чем работать. Поэтому JIT не используется в CPython, из-за его универсальности.

А в версии Python с компилятором PyPy JIT как раз используется, ведь эта версия Python предназначена больше для программ, которые запускаются и потом долго работают.

Подытожим

Причин того, что самая популярная версия Python, CPython, медленно работает, много. Самые понятные из основных причин — то, что вместо компилятора используется интерпретатор, а так же динамическая типизация и большая универсальность CPython. То есть скоростью приходится платить за большие удобство и универсальность языка.

Понравилась ли вам статья? Новички в программировании, насколько полезна вам эта статья? Профессионалы, о чём важном по теме ещё следует знать начинающему программисту, по вашей точке зрения?

ДЛЯ ДОНАТОВ

https://yoomoney.ru/to/410012316866358

https://donate.stream/vrom1990

или на карту

5599 0020 1940 9582

Ссылочки на меня:

https://zen.yandex.ru/id/vrom1990

https://t.me/vrom1990pb

https://pikabu.ru/@vrom1990

https://archive.org/details/python-tupyh

https://vk.com/vrom1990pb

https://www.youtube.com/c/ВячеславРоманьков