Free Pascal Compiler - обзор

Главным инструментом любого программиста является компилятор. Сейчас большинство печатных изданий уделяет основное внимание таким монстрам как Microsoft Visual C++ и Borland Delphi, забывая при этом о других, бесплатных продуктах. И забывая, к сожалению, о том, что для написания коммерческих программ программист должен обладать легальной копией такого компилятора. Увы, большинству российских разработчиков-одиночек это просто не по карману. Каково же решение? Использовать бесплатный компилятор! Для C++ выбор достаточно велик - и, главное, есть масса информации про альтернативные решения; а вот для Паскаля всё не так хорошо.
В этой статье будет рассказано об очень перспективном бесплатном компиляторе Паскаля - Free Pascal Compiler.


Системные требования
В официальной документации написано, что для минимальной работоспособности потребуется процессор не ниже Intel 80386 и 4МБ памяти - это действительно минимальная конфигурация для запуска компилятора, для нормальной работы лучше иметь железо не хуже, чем Pentium-75/16МБ. Требуемое место на диске зависит от того, что вы будете устанавливать - можно работать с 8МБ (имея при этом функциональность, превосходящую Borland Pascal), можно поставить и на 90МБ - и пользоваться всеми возможностями этого замечательного продукта. 

Инсталляция
Сначала, конечно, нужно достать дистрибутив. Это можно сделать без особых проблем: он всегда доступен для свободного скачивания со страницы http://www.freepascal.org/download.html (на момент написания этих строк, последней версией была 1.0.4). Существуют пакеты для DOS, Windows, Linux, OS/2 и FreeBSD. Если вы будете писать под DOS или Windows (думаю, что большинство из вас сделает именно так), то лучше сразу скачать один 22-х мегабайтный архив ftp://ftp.freepascal.org/pub/fpc/dist/Dos/dosw32104full.zip, в который включены наборы для этих двух операционных систем.
Теперь, наконец, дистрибутив скачан, распакован, и можно приступать непосредственно к инсталляции.
Текстовый инсталлятор под Dos, Windows и Linux выглядит одинаково.

Если вы ставите Free Pascal впервые, то рекомендую выбрать для инсталляции все пакеты дистрибутива. Разберёмся повнимательнее, что тут к чему:

Из меню Common хорошо бы поставить все примеры; и, если вы не прочь почитать англоязычную документацию (очень, кстати, помогает) - отметьте галочкой и Documentation (PDF-вариант гораздо лучше смотрится в печатном виде). 
Вкладку Sources обсуждать не стоит - это исходный код всего вышеперечисленного (даже самого компилятора) и нужно обязательно установить оттуда всё, без всяких там <если:>. Ведь только ради этого стоит скачать и установить этот продукт!

После инсталляции хорошо бы ещё создать в каталоге bin\go32v2 файл fpc.bat со строчкой вида: @ppc386 -Tgo32V2 %1 и файл fpcw.bat соответственно с: @ppc386 -Twin32 %1
Думаю, их назначение понятно - облегчить программисту жизнь, не заставляя его каждый раз набирать дикую командную строку. Также хорошо бы прописать в PATH путь к каталогу bin\go32v2.

Что у нас в меню?
Чем же отличается FPC от Borland Pascal или Delphi? Чем придётся заплатить за бесплатность? На самом деле немногим - ну разве что нет полноценной IDE. А вот в остальном - этот компилятор успешно тягается даже с Delphi; это полноценная реализация объектно-ориентированного Паскаля с поддержкой классов и механизма обработки исключений. 
Итак - основные характеристики:

Оптимизация.
Здесь, конечно, гораздо лучше показать всё на конкретном примере, чем пытаться объяснять словами. Для проверки я написал небольшую программку, интенсивно работающую со строками. Результаты компиляции и прогона были следующие:
Delphi 5.0: 
Компиляция: 1718 мс, прогон: 16.9 мс.
При этом размер EXE-файла составил 18944 байта.
FPC 1.0.4 [2000/12/30]:
Компиляция: 1677 мс., прогон: 16.8 мс.
Размер кода: 18432 байта. (компилировалось с ключами -TWin32 -Or -Ou -Op3).

Налицо незначительный перевес в пользу FPC. С Borland Pascal подобное сравнение бессмысленно, т.к. он генерирует 16-битный код и безнадёжно отстаёт. 

Особенности синтаксиса и совместимость.
В официальной документации FPC сказано, что синтаксис языка максимально приближен к BP; но поскольку в FPC было введено много дополнений (и к тому же - это 32-битный компилятор), существуют и некоторые ограничения на совместимость:

