LinuxBegin.ru - offline-версия от 26.04.2004
Главная | Все темы | Все статьи | Ссылки | Аналоги Windows-программ в Linux | Top 20

Что такое Free Pascal, и с чем его едят?
(Основы программирования в Linux.)


- Иван Шихалев, 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, а именно:
    • FreeBSD
    • NetBSD
    • OpenBSD
  • 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:

  • Amiga
  • Atari
  • PalmOS

Версия 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

Просмотров: 1878  |  Рейтинг статьи: 5 (Голосов: 3).
5
Дата размещения статьи: 2003-10-01 09:07:00



5 последних поступлений в раздел Основы программирования в Linux.:

29.12.03: Однострочник месяца на Perl: Приключение с произвольными архивами ("Резолв Дот Конф, простой... м-м-м, скажем, сисадмин. Недавно его жесточайшим образом заставили устан...)
29.12.03: Создание man-страниц (Работа каждой программы, запускаемой из UNIX shell'а, описана в man-странице. В этой заметке мы рассм...)
10.12.03: Новая рассылка "Программирование в Linux с нуля" (Автор рассылки (программист под Linux со стажем) поэтапно научит читателей профессиональному програм...)
06.12.03: Занимательное пингвиностроение. Фундамент (Этим коротким вступлением я собираюсь начать небольшой цикл статей, посвященный некоторым аспектам на...)
22.11.03: OSS API - Цифровой звук (Крайне рекомендуется ознакомиться с главой Programming Guidelines раздела Introduction документации п...)

Комментарии:

LinuxBegin.ru © 2003-2004 Valery V. Kachurov | Условия использования материалов | О проекте