Гвидо ван Россум, создатель высокоуровневого языка программирования Python, написал в статью, в которой кратко очертил сходство и различие своего детища и других интерпретируемых языков. Статья была написана им еще в 1997 году, поэтому он заранее предупреждает о вероятных изменениях и публикует свою статью «Comparing Python to Other Languages» на сайте python.org «скорее в качестве исторического артефакта».
Говоря о преимуществах и недостатках языков, Гвидо рассуждает о языках как таковых, не затрагивая важные жизненные моменты вроде стоимости и доступности, сложности обучения и первоначальных вложений. А ведь именно эти вещи плюс эмоциональная привязанность влияют на выбор языка программистами.
Java
Предполагается, что программы, написанные на Python, в целом работают медленнее, чем программы на Java, но при этом их разработка занимает гораздо меньше времени.
Программы на Python обычно в 3-5 раз короче, чем их аналоги на Java. Эта разница может быть приписана встроенным в Python на высоком уровне типов данных и их динамической типизации.
Например, программист, пишущий на Python, не тратит время на объявление типов аргументов или переменных, а многочисленные виды полиморфных списков и словарей, синтаксическая поддержка которых встроена в сам язык, находят применение практически в каждой программе на Python.
Из-за динамической типизации выполнение программы на Python идет тяжелее, чем в случае с Java. Например, вычисляя выражение a+b, программа должна сначала определить тип объектов a и b, ведь он неизвестен при компилляции. Затем она запрашивает подходящую операцию сложения, которая может быть перезагружена методом, определенным пользователем.
Java, в свою очередь, может осуществлять эффективное сложение целых чисел или чисел с плавающей запятой, но требует декларирования переменных a и b и не позволяет перезагрузку оператора +, например, определенными пользователем классами.
Исходя из этого, Python гораздо лучше подходит в качестве интегрирующего языка, в то время как Java скорее характеризуется как язык низкоуровневого исполнения. По факту, вместе они представляют собой прекрасную комбинацию. Компоненты могут разрабатываться на Java и комбинироваться для формирования приложения в Python. Python также может быть использован для прототипирования компонентов, пока их модель не будет закреплена в реализации на Java.
JavaScript
Частично Python совпадает JavaScript, преимущественно в том, что касается объектов. Как и в случае с JS, создание программ на Python предполагает использование простых функций и переменных, не занимаясь определениями классов. JS на этом и останавливается. Что же касается Python, он позволяет писать гораздо более крупные программы и повторно использовать код. Для этого он задействует объекто-ориентированный стиль программирования, где велика роль классов и наследования.
Perl
Python и Perl происходят из скриптов Unix. У них много сходных черт, но философия различна.
Perl делает упор на поддержку общих задач с ориентацией на приложение. Например, в Perl есть встроенные регулярные выражения и функционал для сканирования файлов и генерации отчетов. Python в большей степени поддерживает общие методологии, например структурирование данных и объектно-ориентированное программирование.
Предоставляя программистам элегантную и не чрезмерно запутанную систему обозначений, Python побуждает их писать код, легкий для чтения (и таким образом для обслуживания тоже).
Несмотря на близость этих двух языков, они не конкурируют друг с другом. Perl имеет явное преимущество на «своей территории» — в приложениях. А Python находит применение далеко за пределами ниши Perl.
TcL
Как и Python, TcL используется как язык для расширения приложений, а также как самостоятельный язык программирования. Тем не менее, типовой код на Python выполняется гораздо быстрее, чем на TcL. Это связано с тем, что последний обычно сохраняет данные в строках и не силен в структурировании данных. Кроме того, TcL не хватает функционала для создания больших программ, такого как модульные пространства имен.
В «типовых» больших приложениях на TcL обычно можно найти расширения на C или C++ (для них это характерно). Но аналогичные приложения можно создать с использованием одного только Python. Конечно, такая разработка гораздо выгоднее по времени, ведь нет необходимости возиться с частями на C или C++.
Считается, что подкупающая черта TcL – инструмент Tk. Python перенял его интерфейс в качестве своей стандартной библиотеки GUI-компонентов.
Восьмая версия TcL решает проблему скорости оснащением байт-код компиллятором с ограниченной поддержкой типов данных и добавлением пространств имен. Но против TcL по-прежнему говорит его громоздкость.
Smalltalk
Возможно, самая большая разница между Python и Smalltalk заключается в более «распространенном» синтаксисе Python, который является значительным подспорьем при обучении программированию. Как и у Smalltalk, в Python типизация и связывание осуществляются динамически, а всё в Python является объектом. Но Python различает встроенные типы объектов и классы, определяемые пользователем, и зачастую не разрешает наследование от объектов встроенного типа.
Стандартная библиотека типов данных в Smalltalk более «рафинирована», в то время как библиотека Python имеет лучшие возможности для взаимодействия с Интернет- и www- реалиями, такими как email, HTML, FTP.
Python имеет отличия в философии касательно разработки окружения и распространения кода. Там где Smalltalk имеет монолитный «образ системы», который включает в себя как окружение, так и пользовательскую программу, Python хранит оба стандартных модуля в отдельных файлах, которые легко могут быть изменены или вынесены за пределы системы. Одним из последствий этого является существование более чем одной опции для приложения графического интерфейса пользователя (GUI) к программе на Python, поскольку GUI не встроен в систему.
С++
Почти все сказанное о Java относится также и к C++, но с оговоркой: если код на Python в 3-5 раз короче, чем его эквивалент на Java, то в случае с С++ он короче в 5-10 раз! Не связанные между собой случайные примеры свидетельствуют, что один программист на Python может сделать за два месяца то, что два программиста на С++ не могут завершить за год.
Python великолепен в качестве языка интегрирования, когда используется для сборки компонентов, написанных на С++.
Common Lisp и Scheme
Эти языки близки к Python своей динамической семантикой, но настолько различаются своим подходом к синтаксису, что их сравнение превращается почти в религиозный спор: является ли скудость синтаксиса Lisp преимуществом или недостатком? Следует заметить, что Python имеет интроспективную совместимость подобную к аналогичной у Lisp, а программы на Python могут конструировать и исполнять элементы программ на лету.
Обычно практичность является решающим фактором: Common Lisp большой (во всех смыслах), а мир Scheme разделяется на множество несовместимых версий, тогда как Python имеет единую, свободную, компактную реализацию.
[customscript]techrocks_custom_after_post_html[/customscript]
[customscript]techrocks_custom_script[/customscript]