Руководство программиста Free Pascal


Руководство программиста для Free Pascal, Версия 3.0.4
Версия документа 3.0.4

Сентябрь 2017 (оригинал)
(перевод на русский язык) Не окончен

Авторы:
Michaël Van Canneyt

Переводчики:
Поляков Андрей Валерьевич
Google переводчик
Чигрин Виталий Николаевич (адаптировал и переработал)
 
 
 


© GNU

ОБ ЭТОМ ДОКУМЕНТЕ

1. ДИРЕКТИВЫ КОМПИЛЯТОРА

1.1 Введение

1.2. Локальные директивы

1.2.1. $A или $ALIGN : Выравнивание данных

1.2.2. $A1, $A2, $A4 и $A8

1.2.3. $ASMMODE : Режим ассемблера (только для Intel 80x86)

1.2.4. $B или $BOOLEVAL : Полная проверка логических выражений

1.2.5. $C или $ASSERTIONS : Поддержка формальных утверждений

1.2.6. $BITPACKING : Включить битовую упаковку

1.2.7. $CALLING : Определить соглашение о вызовах

1.2.8. $CHECKPOINTER : Проверять значения указателя

1.2.9. $CODEALIGN : Установить выравнивание кода

1.2.10. $COPERATORS : Разрешить C-подобные операторы

1.2.11. $DEFINE или $DEFINEC : Определить идентификатор

1.2.12. $ELSE : Переключатель условной компиляции

1.2.13. $ELSEC : Переключатель условной компиляции

1.2.14. $ELSEIF или $ELIFC : Переключатель условной компиляции

1.2.15. $ENDC : Завершение условной компиляции

1.2.16. $ENDIF : Завершение условной компиляции

1.2.17. $ERROR или $ERRORC : Генерировать сообщение об ошибке

1.2.18 $ENDREGION: Конец разбираемого региона

1.2.19. $EXTENDEDSYM: Игнорируемый

1.2.20 $EXTENDELSYM: Игнорируемый

1.2.21. $F : Дальний или ближний вызов функций

1.2.22. $FATAL : Генерировать сообщения о фатальных ошибках

1.2.23. $FPUTYPE : Выбрать тип сопроцессора

1.2.24. $GOTO : Поддерживать Goto и Label

1.2.25. $H или $LONGSTRINGS : Использовать AnsiStrings

1.2.26. $HINT : Генерировать сообщение с подсказкой

1.2.27. $HINTS : Разрешить подсказки

1.2.28. $HPPEMIT: Игнорируется

1.2.29. $IF : Начать условную компиляцию

1.2.30. $IFC : Начать условную компиляцию

1.2.31. $IFDEF Имя : Начать условную компиляцию

1.2.32. $IFNDEF : Начать условную компиляцию

1.2.33. $IFOPT : Начать условную компиляцию

1.2.34. $IMPLICITEXCEPTIONS : Неявное завершение генерации кода

1.2.35. $INFO : Генерировать информационное сообщение

1.2.36. $INLINE : Разрешить встраиваемый код

1.2.37. $INTERFACES : Указать тип интерфейса

1.2.38. $I или $IOCHECKS : Проверка ввода/вывода

1.2.39 $IEEEERRORS : Разрешить проверку IEEE констант

1.2.40. $I или $INCLUDE : Подключить файл

1.2.41. $I или $INCLUDE : Включать информацию компилятора

1.2.42. $J или $WRITEABLECONST : Разрешить присваивание для типизированных констант

1.2.43. $L или $LINK : Компоновать объектный файл

1.2.44 $LIBEXPORT : Ignored

1.2.45. $LINKFRAMEWORK : Компоновать в структуру

1.2.46. $LINKLIB : Компоновать библиотеку

1.2.47. $M или $TYPEINFO : Генерировать информацию о типах

1.2.48. $MACRO : Разрешить использование макросов

1.2.49. $MAXFPUREGISTERS : Максимальное количество регистров FPU для переменных

1.2.50. $MESSAGE : Генерировать информационное сообщение

1.2.51. $MINENUMSIZE : Указать минимальный размер перечисления

1.2.52. $MINFPCONSTPREC : Указать точность констант с плавающей точкой

1.2.53. $MMX : Поддержка MMX (только Intel 80x86)

1.2.54. $NODEFINE : Игнорируется

1.2.55. $NOTE : Генерировать примечание

1.2.56. $NOTES : Выводить примечания

1.2.57. $OBJECTCHECKS : Проверять объект

1.2.58. $OPTIMIZATION : Включить оптимизацию

