Главным инструментом
любого программиста является компилятор. Сейчас большинство печатных изданий
уделяет основное внимание таким монстрам как 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 и доступен в исходных текстах.