Free Pascal Compiler ( FPC ) — компилятор для тесно связанных диалектов языка программирования Pascal и Object Pascal . Это свободное программное обеспечение, выпущенное под лицензией GNU General Public License , с исключениями, которые разрешают статическую компоновку с его библиотеками времени выполнения и пакетами для любых целей в сочетании с любой другой лицензией программного обеспечения.
Он поддерживает свой собственный диалект Object Pascal, а также диалекты нескольких других компиляторов семейства Pascal в определенной степени, включая диалекты Borland Pascal (называвшийся "Turbo Pascal" до версии 6 1990 года), Borland (позже Embarcadero) Delphi и некоторых исторических компиляторов Macintosh . Диалект выбирается на основе единицы (модуля) , и в одной программе может использоваться более одного диалекта.
Он следует философии «пиши один раз, компилируй где угодно » и доступен для многих архитектур ЦП и операционных систем (см. Цели). Он поддерживает встроенный язык ассемблера и включает внутренний ассемблер, способный анализировать несколько диалектов, таких как стиль AT&T и Intel.
Существуют отдельные проекты, облегчающие разработку кроссплатформенных приложений с графическим пользовательским интерфейсом (GUI), наиболее известным из которых является интегрированная среда разработки (IDE) Lazarus .
Изначально Free Pascal принял фактический стандартный диалект программистов Pascal, Borland Pascal, но позже принял Object Pascal от Delphi. Начиная с версии 2.0, совместимость с Delphi постоянно внедрялась или улучшалась.
В проекте заложена концепция режима компиляции , и разработчики ясно дали понять, что они включат рабочие патчи для стандартизированных диалектов Американского национального института стандартов (ANSI) и Международной организации по стандартизации (ISO) для создания режима, соответствующего стандартам.
Небольшие усилия были предприняты для поддержки части синтаксиса Apple Pascal, чтобы облегчить взаимодействие с Classic Mac OS и macOS . Диалект Apple реализует некоторые стандартные функции Pascal, которые отсутствуют в Turbo Pascal и Delphi.
Серия релизов 2.2. x не внесла существенных изменений в цели диалекта, выходящие за рамки синтаксиса уровня Delphi 7, вместо этого стремясь к большей совместимости. Заметным исключением из этого было добавление поддержки дженериков в Free Pascal в версии 2.2.0, за несколько лет до того, как они стали поддерживаться в каком-либо качестве Delphi.
UnicodeString
В 2011 году в ветку разработки было добавлено несколько функций, специфичных для Delphi 2006, и была завершена часть начальной работы над новыми функциями в Delphi 2009 (в частности, добавление типа ). Ветвь разработки также имеет расширение Objective-Pascal для интерфейса Objective-C ( Cocoa ).
Начиная с версии 2.7.1, Free Pascal реализовал базовый режим ISO Pascal, хотя многие вещи, такие как процедуры Get
и Put
, а также концепция переменной файлового буфера для обработки файлов, по-прежнему отсутствовали.
Начиная с версии 3.0.0, режим ISO Pascal достаточно полный. Он смог скомпилировать компилятор P5 ISO Pascal от standardpascal.org без изменений.
Free Pascal был создан, когда компания Borland дала понять, что разработка Borland Pascal для DOS прекратится на версии 7 и будет заменена продуктом , предназначенным только для Windows , который позже стал называться Delphi.
Студент Флориан Пауль Клэмпфль начал разрабатывать собственный компилятор, написанный на диалекте Turbo Pascal, и создал 32-битный код для DOS-расширителя GO32v1 , который в то время использовался и разрабатывался проектом DJ's GNU Programming Platform ( DJGPP ).
Первоначально компилятор представлял собой 16-битный исполняемый файл DOS, скомпилированный Turbo Pascal . Спустя два года компилятор смог скомпилировать себя и стал 32-битным исполняемым файлом.
Первоначальный 32-битный компилятор был опубликован в Интернете , и к проекту присоединились первые участники. Позже, порт Linux был создан Михаэлем ван Каннейтом, за пять лет до того, как компилятор Borland Kylix Pascal для Linux стал доступен.
Порт DOS был адаптирован для использования в OS/2 с использованием Eberhard Mattes eXtender (EMX), что сделало OS/2 второй поддерживаемой целью компиляции. Помимо Флориана Клэмпфля, изначального автора, Даниэль Мантионе также внес значительный вклад в то, чтобы это произошло, предоставив оригинальный порт библиотеки времени выполнения для OS/2 и EMX. Компилятор постепенно улучшался, и версия DOS перешла на расширитель GO32v2. Это привело к выпуску 0.99.5, который использовался гораздо шире предыдущих версий и был последним выпуском, нацеленным только на совместимость с Borland Pascal; более поздние выпуски добавили режим совместимости с Delphi. Этот выпуск также был перенесен на системы, использующие процессоры семейства Motorola 68000 (m68k).
С выпуском 0.99.8 была добавлена цель Win32 , и было положено начало включению некоторых функций Delphi. Стабилизация для не- бета-релиза началась, и версия 1.0 была выпущена в июле 2000 года. Серия 1.0. x широко использовалась в бизнесе и образовании. Для выпусков 1.0. x был переделан порт на 68k CPU, и компилятор выдал стабильный код для нескольких 68k Unix-подобных и AmigaOS операционных систем.
Во время стабилизации того, что должно было стать 1.0. x , а также при портировании на системы Motorola 68k, стало ясно, что конструкция генератора кода была слишком ограничена во многих аспектах. Главные проблемы заключались в том, что добавление процессоров означало переписывание генератора кода, и что распределение регистров основывалось на принципе постоянного сохранения трех свободных регистров между строительными блоками, что было негибким и сложным в обслуживании.
По этим причинам серия 1.1. x отделилась от основной ветки 1.0. x в декабре 1999 года. Сначала изменения в основном сводились к очистке и переписыванию-перепроектированию всех частей компилятора. Генератор кода и распределитель регистров также были переписаны. Была добавлена вся оставшаяся недостающая совместимость с Delphi.
Работа над 1.1.x продолжалась медленно, но верно. В конце 2003 года стал доступен рабочий порт PowerPC , за которым летом 2004 года последовал порт ARM , осенью 2004 года — порт SPARC , а в начале 2004 года — порт x86-64 -AMD64, что сделало компилятор доступным для 64-битной платформы.
В ноябре 2003 года был выпущен первый бета- релиз ветки 1.1. x , получивший номер 1.9.0. За ними быстро последовали версии 1.9.2 и 1.9.4; последняя представила поддержку OS X. Работа продолжилась с версиями 1.9.6 (январь 2005 г.), 1.9.8 (конец февраля 2005 г.), 2.0.0 (май 2005 г.), 2.0.2 (декабрь 2005 г.) и 2.0.4 (август 2006 г.).
В 2006 году некоторые из крупных доработок, запланированных для версии 2.2, такие как переписывание системы юнитов, еще не были начаты, и вместо этого было решено начать стабилизацию уже реализованных функций.
Некоторые из мотивов для этого изменения дорожной карты были потребностями проекта интегрированной среды разработки Lazarus, в частности внутреннего компоновщика, поддержки Win64 , Windows CE и OS X на x86 , а также связанных функций, таких как DWARF . После бета-версий 2.1.2 и 2.1.4, версия 2.2.0 была выпущена в сентябре 2007 года, за ней последовала версия 2.2.2 в августе 2008 года и версия 2.2.4 в марте 2009 года.
В серии 2.2. x значительно улучшена поддержка интерфейса ActiveX и Component Object Model (COM) , а также Object Linking and Embedding (OLE), хотя ошибки все еще обнаруживались. Делегирование интерфейса с использованием ключевого слова было частично реализовано, но не было завершено по состоянию на март 2011 года . [1] Также была улучшена поддержка библиотек для ActiveX.implements
[обновлять]
Другой важной особенностью был внутренний компоновщик для Win32, Win64 и Windows CE, который значительно улучшил время компоновки и использование памяти, а также сделал цикл компиляции-компоновки-запуска в Lazarus намного быстрее. Эффективность для умной компоновки или устранения мертвого кода также была улучшена.
Незначительные новые функции включали улучшенную поддержку формата отладки DWARF (2/3) и оптимизации, такие как хвостовая рекурсия , пропуск ненужных стековых кадров и оптимизация устранения общих подвыражений (CSE) на основе регистров . Первая реализация поддержки обобщенного программирования (обобщения) также стала доступна, но только экспериментально.
Серия релизов 2.4.x имела менее четкий набор целей, чем предыдущие релизы. Переписывание системы единиц было снова отложено, и ветвь, которая стала 2.4, была создана для сохранения рискованных коммитов из 2.2 для ее стабилизации. В основном эти рискованные коммиты были более вовлеченными улучшениями для новых платформ, Mac PowerPC 64, Mac x86-64, iPhone и множеством исправлений для архитектур ARM и x86-64 в целом, а также DWARF.
Другие улучшения компилятора включали оптимизацию всей программы (WPO), девиртуализацию и поддержку двоичного интерфейса встроенных приложений ARM (EABI).
Позже, в течение цикла 2.2, была добавлена более похожая на Delphi поддержка ресурсов (основанная на специальных разделах в двоичном файле вместо констант Pascal). Эта функция, крайне необходимая Lazarus, стала главной изюминкой ветки.
Другими менее значительными дополнениями стали менеджер памяти , который повысил производительность менеджера кучи в потоковых средах, небольшие улучшения в совместимости с Delphi, такие как OleVariant
, и улучшения в делегировании интерфейса .
1 января 2010 года был выпущен Free Pascal 2.4.0, а 13 ноября 2010 года — исправление ошибок версии 2.4.2 с поддержкой for..in
циклов sealed
и abstract
классов, а также другие изменения. [2]
В январе 2012 года был выпущен Free Pascal 2.6. Эта первая версия из серии релизов 2.6 также поддерживала Objective Pascal на целевых платформах OS X и iOS и реализовала множество небольших улучшений и исправлений ошибок. В феврале 2013 года был выпущен FPC 2.6.2. Он содержал релизы NetBSD и OpenBSD впервые с 1.0.10, основанные на свежих портах. В марте 2014 года был выпущен последний точечный релиз в серии 2.6, 2.6.4, в котором в основном содержались обновления базы данных (fcl-db).
Версия 3.0.0 была выпущена 25 ноября 2015 года и стала первым крупным релизом с 1 января 2012 года. Она представила множество новых языковых функций. [3]
Версия 3.0.2 была выпущена 15 февраля 2017 года и включает исправления ошибок и незначительные обновления компилятора.
Версия 3.0.4 была выпущена 28 ноября 2017 года .
Она включает множество языковых улучшений по сравнению с предыдущими версиями, включая внутренний компоновщик для Executable and Linkable Format (ELF), Arm AARCH64 для iOS и Linux, возрожденную платформу i8086, расширенные библиотеки и многое другое.
Следующий крупный релиз, версия 3.2.0, был опубликован 19 июня 2020 года. Он представил множество новых языковых функций, включая общие процедуры, стандартные пространства имен, управляемые записи и расширенную функциональность для динамических массивов, в дополнение к появлению новых стандартных единиц и поддержке дополнительных платформ. [4]
Версия 3.2.2 была выпущена 20 мая 2021 года и поддерживает macOS на AArch64 и именование потоков. Кроме того, она включает исправления ошибок и незначительные обновления компилятора. [5]
Free Pascal также поддерживает генерацию байт-кода для виртуальной машины Java , начиная с версии 3.0.0, и нацелен как на Java от Oracle, так и на Android JVM от Google [6] , хотя синтаксис Object Pascal поддерживается не полностью. Free Pascal 3.0.0 также поддерживает платформы ARMHF, такие как Raspberry Pi , включая ARMV6-EABIHF, работающий на Raspbian. Работа над 64-битной ARM привела к поддержке iOS в 3.0.0. Добавлена собственная цель ARM Android, что положило конец ранее взломанной цели ARM Linux для генерации собственных библиотек ARM для Android. Это упрощает портирование приложений Lazarus на Android (с использованием пользовательского интерфейса [7] ). Начиная с FPC 2.6.2, OpenBSD и NetBSD поддерживаются на архитектурах IA32 и X86_64. Добавлена новая встроенная цель для использования без ОС (в основном ARM Cortex M и MIPS). С помощью InstantFPC можно запускать программы Pascal, которые мгновенно транслируются в виде скриптов Unix или CGI- бэкенда.
Ultibo core — это встроенная или «голая» среда разработки для Raspberry Pi. [8] Ultibo основан на Free Pascal и разработан с использованием модифицированной версии Lazarus. IDE основана на ПК, но также была портирована на Linux и Mac. Ultibo — это среда выполнения без ОС, которая поддерживает большинство функций и позволяет программисту полностью контролировать оборудование через блоки RTL. Среда выполнения реализует многопоточную, упреждающую многозадачность. Программист может поместить потоки на определенный ЦП или позволить среде выполнения автоматически разделить нагрузку или смешать эти два варианта. Поддерживается большинство моделей Raspberry Pi, включая A, B, A+ и B+, а также Raspberry Pi 2B, 3B, 4B/400/CM4 и Zero. [9]
Как и большинство современных компиляторов, Free Pascal может использоваться с интегрированной средой разработки (IDE). Помимо независимых IDE существуют также плагины к различным существующим IDE
Помимо компилятора и IDE, Free Pascal предоставляет следующие библиотеки: