Python и другие...
Python и другие... Все познается в сравнении. Это аксиома стала в компьютерном мире одной из главных. Так давайте же сравнивать...
На практике выбор языка программирования часто диктуется другими реальными сдерживающими факторами, такими как стоимость, доступность, подготовка, предшествующая инвестиция, или даже эмоциональная симпатия. Поскольку эти аспекты чрезвычайно нестабильны и переменчивы, будет пустой тратой времени много говорить о них. Сравним Python с такими языками, как Java, Perl, Tcl, Smalltalk, C++.
Java. Многие думают, что Python программы выполняются медленнее, чем программы Java, но они в то же время требуют намного меньше времени для разработки. Python программы типично медленнее в 3-5 раз, чем эквивалентные Java программы. Эта разница может быть объяснена за счет встроенных высокоуровневых типов данных Python и его динамической типизации. Например, Python программист не тратит времени, описывая типы аргументов или переменных, а мощные типы полиморфных списков и словарей Python, для которых богатая синтаксическая поддержка встроена прямо в сам язык, могут найти применение почти в каждой Python программе. Из-за типизации во время выполнения Python должен выполнять больше работы, чем Java. Например, при обработке выражения a+b он должен сначала исследовать объекты a и b, чтобы выяснить их типы, которые неизвестны во время компиляции. Затем вызывается соответствующая операция сложения, которая может оказаться перегруженным пользователем методом. Java, с другой стороны, может выполнять эффективное сложение целых или чисел с плавающей точкой, но требует описания переменных a и b, и не позволяет перегружать оператор + для экземпляров классов, определенных пользователем. По этим причинам Python намного лучше подходит как "склеивающий" язык в то время, как Java лучше характеризуется как низкоуровневый язык для реализации. Фактически, вместе они могут образовать отличную пару. Компоненты можно реализовывать на Java, а затем использовать в приложениях на Python; Python также полезно использовать для прототипов компонент, пока их разработка не "затвердеет" в Java реализации. Для поддержки такого типа разработки создается реализация Python, написанная на Java. Она позволяет вызывать Python код из Java и наоборот. В этой реализации исходный код Python транслируется в байт-код Java (с помощью библиотеки времени выполнения для поддержки динамической семантики Python).
Perl. Python и Perl родом из похожих окружений и несут много сходных особенностей, но имеют разную философию. Perl предназначен для поддержки общих программно-ориентированных задач, например, имеет встроенную обработку регулярных выражений, сканирование файлов и генерирование отчетов. Python концентрируется на общих методологиях программирования, таких, как разработка структур данных и объектно-ориентированное программирование, способствует написанию удобочитаемого (а значит, легко поддерживаемого) кода путем предоставления элегантной, но не чрезмерно зашифрованной нотации. Как следствие, Python близко подходит к Perl, но редко побеждает в его оригинальной нише приложений; однако, Python имеет хорошую применимость за пределами ниши Perl.
Tcl. Подобно Python, Tcl полезен как язык расширения приложений, так и в качестве независимого языка программирования. Однако Tcl, который традиционно хранит все данные как строки, обладает скудными структурами данных, а выполняет типичный код намного медленнее, чем Python. Tcl также недостает особенностей, необходимых при написании больших программ, таких как модулированные пространства имен. В то время, как "типичные" большие приложения, использующие Tcl, обычно содержат расширения, написанные на C или C++, эквивалентные Python приложения часто могут быть написаны на "чистом Python". Безусловно, разработка на чистом Python осуществляется намного быстрее, чем при написании и отладке C или C++ компонент. Было высказано, что одним из качественных разработок на Tcl является пакет Tk. Python приспособил интерфейс Tk в качестве своей библиотеки стандартных компонент GUI. Tcl 8.0 затрагивает вопросы скорости, предоставляя байт-код компилятор с ограниченной поддержкой типов данных, и добавляет пространства имен. Однако это все еще слишком громоздкий язык программирования.
Smalltalk. Возможно, наибольшее различие между Python и Smalltalk состоит в Python синтаксисе "основного потока", который дает ветвь подготовки программистов. Подобно Smalltalk, Python имеет динамическую типизацию и динамическое связывание, и все в Python является объектом. Тем не менее, Python отличает встроенные объектные типы от классов, определенных пользователем, и к настоящему времени не допускает наследование из встроенных типов. Стандартный набор библиотеки типов данных Smalltalk более очищенный, тогда как библиотека Python имеет больше средств для работы с Internet и WWW, например, c e-mail, HTML и FTP. Python имеет отличающуюся философию касательно среды разработки и распределения кода. Там, где Smalltalk по традиции имеет монолитный "системный образ", который включает как среду, так и программу пользователя, Python хранит стандартные модули и модули пользователя в индивидуальных файлах, которые могут легко быть перестроены или распространены за пределами системы. Как следствие, существует более одного выбора при использовании графического интерфейса пользователя (GUI) в Python программе, поскольку GUI не встроен в систему.
C++. Почти все сказанное для Java также применимо к C++, тем более, что там, где код Python обычно в 3-5 раз короче, чем эквивалентный код Java, он часто в 5-10 раз короче эквивалентного кода C++! Анекдотическое подтверждение гласит: то, что один программист Python может завершить за два месяца, два программиста C++ не смогут сделать и за год. Python блестяще используется как клей, соединяющий компоненты, написанные на C++.
В заключение хотелось бы сказать только одно: не так давно вышла новая версия питона — 2.2. Это еще один сильный шаг вперед. Вперед к сверхвысокому уровню современного программирования. Этот язык стоит того, чтобы его знать.
По материалам www.python.org
Дмитрий Пачинин
aka Windmaster windmaster@tut.by
На практике выбор языка программирования часто диктуется другими реальными сдерживающими факторами, такими как стоимость, доступность, подготовка, предшествующая инвестиция, или даже эмоциональная симпатия. Поскольку эти аспекты чрезвычайно нестабильны и переменчивы, будет пустой тратой времени много говорить о них. Сравним Python с такими языками, как Java, Perl, Tcl, Smalltalk, C++.
Java. Многие думают, что Python программы выполняются медленнее, чем программы Java, но они в то же время требуют намного меньше времени для разработки. Python программы типично медленнее в 3-5 раз, чем эквивалентные Java программы. Эта разница может быть объяснена за счет встроенных высокоуровневых типов данных Python и его динамической типизации. Например, Python программист не тратит времени, описывая типы аргументов или переменных, а мощные типы полиморфных списков и словарей Python, для которых богатая синтаксическая поддержка встроена прямо в сам язык, могут найти применение почти в каждой Python программе. Из-за типизации во время выполнения Python должен выполнять больше работы, чем Java. Например, при обработке выражения a+b он должен сначала исследовать объекты a и b, чтобы выяснить их типы, которые неизвестны во время компиляции. Затем вызывается соответствующая операция сложения, которая может оказаться перегруженным пользователем методом. Java, с другой стороны, может выполнять эффективное сложение целых или чисел с плавающей точкой, но требует описания переменных a и b, и не позволяет перегружать оператор + для экземпляров классов, определенных пользователем. По этим причинам Python намного лучше подходит как "склеивающий" язык в то время, как Java лучше характеризуется как низкоуровневый язык для реализации. Фактически, вместе они могут образовать отличную пару. Компоненты можно реализовывать на Java, а затем использовать в приложениях на Python; Python также полезно использовать для прототипов компонент, пока их разработка не "затвердеет" в Java реализации. Для поддержки такого типа разработки создается реализация Python, написанная на Java. Она позволяет вызывать Python код из Java и наоборот. В этой реализации исходный код Python транслируется в байт-код Java (с помощью библиотеки времени выполнения для поддержки динамической семантики Python).
Perl. Python и Perl родом из похожих окружений и несут много сходных особенностей, но имеют разную философию. Perl предназначен для поддержки общих программно-ориентированных задач, например, имеет встроенную обработку регулярных выражений, сканирование файлов и генерирование отчетов. Python концентрируется на общих методологиях программирования, таких, как разработка структур данных и объектно-ориентированное программирование, способствует написанию удобочитаемого (а значит, легко поддерживаемого) кода путем предоставления элегантной, но не чрезмерно зашифрованной нотации. Как следствие, Python близко подходит к Perl, но редко побеждает в его оригинальной нише приложений; однако, Python имеет хорошую применимость за пределами ниши Perl.
Tcl. Подобно Python, Tcl полезен как язык расширения приложений, так и в качестве независимого языка программирования. Однако Tcl, который традиционно хранит все данные как строки, обладает скудными структурами данных, а выполняет типичный код намного медленнее, чем Python. Tcl также недостает особенностей, необходимых при написании больших программ, таких как модулированные пространства имен. В то время, как "типичные" большие приложения, использующие Tcl, обычно содержат расширения, написанные на C или C++, эквивалентные Python приложения часто могут быть написаны на "чистом Python". Безусловно, разработка на чистом Python осуществляется намного быстрее, чем при написании и отладке C или C++ компонент. Было высказано, что одним из качественных разработок на Tcl является пакет Tk. Python приспособил интерфейс Tk в качестве своей библиотеки стандартных компонент GUI. Tcl 8.0 затрагивает вопросы скорости, предоставляя байт-код компилятор с ограниченной поддержкой типов данных, и добавляет пространства имен. Однако это все еще слишком громоздкий язык программирования.
Smalltalk. Возможно, наибольшее различие между Python и Smalltalk состоит в Python синтаксисе "основного потока", который дает ветвь подготовки программистов. Подобно Smalltalk, Python имеет динамическую типизацию и динамическое связывание, и все в Python является объектом. Тем не менее, Python отличает встроенные объектные типы от классов, определенных пользователем, и к настоящему времени не допускает наследование из встроенных типов. Стандартный набор библиотеки типов данных Smalltalk более очищенный, тогда как библиотека Python имеет больше средств для работы с Internet и WWW, например, c e-mail, HTML и FTP. Python имеет отличающуюся философию касательно среды разработки и распределения кода. Там, где Smalltalk по традиции имеет монолитный "системный образ", который включает как среду, так и программу пользователя, Python хранит стандартные модули и модули пользователя в индивидуальных файлах, которые могут легко быть перестроены или распространены за пределами системы. Как следствие, существует более одного выбора при использовании графического интерфейса пользователя (GUI) в Python программе, поскольку GUI не встроен в систему.
C++. Почти все сказанное для Java также применимо к C++, тем более, что там, где код Python обычно в 3-5 раз короче, чем эквивалентный код Java, он часто в 5-10 раз короче эквивалентного кода C++! Анекдотическое подтверждение гласит: то, что один программист Python может завершить за два месяца, два программиста C++ не смогут сделать и за год. Python блестяще используется как клей, соединяющий компоненты, написанные на C++.
В заключение хотелось бы сказать только одно: не так давно вышла новая версия питона — 2.2. Это еще один сильный шаг вперед. Вперед к сверхвысокому уровню современного программирования. Этот язык стоит того, чтобы его знать.
По материалам www.python.org
Дмитрий Пачинин
aka Windmaster windmaster@tut.by
Компьютерная газета. Статья была опубликована в номере 16 за 2002 год в рубрике программирование :: разное