Разработка программ на Pascal для Palm OS: первые впечатления


Дата: 01/11/2002 @ 08:42:49 MSK
Тема: PalmOS


Наконец-то я дождался появления данной среды разработки для Palm! Поработав с ней некоторое время, готов поделиться первыми впечатлениями.

Паскаль классический, имеет статус freeware. Написан ярым фанатиком DOS и по-видимому Borland Pascal 7.0. Найти PalmOS Pascal Compiler можно по адресу: http://www.total.net/~hkonstas/pp.html.Там же есть ссылка для DOS-оболочки на Палме. DOS-оболочка - один из двух вариантов использования Паскаля.

Pascal для Palm OS

Вот ряд замечаний, которые хочу сделать:

1. Напрочь отсутствует Debugger, так что ориентироваться надо только по сообщениям компилятора и вставленных в текст старых, добрых принтах. (Вспомним времена 80-х :)

2. Конечно же, про русский язык надо забыть. Русский текстовый диалог программ надо менять на английский. Также не советую злоупотреблять русскими комментариями - иногда компилятор из-за них "исходный файл не может открыть". У меня русификатор - PiLoc v.2.23 Full.

3. При зависаниях программ автор рекомендует использовать кнопку "Up" (аналог Ctrl+C для IBM PC). В документации этот важный пункт затерялся где-то в глубине и я обнаружил его только после второго, внимательного прочтения. Впрочем, скрепка при работе с Паскалем не помешает ;).

4. Автор рекомендует для набора текстов *.pas использовать редактор Qed, что ИМХО не есть удобно. Я привык к QuickWord. Только в Qed ошибка в тексте программ высвечивается автоматом, а в QuickWord выдается только строка с ошибкой...

5. Первое отличие Паскаля для Палма от классики я нашел, помучавшись около 2 часов. Оно состоит в том, что переменные циклов надо описывать в теле процедур. Глобальные переменные для этой цели использовать нельзя. Эта хорошая тенденция пришла в классический Паскаль из Object Pascal.

6. Скорость работы. Тут Pascal for Palm меня удивил! Я тестировал ПО на алгоритме решения классической разомкнутой задачи коммивояжера методом полного перебора (есть N городов и известна матрица взаимных расстояний между ними; надо обойти N городов, побывав в каждом ровно один раз, чтобы суммарное пройденное расстояние было минимально возможным). Для 10 городов задача была решена за 13 минут! Для сравнения на IBM PC AT i386-SX 16Mhz эта задача решается тоже за 13 минут. То есть 16МГц процессор моего Palm IIIxe оказался таким же быстрым! Компилятор ничуть не тормозит. Сторожилы вспомнят времена MS DOS десятилетней давности и пустят слезу ностальгии по 286-386 машинам с 16-40МГц процессорами

В свое время я экспериментировал с Psion 3c на предмет решения задачи коммивояжера. Программу перевел на OPL. Так вот, 8Мгц процессор этого Псиона с кодом OPL работал в 10 (!!!) раз медленнее, чем процессор 8088 4.77МГц от IBM PC XT. И еще ненужный OPL пришлось поучить. А вот с Паскалем для Палма можно решать довольно сложные задачи. И язык придется учить весьма полезный.

7. Как быть с задачами, которые решаются более 3-х минут (чтобы Палм не засыпал)? Оказывается, что Паскаль так глубоко "залезает" во внутренности Palm OS, что блокируется засыпание. Закончив вычисления, Палм выдает результаты и мгновенно засыпает. Здесь выход только один (не смотреть же на экран десятки минут?!) - подать звуковой сигнал после завершения расчетов. Я, увы, забыл как это делается в классическом Паскале. Функция незасыпания не реализована в некоторых программах, где она нужна. Например, в ChessGenius при установках долгого думания Палм засыпает после 3-х минут и его приходится оживлять кнопкой Power, после чего Палм продолжает думать надо очередным ходом... Кстати, PsionChess на Псионах не дают заснуть КПК, пока ход не сделают, что сопровождается звуковым сигналом... Паскаль для Палм - первая известная мне незасыпающая программа Палма.

Выявленные различия между Турбо Паскалем и Pascal for Palm

Увы, различия довольно существенны, хотя, конечно, нефатальны. Про переменные циклов я уже сказал. Далее, Pascal for Palm не понимает типизированных констант. Такое вот описание не проходит:

Const
Pi: real = 3.1415926;

Кстати, нет многих функций Турбо-Паскаля. Того же числа Pi. В принципе, это тоже не очень страшно, т.к. Pascal for Palm понимает только однин тип вещественных чисел с плавающей точкой и можно писать

Const
Pi = 3.1415926;

Но самое для меня пока неприятное (на чем сейчас буксую) - Pascal for Palm не хочет цеплять математические функции библиотеки MathLib.prc v.1.1. Хотя другие программы (типа QuickSheet) цепляют без проблем. Если mathlib подцепить удастся, то откроется доступ к функциям, недоступным юзерам Турбо-Паскаля (asin, acos, и т.д.)

Лично для моих задач целочисленного программирования MathLib.prc не очень то и нужна, но важно другое - чистота эксперимента. Проверить работу Паскаля с функциями от вещественных чисел с плавающей точкой мне так и не удалось. Несмотря на заявления автора Паскаля, библиотека MathLib.prc v.1.1 подключается, но как-то не так, как надо.
Например, такая вот программа

Program realsin;
var x:real;
begin
Write('X= '); read(x);
Writeln('Sqrt X= ', sqrt(x));
Wruteln('Exp X= ', exp(x));
x:=x*3.1415926/180.0;
Writeln('Sin X= ', sin(x))
end.

компилируется нормально, но при прогоне выдает следующий листинг:

X= 1
Sqrt X= 0
Exp X= -1964
Sin X= -1966

Лихо работают вещественные библиотечные функции, не правда ли? Вопрос: удалось ли кому-нибудь правильно зацепить библиотеку MathLib.prc v.1.1? Может какую директиву надо дать компилятору? Подскажите!

РЕЗЮМЕ: если раньше я не мог рекомендовать ни одного КПК для программирования на классическом Pascal (ну разве лишь Sharp Zaurus на Linux), то теперь можно обойтись простым Пальмом (правда, с Palm OS не ниже 3.5; надо уточнить). Палмы становятся просто находкой для бюджетных (околобюджетных) средних школ, где цена КПК имеет немаловажное значение - видел сообщения в конференциях на предмет покупки КПК для школ с целью изучения классических языков программирования.

P.S. Пока не проверил, насколько интенсивно Pascal for Palm "ест" батарейки при сложных расчетах.

palmq.ru



Эта статья с сайта PalmQ Online
http://www.palmq.ru

URL этой статьи:
http://www.palmq.ru/article.php?sid=872

Партнеры проекта: