Вы запросто можете услышать такое где-то и подумать «Ну и зачем тогда нужен Python! Надо тогда C изучать, кто Python учит те дураки». И будете неправы.
Откуда такая разница в скорости?
Причин несколько, одна из основных состоит в том, что Python — интерпретируемый язык, а C — компилируемый (о других причинах читайте в статье-продолжении). Что это значит?
Если вы напишите программу на C (файл с кодом, имя которого заканчивается на ".c"), то запустить этот файл вы не сможете. Запустить можно исполняемый файл, в Windows название таких файлов заканчивается на «.exe». Это на иконку такого файла вы нажимаете, чтобы запустить приложение.
Так вот, запустить просто файл с кодом на C нельзя. Поэтому вы запустите программу, которая возьмёт этот файл с текстом кода и переведёт его на язык компьютера, обычно язык нулей и единиц. Она не просто переведёт, она создаст именно исполняемый (".exe") файл. Вот его уже можно будет запускать.
Такая программа называется компилятор. Как письменный переводчик, она берёт документ на одном языке (C) и создаёт новый документ(exe). После этого компилятор (как и письменный переводчик) больше не нужен. Один раз перевёл и всё. Программа работает без него.
Программа на языке Python (файл, заканчивающийся на .py) доносится до компьютера по-другому. Представьте устного переводчика. Если какой-нибудь иностранный деятель, который не знает русского языка должен выступить перед жителями Новосибирска, ему дадут такого переводчика. Деятель произносит фразу, переводчик слушает, переводит у себя в голове, и только потом произносит аудитории. Это работает гораздо медленнее — пока переводчик прослушает, пока переведёт, пока озвучит, пока те, кто слышат, поймут... Быстрее можно получить ту же информацию, если взять запись выступления или заранее написанный текст речи, перевести и записать в документ. Как компилятор берёт текст программы и записывает в файл «.exe».
А программа-интерпретатор, как устный переводчик, перечитывает текст программы по ходу дела и отправляет компьютеру «перевод» действия, которые нужно сделать, на машинном языке, по частям.
Получается, если мы написали программу на C и скомпилировали — нам C и его компилятор больше не нужны. Файл ".exe" (или другой бинарный файл в других системах) можно переносить на любой другой компьютер с той же системой и запускать. Мы будем запускать только этот файл программы. Так же не нужен нам и переводчик после того, как мы получили перевод в виде документа.
Если мы написали программу на Python, то у нас не будет исполняемого файла. Каждый раз, кликая по файлу с кодом питона, заканчивающемуся на ".py", мы будем запускать программу-интерпретатор Python («устный переводчик»). И эта программа будет работать, и каждый раз заново переводить каждую строчку кода на Python на язык нулей и единиц. Без установленного интерпретатора программы на Python не будут запускаться.
Поэтому программа, написанная на самой популярной версии Python — CPython, работает раза в 4 медленнее, чем такая же программа, написанная на C. Ведь каждый раз снова и снова прямо во время выполнения работы перечитывает и перечитывает, что нужно делать.
Значит, C лучше и надо учить его?
Да нет, почему же. Компилируемые и интерпретируемые языки просто имеют разные ниши. Да, интерпретируемый язык даёт медленную скорость работы, но современные компьютеры мощные и быстрые, в большинстве случаев разница некритична и человеку незаметна, для него что так что так всё будет работать мгновенно.
Зато интерпретируемые языки удобны в другом. Вот есть у нас очень большая программа, написанная на компилируемом языке. Решили что-то в ней поменять — чтобы запустить изменённую версию, нужно подождать, пока из твоего кода компилятор создаст сам файл программы. Если программа большая, то ждать придётся долго. А если на интерпретируемом языке? Сохранили просто файл кода и всё, интерпретатор, когда надо будет это место прочитать, прочитает уже новую версию кода.
Давайте вернёмся к примеру с переводчиками. Да, письменный перевод быстрее. И устные переводчики часто заранее получают текст речи и переводят его, по ходу речи просто следят. Но если докладчик решит отойти от запланированной речи и сказать что-то другое — устный переводчик перестроится на лету и переведёт уже актуальный материал. Письменного перевода новой версии речи, актуальной, ждать, наоборот, придётся дольше, чем от устного переводчика.
Весь интернет — сайты, сервера активно используют JS, PHP, Python. Это языки интерпретируемые. Как раз потому, что если что-то работает не так, можно очень быстро исправить ошибку или отменить изменения в отдельном файле. И интерпретатор тут же начнёт отправлять компьютеру обновлённые инструкции.
Если вы железячник, любите паять, собирать разные железки и хотели бы научиться их программировать — то да, C выучить нелишним будет. Если же интересы у вас другие — то и учить нужно то, что интересам этим соответствует.
И многим лучше всё же в начале изучать Python — потому что им в начале очень тяжело изучать программирование. Почему — написал в этой статье.
И ещё момент! Если всё же нужна скорость, то есть специальные версии Python, которые работают гораздо быстрее. Например, PyPy — скорость почти как у C! Но об этом в другой раз.
Резюмируем
Есть интерпретируемые языки программирования, например, Python, есть компилируемые языки программирования, например, C. Программа на интерпретируемом языке работает медленнее, часто в несколько раз. Но скорость — это лишь один из множества параметров, плюсов или минусов языка программирования, есть и другие. Часто скорость не важна. И то, какой язык учить, зависит прежде всего не от скорости — а от целей, того, зачем вы собираетесь изучать программирование.
Понравилась статья? Подписывайтесь, ставьте лайк, пишите комментарии — похвалы и варианты улучшения, а так же идеи.
-----------------------------
* Да, на деле 4 — это усреднённые и не самые точные данные, где-то на 30% медленнее, где-то в 24. Эту усреднённое число я взял у Тимофея Хирьянова на его лекции.