Free Pascal

Free Pascal (полное название Free Pascal Compiler, часто используется сокращение FPC) — свободно распространяемый компилятор языка программирования Object Pascal.

Платформы 
Компилятор существует для различных аппаратных и программных платформ, ветвь 3.0.x поддерживает следующие:
 Архитектура ARM
Game Boy Advance
 Nintendo DS
 Linux
Windows CE (только кросс-компиляция с использованием версии для Windows x86)
 AROS
 Android
 Архитектура i8086
 MS-DOS
 Архитектура Intel/i386
DOS (с использованием Go32v2)
 FreeBSD
 Linux
 Mac OS X (и кросс-компиляторы для PowerPC(64)/Mac OS X, iOS и iPhoneSimulator, JVM/Java и JVM/Android).
 Haiku
 OS/2 (и eComStation)
 Solaris
 Microsoft Windows 32-bit (и ARM/MIPS/i386-Android кросс-компилятор)
 AROS
Android
 Архитектура AMD64/Intel 64/x86_64
FreeBSD 
Solaris
Linux
Windows 64-bit
AROS

 Архитектура m68k
 AmigaOS
 AROS

 Архитектура PowerPC
AIX
 Linux
 Mac OS X
 AmigaOS 4
 MorphOS
Nintendo Wii
 Архитектура PowerPC64
 AIX
 Linux
 Mac OS X
 Архитектура SPARC
 Linux
 Solaris

 Архитектура MIPS
 Linux
 Android

 Архитектура MIPSEL
 Linux (Экспериментальная поддержка, не тестирован)

Более ранние версии также поддерживали архитектуру m68k (операционные системы NetBSD, Linux и AmigaOS), а также операционные системы Solaris, QNX и BeOS для x86.

В разработке — поддержка создания кода для Java Virtual Machine.

Библиотеки и оболочки 
В настоящее время в рамках проекта также разрабатывается Lazarus — свободный аналог среды разработки Delphi и Lazarus Components Library (LCL) — свободная библиотека виджетов, аналогичная VCL в Delphi.

Существуют и альтернативные проекты визуального программирования на базе Free Pascal, наиболее зрелым из которых является MSEide, использующий собственную, несовместимую с VCL библиотеку компонентов MSEgui.

Альтернатива Lazarus’у fpGUI — простая библиотека виджетов, не содержащая дополнительных библиотек вроде работы с БД, XML и тому подобным. В её состав включён визуальный редактор форм, генерирующий исходный код создания формы на Паскале.

Кроме того, в настоящее время для создания Windows-приложений можно использовать известную невизуальную библиотеку KOL.

Режимы совместимости 
Важной особенностью данного компилятора, в отличие, например, от GNU Pascal, является ориентация на распространённые коммерческие диалекты языка: Object Pascal и Delphi.

Free Pascal поддерживает компиляцию в нескольких режимах, обеспечивающих совместимость с различными диалектами и реализациями языка.

 Режим FPC — собственный диалект: соответствует предыдущему, расширенному дополнительными возможностями, такими как, например, перегрузка операций.
 Режим ObjFPC — совмещает объектно-ориентированные возможности Delphi и собственные расширения языка.
 Режим Delphi — данный режим предоставлен для совместимости с компилятором Delphi от компании Embarcadero с целью упрощения портирования существующих исходных файлов на Free Pascal. Для этого вам необходимо включить этот режим директивой ${mode Delphi} в исходном файле или с помощью опции -Mdelphi в командной строке компилятора.
 Режим TP/BP — Этот режим обеспечивает максимальную совместимость с компиляторами Turbo Pascal / Borland Pascal , чтобы упростить перенос существующего кода на FPC. Он использует возможности, которые не рассматриваются в качестве рекомендуемых, несколько изменяя правила синтаксиса. В случае необходимости он вносит изменения в стандартный режим ассемблера $ASMMODE INTEL и т.п. Для этого вам необходимо включить этот режим директивой ${mode TP} в исходном файле или с помощью опции -Mtp в командной строке компилятора.
 Режим MacPas — режим совместимости с Mac Pascal.
 Режим ISO 7185
 Режим ExPas
 Режим GPas — был режимом компилятора, с помощью которого Free Pascal пытался компилировать только допустимый код GNU Pascal. Данный режим удален из компилятора Free Pascal начиная с версии 2.2.

Особенности 
 Поддержка перегрузки арифметических операторов (+, -, *, /, div, mod, **), операторов сравнения (<, >, =, >=, <=), логических операторов (and, or, xor, not, shl, shr), операторов над множествами (><, in) и оператора присваивания :=.
 Поддержка операторов присваивания с выполнением арифметической операции в стиле Си (+=, -=, *=, /=).
 Наличие собственной системы сборки (fpcmake) и генератора документации (fpcdoc).
 Встроенный ассемблер по умолчанию использует синтаксис AT&T, синтаксис Intel включается отдельной директивой.

Краткая история 
 1993 год — начало работы над проектом.
 1995 год — компилятор успешно компилирует сам себя.
 1996 год — проект опубликован в интернете под лицензией GNU GPL.
 12 июля 2000 года — выход версии 1.0.
 2003 год — выход версии 1.0.10, завершение работы над ветвью 1.0.x.
 15 мая 2005 года — выход версии 2.0.
 10 сентября 2007 года — выход версии 2.2.
 30 декабря 2009 года — выход версии 2.4.
 12 ноября 2010 года — выход версии 2.4.2.
 20 мая 2011 года — выход версии 2.4.4
 1 января 2012 года — выход версии 2.6.0
 23 февраля 2013 года — выход версии 2.6.2
 11 марта 2014 года — выход версии 2.6.4
 25 ноября 2015 года — выход версии 3.0.0
 15 февраля 2017 года — выход версии 3.0.2
 28 ноября 2017 года — выход версии 3.0.4
 19 июня 2020 года — выход версии 3.2.0

Лицензия 
Компилятор распространяется на условиях GNU General Public License, а значительная часть библиотек, в том числе ядро RTL — на условиях более мягкой GNU Lesser General Public License.

См. также 
 Lazarus

Примечания

Литература

Ссылки 
 Официальный сайт Free Pascal.
 Проект Free Pascal на SourceForge.net.
 Русскоязычный сайт с материалами по Free Pascal.
 FPC Amiga Wiki 

Кроссплатформенные реализации языков программирования
Программное обеспечение с лицензией GNU GPL
Кроссплатформенное программное обеспечение
Свободное кроссплатформенное программное обеспечение
Свободное программное обеспечение, написанное на языке ассемблера
Программы с интерфейсом командной строки
Программное обеспечение для DOS
Программное обеспечение для Windows
Программное обеспечение для OS/2
Программное обеспечение для macOS
Программное обеспечение для Linux
Программное обеспечение для Amiga
Свободное программное обеспечение, написанное на Pascal