Что такое Free Pascal, и с чем его едят? |
18.04.2005 Иван Шихалев |
Free Pascal, иначе называемый FPC (Free Pascal Compiler) — это 32х-разрядный, кроссплатформенный компилятор языка Pascal. В настоящем обзоре я рассмотрю его основные характеристики и возможности. Free Pascal относится к категории свободного программного обеспечения (free software) и распространяется по лицензии GNU.
Итак, что в данном случае понимается под кроссплатформеностью? Довольно-таки большое количество платформ, однако. Во-первых, это два типа процессора:
Для i386 поддерживаются следующие операционные системы:
Для m68k:
Версия 1.1 (находящаяся в состоянии разработки нестабильная ветвь) также поддерживает:
Надо заметить, что поддержка некоторых целевых платформ в нестабильной версии находится в состоянии разработки и не вполне пригодна для серьезной работы. Также в ветке 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 поддерживает следующие возможности:
WideString -> AnsiString
и наоборот корректно выполняется только для символов Latin-1;<, >, =, <=, >=
), арифметических (+, -, *, /, **, 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. Ниже — описание частей документации.
Справочное руководство. Содержит описание языка и модуля System
. Также описывается модуль ObjPas
, автоматически подгружаемый (аналогично System
) при выборе режима компиляции Delphi
, или ObjFPC
.
Руководство пользователя. Содержит описание процедуры инсталляции, ключей командной строки компилятора, IDE и утилит, входящих в состав дистрибутива, сообщений компилятора об ошибках, ошибках времени выполнения и так далее. Также содержит перечень стандартных модулей для различных платформ.
Руководство программиста. Описываются режимы компиляции, директивы компилятора, вопросы распределения памяти, компоновки, использования ассемблера и так далее.
Справочное руководство по стандартным модулям. Довольно подробно описываюся модули RTL, за исключением тех, которые являются интерфейсами к API операционных систем и их компонент.
Справочное руководство по FCL. В настоящий момент содержит описание классов модуля Classes
. По всей видимости, в дальнейшем будет расти вместе с доработкой самой FCL. По крайней мере, я на это надеюсь.
Руководство по использованию утилиты для автодокументации fpcdoc, входящей в состав дистрибутива.
Вместе с компилятором распространяется IDE (интегрированная среда разработки — Integrated Development Environment) текстового режима, похожее на IDE Turbo/Borland Pascal. В настоящее время, стабильные версии IDE, насколько мне известно, существуют только для DOS и Win32, работа над вариантами для других платформ еще не закончена. IDE содержит встроенную систему отладки — если я не ошибаюсь, с использованием отладчика GNU GDB, — и встроенную справку.
О стабильности IDE, к сожалению, приходится говорить с некоторой натяжкой — проблемы существуют. Однако, в целом пользоваться можно.
Также в состав дистрибутива входят следующие утилиты:
.inc
) для FPC, где соответсвующие данные представлены в виде константы-массива..ppu
..ppu-
файлов..ppu-
файлов..ppu
..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.
Основной источник информации — официальный сайт 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