Рассказ о Pocket Programming Language
Вступление
Не мне вам рассказывать о том, что роль мобильных устройств в жизни среднестатистического современного человека не только не падает, но даже и растёт. Хотя, казалось, куда далее? Однако, как оказывается, чем "умнее" становятся карманные девайсы, чем больше функций они имеют, тем сложнее от них отказаться. Поэтому у пользователей подобных устройств всё острее встаёт вопрос о софте для своих КПК, смартфонов и коммуникаторов. И рынок софта реагирует на их нужды - и, следует признать, реагирует весьма и весьма оперативно. Однако разработчики этого самого софта, в свою очередь, нуждаются в качественных инструментах, с помощью которых они смогут удовлетворить нужды пользователей. В общем-то, нельзя сказать, что таких инструментов нет или совсем мало - нет, в последнее время их становится всё больше, и это, на мой взгляд, хорошая тенденция. Однако эти продукты часто остаются в тени больших программных комплексов для "большого" программирования - а, значит, нужно их из этой зловещей тени вытаскивать. Именно так я сейчас и поступлю с замечательным продуктом под названием Pocket Programming Language.
Первые впечатления
Найти PPL можно в Интернете по адресу www.arianesoft.ca. Там можно посмотреть общую информацию об этом программном продукте, а также скачать дистрибутив его пробной версии, который имеет размер в районе двадцати мегабайт. Разрабатывать приложения можно под платформы PocketPC2000, PocketPC2002, Smartphone 2002, Windows Mobile 2003, Smartphone 2003, а также Windows Mobile 5 и 6. Конечно, было бы неплохо, если бы поддерживалась такая мощная и популярная платформа, как Symbian в разных её ипостасях, но, в принципе, такая всеобъемлющая поддержка разных версий мобильной Windows уже внушает оптимизм.
После установки программы на экране появляется вполне симпатичная и современная интегрированная среда разработки (IDE), которая похожа на многие современные среды разработки, такие, как Visual Studio, NetBeans, CodeGear RAD Studio. В среде присутствует визуальный дизайнер форм, который, кстати, можно увидеть на скриншоте к статье, а также мощный редактор исходного кода (об особенностях кода для PPL я расскажу чуть дальше). Есть, конечно же, и такая необходимая для любой интегрированной среды разработки вещь, как отладчик. Отладку при этом можно производить как на самом ПК, где создаётся мобильное приложение, так и на КПК - вполне нормальная практика для сред кросс-программирования1. Есть в среде и такая полезная штука, как менеджер проектов. Он, конечно, не так важен, как отладчик, но его наличие говорит о том, что продукт претендует уже на какой-то уровень.
Стандартных компонентов для создания GUI2 не слишком много - всего 22. Но, в общем-то, поскольку речь идёт о программировании для мобильных платформ, а также только о визуальных компонентах, этого вполне достаточно. Кроме того, их список всегда можно расширить с помощью специальных ActiveX-компонентов.
В среде присутствует и поддержка синхронизации файлов на локальном компьютере и PocketPC; есть в IDE PPL и встроенный проводник по содержимому файловой системы мобильного устройства. А помимо отладчика, имеются профилировщик и анализатор используемой памяти.
Но среда разработки - хорошая, добротная, - не единственное, что предлагают разработчикам мобильных приложений авторы продукта, о котором я сейчас веду рассказ. Посмотрите на название Pocket Programming Language. Какое слово здесь ключевое? Language. То есть, Programming Language - язык программирования. Да, PPL предлагает разработчику собственный язык программирования, и сейчас - рассказ именно о нём.
Собственно Language
Авторы PPL утверждают, что им удалось создать наиболее простой и наиболее подходящий для разработки мобильных приложений язык программирования - самый простой из существующих "мобильных" языков. По словам всё тех же создателей языка, PPL - это синтез Паскаля, Си, Бэйсика и Фортрана, но мне лично кажется, что основным прародителем стал Си, если не сказать Си++. Дело в том, что PPL - это объектно-ориентированный язык программирования. В целом же, PPL наиболее напоминает PHP, в том числе и тем, что текст программы на обоих языках изобилует значками долларов ($). В общем, выглядит это примерно так:
func employe.CalcSalary local(Age$, i$, Salary$, BaseSalary$, Experience$); if ((Age$ >= 18) and (Age$ < 30)) i$ = 5000; else if ((Age$ >= 30) and (Age$ < 40)) i$ = 15000; else if ((Age$ >= 40) and (Age$ < 65)) i$ = 25000; end; i$ += BaseSalary$; Salary$ = i$ + (i$ * ((Age$ * (Experience$ / 40)) / 100)); return (Salary$); end;
Теперь немного о том, во что этот код превращается после того, как он написан. PPL не компилирует его непосредственно в машинный код, вместо этого эксплуатируется та же идея, что и в технологиях .NET и Java - то есть, код транслируется в некоторый промежуточный P-код, который уже потом выполняется интерпретатором. На мой взгляд, это очень хорошая идея, поскольку за памятью на мобильных платформах нужно очень тщательно следить. Поэтому весьма и весьма удобно, когда можно все заботы об этом спихнуть на интерпретатор, а самому не забивать голову слежением за каждым кусочком памяти, а сосредоточиться, вместо этого, на непосредственной логике работы программы. Тем более, что скорость работы интерпретатора P-кода у PPL весьма недурна.
Среди других особенностей языка хочется отметить отсутствие жёсткого контроля за типами, что, на мой взгляд, нельзя записать в безоговорочные плюсы. Зато плюсом можно считать реализованную "родную" поддержку списков, надстройку над Windows API под названием SWAPI, которая позволяет ускорить написание приложений, предоставляя разработчику набор часто используемых функций, реализованных на базе Windows API. Поддерживается структурированная обработка исключений в виде блоков try...except...finally...end.
Ещё одна интересная особенность PPL - возможность написания низкоуровневого кода на Ассемблер-подобном языке, который так и называется - PPL Assembler, или, если коротко, то PASM. Для работы с кодом на PASM в тексте программы должны использоваться специальные функции, которые будут подготавливать код к выполнению, запускать его на выполнение и освобождать память после него. Называются они ASM(), CallASM() и FreeASM() - думаю, из названий вполне понятно, какая из них за что отвечает. Регистры и команды в Ассемблере PASM соответствуют регистрам ARM и x86-процессоров, которые используются для запуска мобильных систем Windows. Соответственно, версии кода для разных процессорных архитектур будут несколько отличаться, хотя авторы PPL и говорят, что процент таких отличий будет совсем не велик, поскольку они приложили много усилий к тому, чтобы обеспечить кросс-процессорность PASM'а.
Однако, нельзя, на мой взгляд, говорить о каком-либо языке программирования в отрыве от стандартной библиотеки функций. PPL, конечно, тоже не является исключением.
Стандартные функции
Стандартная библиотека функций PPL довольно обширна: в ней есть самые разные виды функций. Математические, строковые, файловые... Есть функции для работы с указателями, которые PPL, несмотря на свою объектную ориентированность, поддерживает; функции для работы с формами, списками, матрицами, регулярными выражениями, пакетной файловой системой и COM-объектами (включая, конечно же, и ActiveX-компоненты). Но, пожалуй, самая интересная часть стандартной библиотеки Pocket Programming Language - это Game API, инструментарий для разработки мобильных игр.
По словам разработчиков PPL, с помощью Game API разрабатывать игры можно за считанные минуты. Ну это, конечно, в любом случае приукрашенные данные, но на самом деле полезных вещей в этом наборе функций, как ни крути, немало. Она содержит в себе графические и звуковые возможности, причём графика базируется на библиотеке PocketFrog, а звук - на библиотеке Hekkus Sound System. Помимо этого, в библиотеке присутствует такая немаловажная для игр вещь, как физика - разработчик может не заботиться о создании реалистичного поведения игровых объектов "с нуля", а воспользоваться готовыми решениями. Кстати, в поставке Pocket Programming Language есть очень симпатичный пример с жёлтыми шариками, который иллюстрирует применение на практике физики из игровой библиотеки. В целом же, библиотека, поддерживающая физику, спрайты, поверхности, шейдеры (о них говорится на сайте разработчиков) и звуки, должна, по идее, стать весьма неплохим помощником разработчика мобильных игр.
Резюме
Pocket Programming Language, как видно уже из написанного, конечно, не идеален. Однако этот продукт весьма неплохо подходит для разработки приложений для Windows Mobile. Правда, я не уверен, что PPL выдержит конкуренцию со стороны .NET Compact Framework. Эта технология, мало того что продвигается корпорацией Microsoft, так ещё и позволяет разрабатывать приложения быстрее. Впрочем, у PPL есть такие преимущества, как скорость и малый размер получаемых приложений. Да и стоит PPL всё же поменьше, чем Microsoft Visual Studio. Так что, думаю, будущее у PPL есть, и потому написание коммерческих приложений (и особенно игр) на нём не будет напрасной тратой сил, времени и денег.
Вадим СТАНКЕВИЧ,
[email protected]
1 Кросс-программирование -
разработка приложений для одной
платформы из-под другой. В
современном мире такая разработка
характерна чаще всего для
встраиваемых и мобильных платформ.
2 GUI - Graphical User Interface, графический интерфейс пользователя.
Горячие темы