|
- Иван Шихалев, 28.09.2003, http://fpc.by.ru/ -
Free Pascal, иначе называемый FPC (Free Pascal Compiler) — это 32х-разрядный, кроссплатформенный компилятор языка Pascal. В настоящем обзоре я рассмотрю его основные характеристики и возможности. Free Pascal относится к категории свободного программного обеспечения (free software) и распространяется по лицензии GNU.
Кроссплатформенность
Итак, что в данном случае понимается под кроссплатформеностью? Довольно-таки большое количество платформ, однако. Во-первых, это два типа процессора:
- i386 — процессоры Intel серии 80x86, начиная с 80386;
- m68k — процессоры Motorola серии m68k, соответственно.
Для i386 поддерживаются следующие операционные системы:
- BeOS
-
BSD Unix, а именно:
-
DOS32, т.е. DOS с расширителем для 32х-разрядного защищенного режима. В версии компилятора 1.0.10 поддерживаются расширители:
- Go32v1 — DJ Delorie DOS extender версии 1
- Go32v2 — DJ Delorie DOS extender версии 2
- Lunux
- OS/2
- QNX
- SunOS/Solaris
- Win32
Для m68k:
Версия 1.1 (находящаяся в состоянии разработки нестабильная ветвь) также поддерживает:
- OS/2 via EMX
- Nowell Netware
- MacOS
- WDOSX DOS extender
Надо заметить, что поддержка некоторых целевых платформ в нестабильной версии находится в состоянии разработки и не вполне пригодна для серьезной работы. Также в ветке 1.1 идет разработка компиляции для Linux и других ОС на отличных от i386 и m68k типах процессоров, таких как PowerPC, Sparc и 64х-разрядные процессоры линии x86.
Непосредственно кросскомпиляция поддерживается, однако возникают серьезные проблемы. Так, например, мне не удалось скомпилировать ассемблерные части RTL для Linux используя версии binutils для DOS и Windows.
Возможности языка
В целом возможности языка ориентированы на развитые "промышленные стандарты", а не на ANSI-стандарт языка, как GNU Pascal. Промышленным же стандартом языка Pascal в настоящее время является его диалект Object Pascal от фирмы Borland. Кроме того, Free Pascal поддерживает дополнительные расширения, нехарактерные для Borland Delphi.
Версия 1.0.10 поддерживает следующие возможности:
-
Object Pascal на уровне Delphi 3, и немного от Delphi 4:
- Объектные типы, в том числе классы;
- Длинные строки;
- "Широкие" строки с поддержкой UNICODE. Впрочем, полной поддержки различных кодовых страниц на данный момент нет, т.е. автоматическое преобразование
WideString -> AnsiString и наоборот корректно выполняется только для символов Latin-1;
- Перегрузка (overloading) функций и процедур.
-
Дополнительные расширения:
- Перегрузка операторов сравнения (
<, >, =, <=, >=), арифметических (+, -, *, /, **, div, mod), и оператора присваивания (:=);
- Поддержка
inline-функций и процедур — в отличие от Borland Pascal, такие подпрограммы не требуется писать в машинных кодах;
- Поддержка примитивных макросов;
- Поддержка операторов присваивания с выполнением некоторого арифметического действия (
+=, -=, *=, /=).
В версии 1.1 добавлены средства языка из старших версий Borland Delphi:
- Динамические массивы;
- Интерфейсы.
В настоящий момент все перечисленные средства языка работают удовлетворительно, хотя можно выделить пару проблем: во-первых, незавершено автопреобразование строк UNICODE, и во-вторых, реализация интерфейсов допускает несоответствие требованиям модели COM — единственность ссылки на IUnknown должна отслеживаться разработчиком.
Компиляция
Компиляция происходит весьма быстро, поскольку, как и положено компилятору Pascal, Free Pascal работает в один проход. Так, например, полная сборка самого компилятора на моем компьютере (Celeron 600) занимает около полутора минут.
Для сборки объектных файлов, получающихся в результате компиляции, вызывается внешний компоновщик — GNU ld (или ldw для Windows-платформы). Вообще, дистрибутив Free Pascal попросту включает в себя пакет GNU BinUtils, частью которого является ld. Также данный пакет включает в себя кроссплатформенный ассемблер as (asw), GNU make, компилятор ресурсов для Win32 — windres и другие программы.
Встроенный компоновщик планируется в следующих версиях компилятора, однако ход работ в этом направлении мне неизвестен.
Компилятор командной строки для платформ i386 называется ppc386 (ppc386.exe для DOS и Windows). В дистрибутив входит также "загрузчик" (loader) компилятора, называемый, для любого процессора, fpc (fpc.exe). Таким образом, на любой платформе можно использовать в командной строке fpc <имя файла>.
Компилятор Free Pascal использует оптимизацию. Хотя она и уступает интеллектуальной оптимизации компилятора того же Delphi, однако рутинную, формальную оптимизацию FPC таки выполняет. В частности, можно указать целевой процессор, чтобы использовать расширенный набор команд, отсутствующих в i386, например, команды Pentium II. Для вычислений можно задействовать набор команд MMX или XMM.
Стандартные модули
В состав дистрибутива входят модули, реализующие основную функциональность. Конкретный состав модулей зависит от платформы. Кроме ядра RTL, дистрибутив включает в себя дополнительные модули, называемые "пакетами" (packages), содержащие, например, интерфейс к API SQL-сервера InterBase (пакет ibase), или функции работы с регулярными выражениями (пакет regexpr).
Также наличествует некоторый аналог VCL, точнее ее ядра — основных классов и модулей библиотеки. Библиотека называется FCL — Free Component Library. Содержит как относительно примитивные классы, a-la TStringList, так и классы для работы с базами данных. Впрочем, модули FCL в настоящее время явно недоработаны — содержат пробелы в функциональности и некоторые баги.
Документация
В целом, Free Pascal весьма хорошо документирован.
Документация к версии 1.0.10 состоит из шести частей и распространяется в различных форматах, в том числе — исходники LaTeX. В состав дистрибутива входит документация в виде PDF и HTML. Ниже — описание частей документации.
Free Pascal : Reference guide
Справочное руководство. Содержит описание языка и модуля System. Также описывается модуль ObjPas, автоматически подгружаемый (аналогично System) при выборе режима компиляции Delphi, или ObjFPC.
Free Pascal : Users' manual
Руководство пользователя. Содержит описание процедуры инсталляции, ключей командной строки компилятора, IDE и утилит, входящих в состав дистрибутива, сообщений компилятора об ошибках, ошибках времени выполнения и так далее. Также содержит перечень стандартных модулей для различных платформ.
Free Pascal : Programmers' manual
Руководство программиста. Описываются режимы компиляции, директивы компилятора, вопросы распределения памяти, компоновки, использования ассемблера и так далее.
Free Pascal supplied units : Reference guide
Справочное руководство по стандартным модулям. Довольно подробно описываюся модули RTL, за исключением тех, которые являются интерфейсами к API операционных систем и их компонент.
Free Component Library (FCL) : Reference guide
Справочное руководство по FCL. В настоящий момент содержит описание классов модуля Classes. По всей видимости, в дальнейшем будет расти вместе с доработкой самой FCL. По крайней мере, я на это надеюсь.
FPDoc : Free Pascal code documenter : Reference manual
Руководство по использованию утилиты для автодокументации fpcdoc, входящей в состав дистрибутива.
IDE и утилиты
Вместе с компилятором распространяется IDE (интегрированная среда разработки — Integrated Development Environment) текстового режима, похожее на IDE Turbo/Borland Pascal. В настоящее время, стабильные версии IDE, насколько мне известно, существуют только для DOS и Win32, работа над вариантами для других платформ еще не закончена. IDE содержит встроенную систему отладки — если я не ошибаюсь, с использованием отладчика GNU GDB, — и встроенную справку.
О стабильности IDE, к сожалению, приходится говорить с некоторой натяжкой — проблемы существуют. Однако, в целом пользоваться можно.
Также в состав дистрибутива входят следующие утилиты:
- data2inc — преобразует произвольный файл во включаемый файл (
.inc) для FPC, где соответсвующие данные представлены в виде константы-массива.
- delp — очищает каталог от "временных" файлов, возникающих при компиляции, таких как объектные файлы модулей и
.ppu.
- fpcmake — используется для подготовки make-файлов для GNU make.
- fpdoc — генерирует документацию из модулей Free Pascal в форматах HTML и LaTeX.
- fpmc — компилятор msg-файлов.
- fprcp — pascal-препроцессор для windres.
- h2pas и h2paspp — транслятор заголовочных файлов C и C++ в модули Pascal.
- makeskel — утилита для подготовки скелета xml-описания для fpdoc.
- ppdep — позволяет получить список модулей, от которых зависит некий данный.
- ppudump — извлекает информацию из
.ppu-файлов.
- ppufiles — то же, что ppdep, но не для исходных модулей, как тот, а для
.ppu-файлов.
- ppumove — позволяет собирать библиотеки из
.ppu.
- ptop — форматирование исходников.
- rstconv — конвертирует файлы
.rst, создаваемые компилятором для строк, описанных как resourcestring, в формат GNU gettext .po.
Кроме вышеперечисленных, относящихся собственно к Free Pascal, утилит, в дистрибутив входит, как уже упоминалось, пакет GNU BinUtils.
В настоящий момент находится в процессе разработки RAD для Free Pascal — IDE Lazarus. Существует рабочая версия для Linux. Версия для Win32 пока не работает.
Лицензия
Free Pascal распространяется под лицензией GNU GPL (GNU General Public License), входящие в состав дистрибутива библиотеки модулей — под лиценизией GNU LGPL (GNU Lesser Public License). Таким образом, программы, написанные на Free Pascal, могут распространяться каким угодно образом, в том числе — и закрытым, а исходники самого компилятора доступны для изменения и использования с сохранением условий GNU GPL.
Источники в InterNet
Основной источник информации — официальный сайт Free Pascal — www.freepascal.org, а также его зеркала, в том числе — находящееся в России — www.ru.freepascal.org. On-line документация находится по адресу www.freepascal.org/docs.html.
Домашняя страница GNU BinUtils — sources.redhat.com/binutils.
Информацию о лицензиях и идеологии GNU следует искать на официальном сайте GNU Project — www.gnu.org.
Дистрибутивы и/или исходники рекомендую скачивать с ftp-зеркала в Черноголовке — ftp.chg.org/pub/lang/pascal/fpc.
Официальный сайт проекта Lazarus — lazarus.freepascal.org
|