1.2.59. $PACKENUM или $Z : Минимальный размер перечисляемого типа

1.2.60. $PACKRECORDS : Выравнивание элементов записи

1.2.61. $PACKSET : Указать размер множества

1.2.62. $POP : Перезаписать настройки компилятора

1.2.63. $PUSH : Сохранить настройки компилятора

1.2.64. $Q или $OV или $OVERFLOWCHECKS: Проверка переполнения

1.2.65. $R или $RANGECHECKS : Проверка диапазона

1.2.66 $REGION : Отметить начало вложенного региона

1.2.67. $R или $RESOURCE : Подключить ресурс

1.2.68. $SATURATION : Насыщенность операций (только Intel 80x86)

1.2.69 $SAFEFPUEXCEPTIONS Ждаать сохранения значений FPU на Intel x86

1.2.70 $SCOPEDENUMS Управление использованием перечисляемого типа

1.2.71. $SETC : Определить и присвоить значение идентификатору

1.2.72. $STATIC : Разрешить использование ключевого слова Static

1.2.73. $STOP : Генерировать сообщение о фатальной ошибке

1.2.74 $STRINGCHECKS : Ignored

1.2.75. $T или $TYPEDADDRESS : Тип оператора адреса (@)

1.2.76. $UNDEF или $UNDEFC : Разыменовать идентификатор

1.2.77. $V или $VARSTRINGCHECKS : Проверка Var-строки

1.2.78. $W или $STACKFRAMES : Генерировать кадры стека

1.2.79. $WAIT : Ожидать нажатия клавиши ENTER

1.2.80 $WARN : Контроль генерации предупреждений

1.2.81. $WARNING : Генерировать предупреждение

1.2.82. $WARNINGS : Выводить предупреждения

1.2.83. $Z1, $Z2 и $Z4

1.3. Глобальные директивы

1.3.1. $APPID : Указать ID приложения

1.3.2. $APPNAME : Указать имя приложения

1.3.3. $APPTYPE : Указать тип приложения

1.3.4. $CODEPAGE : Установить кодовую страницу

1.3.5. $COPYRIGHT: Указать сведения об авторских правах

1.3.6. $D или $DEBUGINFO : Отладочные символы

1.3.7. $DESCRIPTION : Описание приложения

1.3.8. $E : Эмуляция сопроцессора

1.3.9 $EXTENSION : Расширение генерируемого двоичного файла.

1.3.10 $FRAMEWORKPATH : Путь к файлам среды.

1.3.11. $G : Генерировать код 80286

1.3.12 $IMAGEBASE : Указание начального адреса в DLL

1.3.13. $INCLUDEPATH : Указать путь подключений

1.3.14. $L или $LOCALSYMBOLS : Локальная символьная информация

1.3.15 $LIBPREFIX : Задать имя файла библиотеки

1.3.16. $LIBRARYPATH : Указать путь библиотек

1.3.17 $LIBSUFFIX : Задать суффикс библиотеки

1.3.18 $MAXSTACKSIZE : Установить максимальный размер стека

1.3.19. $M или $MEMORY : Размер памяти

1.3.20 $MINSTACKSIZE : Установить минимальный размер стека

1.3.21. $MODE : Установить режим совместимости компилятора

1.3.22. $MODESWITCH : Выбор функций режима

1.3.23. $N : Цифровая обработка

1.3.24. $O : Второй уровень оптимизации

1.3.25. $OBJECTPATH : Указать пути для объектных файлов

1.3.26. $P или $OPENSTRINGS : Использовать открытые строки

1.3.27. $PASCALMAINNAME : Установить имя точки ввода

1.3.28. $PIC : Генерировать код PIC

1.3.29 $POINTERMATH : Разрешить использование математики с указателями

1.3.30. $PROFILE : Профилирование

1.3.31. $S : Проверка стека

1.3.32. $SCREENNAME : Указать имя экрана

1.3.33 $SETPEFLAGS : Задать флаг PE для исполняемых файлов

1.3.34. $SMARTLINK : Использовать «умную компоновку»

1.3.35 $SYSCALLS : Select system calling convention on Amiga/MorphOS

1.3.36. $THREADNAME : Установить имя потока в Netware

1.3.37. $UNITPATH : Указать путь модулей

1.3.38 $VARPROPSETTER : Разрешить использование var/out/const параметров для установки свойств

1.3.39. $VERSION : Указать версию DLL

1.3.40. $WEAKPACKAGEUNIT : Игнорируется

