Что такое Free Pascal, и с чем его едят?
Free Pascal, также известный как FPC (free pascal compiler), а ранее как FPK - свободно распространяемый в исходных текстах 32-разрядный кроссплатформенный компилятор языка Pascal.
Первое, что впечатляет,
это его кроссплатформенность: поддерживаются не две-три операционных системы,
а сразу шесть ОС и два типа процессоров. На базе i386 - Win32, DOS, Linux,
FreeBSD и OS/2. На базе процессора Motorola 680x0 - AmigaOS.
Что это значит?
Это значит, что под все эти операционные системы вы можете писать программы,
пользуясь одним языком и одной библиотекой базовых функций. А зачастую,
вообще, для переноса программы или библиотеки достаточно ее перекомпилировать.
Думаю, что особенно приятно должно быть инженерам и научным работникам
- если не вдаваться в интерфейсные заморочки, любые расчеты можно написать
один раз, не задумываясь над тем, под какой операционной системой они
будут выполняться.
|
Первое, что впечатляет,
это его кроссплатформенность: поддерживаются не две-три операционных системы,
а сразу шесть ОС и два типа процессоров. На базе i386 - Win32, DOS, Linux,
FreeBSD и OS/2. На базе процессора Motorola 680x0 - AmigaOS.
Что это значит?
Это значит, что под все эти операционные системы вы можете писать программы,
пользуясь одним языком и одной библиотекой базовых функций. А зачастую,
вообще, для переноса программы или библиотеки достаточно ее перекомпилировать.
Думаю, что особенно приятно должно быть инженерам и научным работникам
- если не вдаваться в интерфейсные заморочки, любые расчеты можно написать
один раз, не задумываясь над тем, под какой операционной системой они
будут выполняться.
|
Существует мнение,
что бесплатные и открытые програмные продукты менее надежны, чем коммерческие.
К сожалению, в большинстве случаев это действительно так.
Однако и здесь Free
Pascal является приятным исключением. Лично мне пришлось столкнуться в
лоб только с одним глюком, причем только тогда, когда я использовал возможность
Free Pascal'я работать не с родным для него GNU-ассемблером, а с TASM.
Bug-list на сайте freepascal.org
весьма обширен, однако подавляющее большинство багов обычному программисту
никогда не встретится. Кроме того, в отличие от коммерческих систем эти
ошибки не скрываются и исправляются командой разработчиков.
Сообщения об ошибках,
выдаваемые компилятором - четкие и информативные, с указанием номера строки
и позиции в ней, где обнаружена ошибка. Сделано это в таком формате, что
например, редактор UltraEdit-32 позволяет автоматически перейти к нужной
строке (кстати, очень хороший редактор для программирования, жаль только,
что не бесплатный).
Компилятор сам управляет
процессом ассемблирования и сборки, так что пользоваться им может и начинающий
программист, привыкший к интегрированным средам.
|
Базовая библиотека
включает в себя стандартные модули, реализующие управление памятью, работу
с файловой системой, управление консольным вводом/выводом, работу со строками
и датами, математические функции, обработку исключений и интерфейс к API
поддерживаемых операционных систем. При этом все вышеперечисленное, кроме
API, для различных систем реализовано единообразно a-la Borland Pascal.
Если сравнивать
с Turbo Pascal, то мы видим модули CRT, DOS, Graph (реализует работу с VGA-графикой), Strings, Objects. Сравнивая
с Borland Delphi, видим соответствующие модули SysUtils и Classes. Для
работы с API в базовой библиотеке предусмотрены модули Linux, Windows и GO32 (API DOS-расширителя GO32v2).
|
Существуют также
дополнительные библиотеки модулей, часть из которых включается в дистрибутив
Free Pascal, а часть - нет.
Несколько библиотек,
находящихся пока в состоянии разработки, предназначено для объектной реализации
GUI-интерфейса для Windows и XWindow.
Существует аналог
Turbo Vision - Free Vision, однако пока он недоступен: первоначальная
версия содержала много кода от Borland, и сейчас перерабатывается для
лицензионной чистоты.
В процессе разработки
библиотека доступа к базам данных. Предполагаются InterBase, MySQL и Postgress.
Сейчас пока можно с ними работать только через их API.
В дистрибутив входят
модули, облегчающие написание CGI-программ - разбор HTTP-заголовка и т.д.,
модули упаковки и распаковки файлов в формате zip, работа с SVGA-графикой
и OpenGL, и многое другое.
|
Free Pascal распространяется
на условиях GNU General Public License (GNU GPL). Модули и библиотеки
распространяются на условиях GNU Library General Public License (GNU LGPL),
последняя версия данной лицензии называется GNU Lesser Public License.
Ознакомиться с ними
и узнать, что за зверь GNU можно на gnu.org или gnu.ru.
|
Впечатлившись кроссплатформенностью,
мы скачиваем документацию, дабы поподробнее узнать о возможностях компилятора.
Обычно freeware компиляторы особыми изысками не балуют - совместимость
с Turbo Pascal 7.0 практически максимум их притязаний. Конечно, и TP -
шаг вперед по сравнению со стандартами Pascal и Extended Pascal, однако
мы живем в мире уже других стандартов, так называемых "промышленных".
"Промышленный стандарт" на Pascal сейчас - это последняя версия Borland
Delphi, то есть Object Pascal со всеми прелестями классов и настоящего
объектного программирования.
Так вот, Free Pascal
поддерживает классы и RTTI. Поддерживает также перегрузку (overloading)
процедур и функций и обработку исключений в try-блоках.
Поддерживает он и длинные строки (тип ansistring)
по модели Delphi.
В общем, до Delphi
Free Pascal "не дотягивает" совсем чуть-чуть: отсутствует поддержка динамических
массивов, "широкие строки" (WideString) для работы
с Unicode, и поддержка OLE Automation. Однако все эти возможности группа
разработчиков намерена включить уже в следующий релиз - версию 1.2. Впрочем,
я думаю, что с OLE Automation они скорее всего подзадержатся, поскольку
это нужно только на одной платформе. Поживем, увидим.
Зато присутствуют
такие вкусности, как перегрузка операторов (+, -, *,
/, **, =, <, >, <=, >=, :=), последний обеспечивает
также скрытое преобразование типов, посему с ним надо обращаться осторожно.
Inline- процедуры, функции и операторы, причем
не нужно извращаться, как в Turbo Pascal, и писать в машкодах. Правда,
действуют они только в пределах модуля - вне его вызываются как обычные.
|
А теперь о грустном
- IDE, можно сказать, отсутствует. Для Win32 и DOS существует консольная
оболочка fp, построенная по образу и подобию Turbo Pascal 7.0.
Единственное достоинство этой оболочки - декларированная интеграция с
gdb - GNU-отладчиком. Сам я этим отладчиком не пользуюсь, однако
в конференциях встречал жалобы, что интеграция эта весьма несовершенна.
Отладчик прилагается
в дистрибутиве (см. выше). К сожалению, GNU-отладчик не ориентирован на
FreePascal, зато FreePascal ориентирован на него. Лично я отладчиком стараюсь
не пользоваться, предпочитая "метод вилки".
Ассемблер и компоновщик
- GNU as и ld (для Win32 - asw и ldw, соответственно).
Без них - никак. Дело в том, что FreePascal-компилятор сначала формирует
ассемблерный код, затем вызывает as, который компилирует его в
.obj, после чего вызывает ld.
Из прочих утилит,
прилагаемых к компилятору, отмечу h2pas - переводчик С-шных заголовочных
файлов .h в модули .pas; и компилятор
ресурсов windres - аналог brcc32 из поставки Delphi.
|
Должен заметить,
что ситуация с IDE не такая безнадежная, как может показаться. Существуют
отдельные проекты, некоторые из которых весьма неплохи, однако характеризуются
хотя бы одним из трех недостатков: написаны не на FreePascal (хороший
пример - редактор-оболочка Dev-Pascal,
написанный на Delphi), не распространяются в исходниках, или недостаточно
отлажены, попросту говоря, глючат. Очевидно, любой из этих причин достаточно,
чтобы не вносить эти инструменты в дистрибутив.
|
Справка Free Pascal
распространяется с дистрибутивом в двух форматах: PDF и HTML, при желании
можно скачать отдельно справку и в других форматах. И в том и в другом
виде она хорошо структурирована и прекрасно читается. Состоит из четырех
книг:
"Руководство программиста",
которое описывает различные аспекты программирования, такие как директивы
компилятора, использование ресурсов, использование встроенного ассемблера
и т.д.
"Справочник", где
описывается язык Pascal в его Free Pascal диалекте и содержимое модулей
System и ObjPas.
"Справочник модулей".
Описываются модули: CRT, DOS, DXELoad, Emu387, GetOpts, GPM, GO32, Graph, HeapTrc, IPC, Linux, Math, MMX, MSMouse, Objects, Ports, Printer, Sockets, Strings, SysUtils.
"Руководство пользователя",
где рассматриваются такие вопросы, как инсталляция Free Pascal, ключи
командной строки, файл настроек и проч.
|