Итак, мы с вами, уважаемые читатели "Компьютерных Вестей", обсудили некоторые аспекты создания кросс-платформенных приложений. Однако, судя по пришедшим письмам, многим показалось, что недостаточно раскрыта тема использования интерпретируемых языков программирования для написания кросс-платформенных приложений. Поэтому сегодня остановимся подробнее именно на этом вопросе.
Интерпретируемые языки: за и против
Исторически сложилось так, что первые языки высокого уровня были компилируемыми, то есть программа, написанная на одном из таких языков, переводилась компилятором непосредственно в операционные коды процессора. Обусловлено это было, прежде всего, необходимостью делать программы достаточно компактными и быстрыми: сами понимаете, загрузить в память "динозавра" размером с два спортивных зала одновременно операционную систему, интерпретатор и интерпретируемую программу было очень непросто. Поэтому самые популярные из доживших до наших дней относительно старых языков высокого уровня - Си, Паскаль и Фортран - являются компилируемыми.
Впрочем, компилируемый язык имеет ряд недостатков с точки зрения кросс-платформенного программирования. Например, на разных процессорных архитектурах различные типы данных, предусмотренные в языках, могут иметь различный размер. Но это, конечно, мелочь. Самый важный недостаток состоит в том, что код программы приходится переделывать для каждой из операционных систем, потому что в большинстве из них совершенно по-разному реализована одинаковая, в общем-то, функциональность. Среди плюсов приложений, написанных на одном из компилируемых языков, - прежде всего, высокая скорость работы и возможность использовать все преимущества конкретной платформы.
Интерпретируемые языки появились позже, и условно их можно разделить на две группы: "чисто" интерпретируемые, в которых интерпретатор работает напрямую с исходным текстом программы, и языки с промежуточным кодом, в которых текст программы компилируется в некий низкоуровневый код, который уже потом и выполняется интерпретатором. Примером первого вида языков может служить Perl, второго - Java.
Интерпретируемые языки менее дороги как в плане сроков разработки (если считать, что квалификация программиста такова, что он одинаково хорошо знает, скажем, C++ и Perl), так и в плане денег, которые потребуется в эту самую разработку вложить. В то же время, приложение, написанное на интерпретируемом языке программирования, работает медленнее, но для большинства сегодняшних кросс-платформенных приложений это не слишком большая проблема. Тем более, есть такие сферы, где интерпретируемые языки давно и прочно заняли основную часть экологической ниши - прежде всего, это различные приложения, связанные с World Wide Web.
В общем-то, если говорить в целом, то разработка кросс-платформенных приложений с помощью интерпретируемых языков программирования сегодня ничуть не менее перспективна, чем она же, но с помощью компилируемых языков. Поэтому давайте сузим тему: поговорим о тех языках, которые позволяют выполнять написанные на них приложения безо всякой предкомпиляции. Их довольно много, и каждый имеет свои особенности. Таким образом, дальше я коротко расскажу о самых популярных.
Perl
Хронологически этот интерпретируемый язык был одним из первых, завоевавших большую аудиторию среди программистов. Создан он был ещё в 1987 году Ларри Уоллом. Что интересно (и, в общем-то, довольно нетипично для языков программирования), создатель этого языка по образованию не программист, а лингвист (как говорили мне представители этой замечательной профессии, главное не путать их с филологами). Сейчас официальный сайт этой разработки находится по адресу www.perl.com.
Эмблема "Перла" - верблюд. Авторы подобрали это животное не случайно, и, думаю, они могут гордиться стопроцентным попаданием в символику. Верблюд - животное, совершенно незаменимое в пустыне и очень выносливое, но при этом, конечно, не обременённое излишней грациозностью. Perl - это тоже "корабль пустыни", только не Сахары, а текстовой, если позволите воспользоваться такой метафорой. Изначально "Перл" создавался для операций с текстами, и, надо сказать, в этой области данный язык преуспел как никакой другой. Регулярные выражения - вот основа этого языка, и они очень хорошо работают на тех, кто им пользуется.
Perl - один из первых интерпретируемых языков, который стал активно использоваться в программировании для Web. Однако сейчас его практически полностью вытеснил другой интерпретируемый язык, PHP. Впрочем, о нём я ещё немного расскажу ниже.
Не стоит думать, что возможности "Перла" ограничиваются обработкой текста. Вряд ли он стал бы так популярен, если бы был столь ограничен. Да, конечно, он "заточен" именно под эту работу, но позволяет делать и многое другое. В языке довольно богатая стандартная библиотека, позволяющая создавать довольно сложные приложения. Но и это не всё. По адресу www.cpan.org находится огромное количество сторонних модулей, написанных программистами на "Перле". Конечно, вряд ли там есть вообще всё, что нужно (я имею в виду, ВООБЩЕ), но, тем не менее, их количество вправду впечатляет.
В общем-то, "Перл" - довольно мощный язык, и во всей этой бочке мёда с верблюдом в качестве этикетки имеется только одна ложка дёгтя. Это синтаксис языка. Он весьма своеобразен, и многим к нему непросто привыкнуть. Думаю, именно синтаксис стал тем фактором, который препятствует более широкому применению языка.
Python
Этот язык уже довольно разрекламирован, поэтому сегодня его название уже не пугает начинающих программистов и работодателей, как это было лет пять назад. Официальный сайт - www.python.org.
Пожалуй, язык, названный в честь комедийного сериала, стал одним из самых популярных благодаря тому, что впитал в себя множество передовых идей. Полностью объектно-ориентированный, поддерживающий "сборку мусора" и очень гибкую динамическую типизацию, этот язык стал очень популярен среди программистов. Кроме того, популярности наверняка способствует отсутствие в языке такого атрибута "конца фразы", как точка с запятой. Вместо такого разделителя в синтаксисе "Питона" использована концепция построения блоков кода абзацами, определяющихся отступами. Хотя многих это, напротив, отпугивает.
Сила "Питона" не только в этом. Его разработчики позаботились о совместимости своего детища с другими языками программирования, и, таким образом, можно использовать его при разработке приложения одновременно на нескольких языках. Ещё одним плюсом этого языка является то, что он позволяет использовать преимущества каждой платформы, поскольку имеет соответствующие библиотеки в своём арсенале. Вообще, надо сказать, что стандартная библиотека Python весьма мощная, позволяющая реализовывать самые разные вещи: от работы с различными СУБД до написания графического пользовательского интерфейса с помощью wxWidgets. Для "Питона" есть даже библиотека для работы с OpenGL.
О качестве этого языка программирования говорит тот факт, что им пользуется в своей работе даже NASA (американское аэрокосмическое агентство), о чём гордо сообщается на сайте python.org. Среди самых известных проектов, созданных с помощью этого языка, в первую очередь вспоминается CMS Zope (www.zope.org).
В общем-то, сейчас Python, пожалуй, лучший из интерпретируемых языков.
PHP
Ещё один популярный язык, практически безраздельно оккупировавший нишу интернет-приложений. Собственно говоря, ничего странного в этом нет - ведь именно для этого он и задумывался. Само название языка происходит от слов Hypertext Preprocessor. Сайт этой разработки в интернете находится по адресу www.php.net.
Несмотря на то, что разработчики чётко обозначили сферу применения своего детища уже одним его названием, PHP способен не только на предварительную обработку гипертекстовых страниц. Для него есть библиотеки, позволяющие работать с графикой, базами данных, криптографическими алгоритмами, с сетью на низком уровне (через сокеты), а также для многих других нужд.
В общем-то, этот язык так популярен, что много рассказывать о нём вряд ли стоит. Замечу только, что вне интернета PHP практически не используется.
Ruby
Этот язык программирования не слишком известен в нашей стране, а зря. По функциональности он ни в чём не уступает тройке лидеров, о которой я рассказал выше. А может, в чём-то её даже и превосходит. Язык этот создан японским программистом Юкихиро Мацумото, а официальный сайт проекта имеет следующий адрес: www.ruby-lang.org/en.
Как и большинство современных интерпретируемых языков, Ruby поддерживает объектно-ориентированное программирование, "сборку мусора" и прочие полезные технологии. Сам автор языка считает, что его детище обладает гораздо более ярко выраженной объектной ориентированностью, чем все остальные интерпретируемые языки, и, пожалуй, это так, поскольку в этом плане язык наиболее напоминает Java и C# (хотя началось это со SmallTalk'а). Все функции в языке - это методы классов, все типы данных, соответственно, тоже объектные.
Синтаксис языка наиболее приближен к "классике" - Си и Паскалю. Стандартная библиотека тоже не страдает недостатком возможностей. В неё встроена поддержка XML, работа с матрицами, поддержка архивов и даже возможность профилировки программ. Можно работать с базами данных, создавать графический пользовательский интерфейс. И многое другое тоже можно, перечислять все возможности библиотеки вряд ли имеет смысл. Ко всему прочему, язык очень легко "договаривается" с другими языками, что тоже можно отнести к его плюсам.
Но, к сожалению, и в этой бочке мёда имеется дёготь. В данном случае это разочаровывающе низкая скорость работы, естественным образом ограничивающая сложность создаваемых на Ruby приложений. Ну, и ещё сравнительно малое количество документации на русском языке. Именно эти два фактора позволяют сказать, что Python на сегодняшний момент - более удачный выбор, чем Ruby.
Итак, вот они, основные титаны арены интерпретируемых языков программирования. Конечно, есть и другие языки: например, TCL или ICON. Однако эти языки более специфичны и менее популярны, чем те, о которых я только что рассказал.
Выбрать же лучший из них трудно. Всё зависит от особенностей самого приложения. Если оно будет работать с текстом, лучше использовать Perl, если с HTML - то PHP. А если ни то, ни другое, можно воспользоваться "Питоном". "Руби" тоже далеко не плох, но ещё раз обращаю внимание на проблему скорости. Ну и, конечно, не стоит забывать о C++, Java и C#. На них тоже можно писать кросс-платформенные программы.
Вадим СТАНКЕВИЧ
Комментарии
Сейчас многие прикладные программы имеют встроенные языки сценариев для задач автоматизации, для создания фильтров и т.д.. Наример Фотошоп уже имеет возможность писать сценарии, весьма популярен тот же VBA дл MS Офис.
Сейчас появляется всё больше программ со своим внутренним языком сценариев. Но учить каждый не очень то и хочется. Хорошо когда есть нейкие универсальные языки сценариев. Например Gimp имеет не только свой внутренний язык, ни и использует Питон. Blender так же спользуют тот же Питон для своих плагинов. Поэтому я выбрал себе для изучения сейчас Питона.