1.3.41. $X или $EXTENDEDSYNTAX : Расширенный синтаксис

1.3.42. $Y или $REFERENCEINFO : Вставить информацию обозревателя

2. ИСПОЛЬЗОВАНИЕ УСЛОВНЫХ ОПЕРАТОРОВ, СООБЩЕНИЙ И МАКРОСОВ

2.1. Условные операторы

2.1.1. Предопределённые идентификаторы

2.2. Макросы

2.3. Переменные времени компиляции

2.4. Выражения времени компиляции

2.4.1. Определение]

2.4.2. Использование

2.5. Сообщения

3. ИСПОЛЬЗОВАНИЕ ЯЗЫКА АССЕМБЛЕРА

3.1. Использование ассемблера в исходных кодах

3.2. Встроенный ассемблер Intel 80x86

3.2.1. Синтаксис Intel

3.2.2. Синтаксис AT&T

3.3. Встроенный ассемблер Motorola 680x0

3.4. Сигнализация изменения регистров

4. СГЕНЕРИРОВАННЫЙ КОД

4.1. Модули

4.2. Программы

5. ПОДДЕРЖКА INTEL MMX

5.1. О чем это?

5.2. Поддержка насыщенности

5.3. Ограничения поддержки MMX

5.4. Поддерживаемые операции MMX

5.5. Оптимизация поддержки MMX

6. ВОПРОСЫ КОДИРОВАНИЯ

6.1. Соглашения о регистрах

6.1.1. Аккумулятор

6.1.2. 64-разрядный аккумулятор

6.1.3. Регистр результата с плавающей точкой

6.1.4. Регистр объектов

6.1.5. Регистр-указатель кадра

6.1.6. Регистр-указатель стека

6.1.7. Временные регистры

6.1.8. Таблица регистров процессора

6.2. Преобразование имён

6.2.1. Преобразование имён для блоков данных

6.2.2. Преобразование имён для блоков кода

6.2.3. Модификация преобразованных имён

6.3. Механизм вызова

6.4. Вложенные процедуры и функции

6.5. Вызовы конструктора и деструктора

6.5.1. Объекты

6.5.2. Классы

6.6. Код входа/выхода

6.6.1. Стандартная процедура начала/завершения Intel 80x86

6.6.2. Стандартная процедура начала/завершения Motorola 680x0

6.7. Передача параметра

6.7.1. Выравнивание параметров

6.8. Ограничения стека

7. ВОПРОСЫ КОМПОНОВКИ

7.1. Использование внешнего кода и переменных

7.1.1. Объявление внешних функций и процедур

7.1.2. Объявление внешних переменных

7.1.3. Объявление модификатора соглашений о вызовах

7.1.4. Объявление внешнего объектного кода

Компоновка объектного файла

Компоновка библиотеки

7.2. Создание библиотек

7.2.1. Экспорт функций

7.2.2. Экспорт переменных

7.2.3. Компиляция библиотек

7.2.4. Стратегия поиска модуля

7.3. Использование умной компоновки

8. ВОПРОСЫ ПАМЯТИ

8.1. Модель памяти

8.2. Форматы данных

8.2.1. Целочисленные типы

8.2.2. Символьные типы

8.2.3. Логические типы

8.2.4. Перечисляемые типы

8.2.5. Типы с плавающей точкой

Single

Double

Extended

Comp

Real

8.2.6. Указатели

8.2.7. Строки

Ansistring

Shortstring

Widestring

8.2.8. Множества

8.2.9. Статические массивы

8.2.10. Динамические массивы

8.2.11. Записи

8.2.12. Объекты

8.2.13. Классы

8.2.14. Файлы

8.2.15. Процедурные типы

8.3. Выравнивание данных

8.3.1. Выравнивание типизированных переменных и констант

8.3.2. Выравнивание структурированных типов

8.4. Куча

8.4.1. Стратегия выделения динамической памяти

8.4.2. Увеличение кучи

8.4.3. Отладка кучи

8.4.4. Написание вашего собственного менеджера памяти

8.5. Использование памяти DOS под расширителем Go32

8.6. При переносе кода Турбо Паскаль

8.7. Memavail и Maxavail

9. СТРОКИ РЕСУРСОВ

9.1. Введение

9.2. Файл строковых ресурсов

9.3. Обновление таблиц строк

9.4. GNU gettext

9.5. Предупреждения

10. ПРОГРАММИРОВАНИЕ ПОТОКОВ

10.1. Введение

10.2. Программирование потоков

10.3. Критические разделы