Protected, Public, Published, Try, Finally, Except, Raise относятся к зарезервированным словам. Поэтому нельзя называть функции или переменные такими именами. Если всё же нужно скомпилировать старый Turbo Pascal'евский код - можно использовать ключ -So при компиляции.

Нововведения
По сравнению с Borland Pascal, и даже с Delphi - введено много расширений, большей частью позаимствованных из C и C++.

* Внутри функции можно использовать имя этой функции как переменную (!). 
Function A:Longint;
Begin
A:=12;
While A>4 Do Begin
{:}
End;
End;

Этот пример, конечно, будет работать под Borland Pascal, но компилятор подумает, что a>4 это рекурсивный вызов. Чтобы указать рекурсивный вызов под FPC, нужно указать () после имени функции:

While A()>4 Do

* Вызову Exit можно передавать непосредственно возвращаемое значение функции
Function A:Longint;
Begin
Exit(32167);
End;

* Поддерживается перегрузка функций
Function A(B:Longint):Longint;
Begin
End;

Function A(B:Real):Longint;
Begin
End;

* Поддерживается перегрузка операторов.
Operator = (A,B:SearchRec) R:Boolean;
Begin
If (A.Name=B.Name) And
(A.Attr=B.Attr) And
(A.Size=B.Size) And
(A.Time=B.Time) Then R:=True
Else R:=False;
End

* Процедуры работы с файлами поддерживают длинные имена файлов на файловых системах FAT16 и FAT32.

И это всё?
Некоторые спросят: "A как же работать с графикой и звуком? " Поспешу их обрадовать - есть множество всевозможных библиотек для графики и звука (и для многого другого). Очень хороша графическая библиотека GraphiX, которую просто глупо сравнивать со стандартным юнитом Graph. Для работы со звуком можно использовать fMod (в некоммерческих продуктах) и ISS (в shareware). Если и этого не достаточно - возможна компоновка к вашей программе статической библиотеки, написанной на C/C++ (с помощью директивы {$L <имя библиотеки>}. 

На сайте http://www.freepascel.org в разделе Contributed units можно найти библиотеки и проекты практически на все случаи жизни - самое приятное, что почти все их можно использовать совершенно бесплатно (ну, разумеется, хорошо бы упомянуть соответствующего автора в своей программе, и вообще поставить его в известность).

IDE
Отсутствие работоспособной текстовой (и графической) IDE можно компенсировать различными способами. Я предлагаю для этого просто использовать ваш любимый текстовый редактор. Я, например, набираю код в редакторе Borland Pascal - там удобная подсветка синтаксиса, под рукой все необходимые инструменты. Можно использовать редактор Far'a, можно настроить RhIDE - это уже кому как нравится.

Вывод
Какие впечатления мы имеем после беглого обзора? FPC по праву можно назвать хорошим компилятором (вернее сказать - <диалектом>) Паскаля. Этот продукт очень быстро развивается, и его качество уже не уступает коммерческим конкурентам. Если при его использовании вы найдёте какой-нибудь баг - не поленитесь сообщить о нём в команду разработчиков; они очень оперативно исправляют ошибки!

Напоследок приведу текст упомянутой процедуры printf():

Procedure PrintF(Pattern:String;
Values:Array of Const):String;
Var I,J:Byte;
R,S:String;
Begin
R:=Pattern;
For I:=0 To High(Values) Do
With Values[I] Do
Case vType Of
vtInteger:If Pos('%d',R)>0 Then Begin
Str(vInteger,S);
J:=Pos('%d',R);
Delete(R,J,2);
Insert(S,R,J);
End;
vtString:If Pos('%s',R)>0 Then Begin
J:=Pos('%s',R);
Delete(R,J,2);
Insert(vString^,R,J);
End;
Else WriteLn('Not supported');
End;
WriteLn(R);
End;

Применять можно хотя бы так: printf('%s %d-bit %s',Hello,32,World);

Ссылки
http://www.freepascal.org/ - официальный сайт поддержки и распространения Free Pascal Compiler.
http://http://www.graphix4pascal.de.vu/ - библиотека GraphiX.
http://scenergy.dfmk.hu/inqcoders - Inquisition Sound Server (ISS), проигрыватель XM-модулей для DOS.
http://members.yline.com/~tom_at_work/index.html - библиотека для работы с DirectX.
http://pixel32.box.sk - графический редактор в стиле Photoshop, написанный на Free Pascal.
http://http://www.freecommander.newmail.ru/ - консольный файловый менеджер; написан под FPC и доступен в исходных текстах.