Перевод публикуется с сокращениями, автор оригинальной статьи Mohammed Ayar.
Языки программирования существуют уже несколько десятилетий, и каждый из них создан для удовлетворения определенной потребности. На сегодняшний день в мире насчитывается около 700 известных языков программирования, но на плаву остаться удалось только примерно 250 из них.
Производительность напрямую зависит от скорости, с которой эволюционируют компьютеры, следуя закону Мура:
В электронике скорость и производительность зависят от количества транзисторов, которые может иметь конкретный чип. В соответствии с законом Мура это число удваивается каждые два года. Ребята из Intel и AMD отлично справляются с созданием мощных вычислительных систем с точки зрения скорости, поэтому разработка надежных и быстрых программ зависит и от нас с вами. Если вы пытаетесь создать приложение, которое выполняло бы сложные задачи вроде игр и тяжелых математических вычислений, лучше держаться подальше от медленных языков программирования.
Языки бывают двух разновидностей: статически и динамически типизированные.
Статически типизированные языки обычно компилируются, т. е. компилятор анализирует и преобразует весь «человеческий» код в ассемблер, а затем создает новый файл, который, в свою очередь, выполняется пользователем вручную.
Динамически типизированные языки обычно интерпретируются, т. е. интерпретатор анализирует и запускает код построчно. Более подробную информацию о компиляторах и интерпретаторах можно найти в интернете, т. к. этот материал выходит за рамки статьи.
Большинству из нас нравятся динамически типизированные языки. Они менее подвержены ошибкам и легко интерпретируются человеком, как Python, например. За это приходится жертвовать скоростью. В статье мы рассмотрим относительно медленные динамически типизированные языки программирования, которые широко распространены.
Perl
Если уже имели дело с UNIX, то вы знакомы со сценариями на Perl. Этот скриптовый язык Unix был создан для упрощения задач, с которыми программистам приходится сталкиваться при написании длинных «простыней» на Shell. Если кратко, это были горы команд, помещенные в один файл и выполняемые последовательно.
Что еще более важно, Perl пришел, чтобы облегчить задачи, которые считались кошмаром для выполнения в C и прочих распространенных в Unix языках. Как это обычно бывает, без боя и жертв не сдаются – Perl сильно страдал в производительности.
Кроме того, найти хорошего программиста Perl в наши дни – все равно, что пытаться найти иголку в стоге сена. В отличие от Python, например, Perl чувствителен к реализации, и каждый оператор должен быть в правильном месте, чтобы иметь относительно эффективную программу. Даже с эффективными реализациями Perl все еще отстает от своих высокоуровневых аналогов, но будущее у языка есть – он растет, пытается развиваться, а проблемы эффективности решаются одна за другой, особенно после выпуска Perl 6 (с кодовым именем Raku) в 2019 году.
PHP
PHP – это скриптовый язык программирования для веб-разработки, который обычно используется в связке с HTML, CSS и MySQL при развертывании веб-сайтов. Многие утверждают, будто PHP устарел, но судя по исследованиям w3techs: «PHP используется в 79% всех сайтов в качестве бекенда, а иногда и фронтенда».
Недавний опрос по языкам программирования, сценариев и разметки, проведенный StackOverflow в 2020 году, показал, что PHP – конкурентоспособный и живой язык, превосходящий C++ и Typescript:
Все в нем хорошо: низкий порог вхождения, простейший синтаксис и дешевизна размещения, но он страдает от нехватки производительности.
PHP невероятно медленный из-за отсутствия just-in-time компилятора (JIT compiler) и того факта, что это динамически типизированный язык. 26 ноября 2020 года вышел PHP 8 с крутыми функциями оптимизации производительности и встроенным JIT-компилятором. Эти обновления помогли PHP приблизиться к языкам программирования своего класса по скорости и производительности.
Ruby
Ruby – это объектно-ориентированный язык программирования. Все интерпретируется как объект, что делает его элегантным и простым инструментом для работы. С точки зрения производительности Ruby – это полностью интерпретируемый язык. Поскольку такие языки выполняют код оператор за оператором, они, как правило, работают медленнее по сравнению с использующими компиляторы языками.
Ruby проседает по скорости по вине Global Interpreter Lock (GIL) – язык позволяет одному потоку одновременно использовать GIL. И последний «косяк» – Ruby также страдает от высокого потребления памяти и медленной сборки мусора.
Python
Универсальный Python недавно занял 1-е место как самый популярный язык программирования по данным нескольких источников, вроде statista и The Economist. Он широко используется в data science, веб-разработке и кибербезопасности.
Это правда: его преимущества явно перевешивают недостатки, но сейчас у большинства «питонистов» есть вопросы на тему скорости. Python и Ruby – члены одной семьи. Они оба медлительны из-за GIL и факта использования интерпретатора. Основное различие в том, что первый ориентирован на DS и прочее «околотемное», в то время как второй больше тяготеет к веб-разработке.
Python изобилует мощными библиотеками и функциями. Некоторые из них, такие как модуль Numpy или встроенная функция Filter(), реализованы в C++, что приводит к значительному повышению производительности. Вот почему Python процветает в наши дни, обгоняя прочие подобные языки программирования.
Заключение
Хотя скорость и производительность являются важными факторами, которые следует принимать во внимание, когда дело доходит до реализации программного обеспечения, вина не должна возлагаться только на языки программирования. Действительно, основная причина серьезных проблем со скоростью и производительностью – это плохие реализации и плохой дизайн кода.
В конечном счете, несмотря на медлительность динамически типизированных языков, они обеспечивают получение крутого опыта, а также повышают производительность разработчика – программирование никогда не бывает скучным. Удачи в обучении!
Дополнительные материалы:
Комментарии