10.4. Менеджер потоков

11. ОПТИМИЗАЦИИ

11.1. Независимо от процессора

11.1.1. Сложение констант

11.1.2. Слияние констант

11.1.3. Сокращённая оценка

11.1.4. Константы множеств

11.1.5. Небольшие множества

11.1.6. Проверка диапазона

11.1.7. And вместо modulo

11.1.8. Сдвиг вместо умножения или деления

11.1.9. Автоматическое выравнивание

11.1.10. Умная компоновка

11.1.11. Встроенные подпрограммы

11.1.12. Пропуск кадра стека

11.1.13. Регистры переменных

11.2. Конкретные процессоры

11.2.1. Intel 80x86

11.2.2. Motorola 680x0

11.3. Переключатели оптимизации

11.4. Советы по генерации наиболее быстрого кода

11.5. Советы по генерации наименьшего кода

11.6. Оптимизация программы в целом

11.6.1. Общие сведения

11.7. Основные принципы

11.7.1. Как использовать

11.7.2. Доступные оптимизации WPO

11.7.3. Формат файла WPO

12. ПРОГРАММИРОВАНИЕ ОБЩЕДОСТУПНЫХ БИБЛИОТЕК

12.1. Введение

12.2. Создание библиотеки

12.3. Использование библиотеки в программе на Паскале

12.4. Использование библиотек Паскаль с программами на С

12.5. Некоторые вопросы Windows

13. ИСПОЛЬЗОВАНИЕ РЕСУРСОВ WINDOWS

13.1. Директива ресурса $R

13.2. Создание ресурсов

13.3. Использование строковых таблиц

13.4. Вставка информации о версии

13.5. Вставка значка приложения

13.6. Использование препроцессора Pascal

ПРИЛОЖЕНИЕ А: АНАТОМИЯ ФАЙЛА МОДУЛЯ

A.1. Основы

A.2. Чтение ppu-файлов

A.3. Заголовок

A.4. Разделы

A.5. Создание ppu-файлов

ПРИЛОЖЕНИЕ B: СТРУКТУРА ДЕРЕВА ИСХОДНОГО КОДА КОМПИЛЯТОРА И RTL

B.1. Дерево исходного кода компилятора

B.2. Дерево исходного кода RTL

ПРИЛОЖЕНИЕ С: ОГРАНИЧЕНИЯ КОМПИЛЯТОРА

ПРИЛОЖЕНИЕ D: РЕЖИМЫ КОМПИЛЯТОРА

D.1. Режим FPC

D.2. Режим TP

D.3. Режим Delphi

D.4. Режим OBJFPC

D.5. Режим MACPAS

ПРИЛОЖЕНИЕ Е: ИСПОЛЬЗОВАНИЕ fpcmake

E.1. Введение

E.2. Функциональность

E.3. Использование

E.4. Формат файла конфигурации

E.4.1. clean

E.4.2. compiler

E.4.3. Default

E.4.4. Dist

E.4.5. Install

E.4.6. Package

E.4.7. Prerules

E.4.8. Requires

E.4.9. Rules

E.4.10. Target

E.5. Программы, необходимые для работы с созданным makefile

E.6. Переменные, которые влияют на генерируемый makefile

E.6.1. Переменные каталогов

E.6.2. Переменные командной строки компилятора

E.7. Переменные, установленные с помощью fpcmake

E.7.1. Переменные каталогов

E.7.2. Целевые переменные

E.7.3. Переменные командной строки компилятора

E.7.4. Имена программ

E.7.5. Расширения файлов

E.7.6. Целевые файлы

E.8. Правила и цели, созданные с помощью fpcmake

E.8.1. Шаблонные правила

E.8.2. Правила сборки

E.8.3. Правила очистки

E.8.4. Правила архивации

E.8.5. Правила инсталляции

E.8.6. Информативные правила

ПРИЛОЖЕНИЕ F: КОМПИЛЯЦИЯ КОМПИЛЯТОРА

F.1. Введение

F.2. Перед стартом

F.3. Компиляция с использованием make

F.4. Компиляция вручную

F.4.1. Компиляция RTL

F.4.2. Компиляция компилятора

ПРИЛОЖЕНИЕ G: ОПРЕДЕЛЕНИЯ КОМПИЛЯТОРА ВО ВРЕМЯ КОМПИЛЯЦИИ

 

ПРИЛОЖЕНИЕ G: ОПРЕДЕЛЕНИЯ КОМПИЛЯТОРА ВО ВРЕМЯ КОМПИЛЯЦИИ