FPC 3.1.1 в Windows | |
Разработчики) | Флориан Клемпфл и волонтеры |
---|---|
Первый выпуск | 1997 ; 24 года назад ( 1997) |
Стабильный выпуск | 3.2.2 / 20 мая 2021 г. ; 3 месяца назад ( 2021-05-20) |
Предварительный выпуск | 3.3.1 |
Репозиторий | |
Написано в | Object Pascal |
Операционная система | Кросс-платформенный, встроенный |
Тип | Компилятор, Встроенная операционная система |
Лицензия | Стандартная общественная лицензия GNU для исполняемых файлов компилятора и служебных программ. Стандартная общественная лицензия GNU с исключением статической компоновки для среды выполнения, пакета, компонента и других библиотек, которые становятся частью исполняемых файлов, созданных с помощью компилятора. |
Веб-сайт | www.freepascal.org |
Free Pascal Compiler ( FPC) - компилятор для тесно связанных диалектов языков программирования Pascal и Object Pascal. Это бесплатное программное обеспечение, выпущенное под Стандартной общественной лицензией GNU, с оговорками об исключениях, которые разрешают статическое связывание с его библиотеками времени выполнения и пакетами для любых целей в сочетании с любой другой лицензией на программное обеспечение.
Он поддерживает свой собственный диалект Object Pascal, а также в определенной степени диалекты нескольких других компиляторов семейства Pascal, включая диалекты Borland Pascal (до 1990 v6 назывался "Turbo Pascal"), Borland (позже Embarcadero) Delphi и некоторых других. исторические компиляторы Macintosh. Диалект выбирается для каждой единицы (модуля), и в одной программе может использоваться более одного диалекта.
Он следует философии однократной записи, компиляции в любом месте и доступен для многих архитектур ЦП и операционных систем (см. Цели). Он поддерживает встроенный язык ассемблера и включает внутренний ассемблер, способный анализировать несколько диалектов, таких как ATamp;T и стиль Intel.
Существуют отдельные проекты, облегчающие разработку кроссплатформенных приложений с графическим пользовательским интерфейсом (GUI), наиболее известным из которых является интегрированная среда разработки (IDE) Lazarus.
Первоначально Free Pascal принял де-факто стандартный диалект программистов Pascal, Borland Pascal, но позже принял Object Pascal от Delphi. Начиная с версии 2.0, совместимость с Delphi постоянно совершенствуется.
В проекте есть концепция режима компиляции, и разработчики дали понять, что они будут включать рабочие патчи для стандартизированных диалектов Американского национального института стандартов (ANSI) и Международной организации по стандартизации (ISO), чтобы создать режим, соответствующий стандартам.
Небольшие усилия были предприняты для поддержки синтаксиса Apple Pascal, чтобы упростить взаимодействие с классической Mac OS и macOS. Диалект Apple реализует некоторые стандартные функции Паскаля, которые не учитываются в Turbo Pascal и Delphi.
Версия 2.2. x не изменили существенно цели диалекта за пределами синтаксиса уровня примерно Delphi 7, вместо этого стремясь к большей совместимости. Заметным исключением из этого правила было добавление поддержки универсальных шаблонов в Free Pascal в версии 2.2.0, за несколько лет до того, как они были поддержаны в любом качестве в Delphi.
В 2011 году несколько специфичных для Delphi 2006 функций были добавлены в ветку разработки, и некоторые из начальных работ по новым функциям в Delphi 2009 (в первую очередь, добавление UnicodeString
типа) были завершены. В ветке разработки также есть расширение Objective-Pascal для взаимодействия с Objective-C ( Какао ).
В версии 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 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. Началась стабилизация для небета- версии, и в июле 2000 года была выпущена версия 1.0. Серия x широко использовалась в бизнесе и образовании. Для версии 1.0. x, был переделан перенос на процессор 68k, а компилятор произвел стабильный код для нескольких 68k Unix-подобных и AmigaOS операционных систем.
Во время стабилизации то, что стало бы 1.0. x, а также при переносе на системы Motorola 68k было ясно, что конструкция генератора кода слишком ограничена во многих аспектах. Основные проблемы заключались в том, что добавление процессоров означало переписывание генератора кода и что распределение регистров основывалось на принципе сохранения трех свободных регистров между строительными блоками, что было негибким и трудным в обслуживании.
По этим причинам версия 1.1. х серии разветвленных от от 1,0. x в декабре 1999 года. Сначала изменения касались в основном чистки и переписывания-переделки всех частей компилятора. Генератор кода и распределитель регистров также были переписаны. Все оставшиеся недостающие совместимости с Delphi были добавлены.
Работа над 1.1.x продолжалась медленно, но неуклонно. В конце 2003 года стал доступен рабочий порт PowerPC, за ним последовал порт ARM летом 2004 года, порт SPARC осенью 2004 года и порт x86-64 -AMD64 в начале 2004 года, что сделало компилятор доступным для 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 в сентябре 2007 года была выпущена версия 2.2.0, за ней последовала версия 2.2.2 в августе 2008 года и версия 2.2.4 в марте 2009 года.
Версия 2.2. x значительно улучшила поддержку интерфейса ActiveX и модели компонентных объектов (COM), а также связывания и встраивания объектов (OLE), хотя ошибки все еще обнаруживались. Делегирование в интерфейс с использованием ключевого слова было частично реализовано, но не было завершено по состоянию на март 2011 года. Библиотечная поддержка 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 (на основе специальных разделов в двоичном файле вместо констант Паскаля). Эта функция, остро необходимая Lazarus, стала главной изюминкой ветки.
Другими более незначительными дополнениями были диспетчер памяти, который улучшил производительность диспетчера кучи в многопоточных средах, небольшие улучшения совместимости с Delphi, такие как OleVariant
улучшения в делегировании интерфейса.
С 1 января 2010 года, Free Pascal 2.4.0 был выпущен, а затем 13 ноября 2010 года, путем выпуска ошибка исправления 2.4.2 с поддержкой for..in
петель, sealed
и abstract
классов, а также другие изменения.
В январе 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.0.2 была выпущена 15 февраля 2017 г. и включает исправления ошибок и незначительные обновления компилятора. Версия 3.0.4 была выпущена 28 ноября 2017 года. Она включает множество языковых улучшений по сравнению с предыдущими версиями, в том числе внутренний компоновщик для исполняемого и связываемого формата (ELF), Arm AARCH64 для iOS и Linux, возрожденную платформу i8086, расширенные библиотеки и многое другое. более.
Следующий основной выпуск, версия 3.2.0, был опубликован 19 июня 2020 года. В нем появилось множество новых языковых функций, включая общие процедуры, стандартные пространства имен, управляемые записи и расширенные функции для динамических массивов, а также появление новых стандартных единиц. и поддержка дополнительных платформ.
Архитектура процессора | Операционная система, устройство | Версия 3.0.0 - 3.3.1 (Магистраль) | Версия 2.6.2 | Версия 2.6.0 | Версия 2.4.4 | Версия 2.4.2 | Версия 2.4.0 | Версия 2.2.4 | Версия 2.0. Икс | Версия 1.0. Икс |
---|---|---|---|---|---|---|---|---|---|---|
i386 | DOS ( расширитель GO32v2 ) | да | да | да | да | да | да | да | да | да |
FreeBSD | да | да | да | да | да | да | да | да | да | |
OpenBSD | да | да | Нет | Нет | Нет | Нет | Нет | Нет | да | |
NetBSD | да | да | Нет | Нет | Нет | Нет | Нет | Нет | да | |
Linux | да | да | да | да | да | да | да | да | да | |
macOS | да | да | да | да | да | да | да | Нет | Нет | |
OS / 2 | да | да | да | да | да | да | да | да | да | |
Окна | да | да | да | да | да | да | да | да | да | |
Windows CE | да | да | да | да | да | да | Нет | Нет | Нет | |
BeOS | да | да | да | да | да | да | да | да | да | |
Хайку | да | да | да | да | да | да | Нет | Нет | Нет | |
NetWare | да | да | да | да | да | да | да | да | Нет | |
Солярис | да | да | да | да | да | Нет | Нет | Нет | да | |
iPhone Sim | да | да | да | Нет | Нет | Нет | Нет | Нет | Нет | |
QNX Neutrino | Нет | Нет | Нет | Нет | Нет | Нет | Нет | Нет | да | |
Android | да | да | Нет | Нет | Нет | Нет | Нет | Нет | Нет | |
AROS | да | Нет | Нет | Нет | Нет | Нет | Нет | Нет | Нет | |
x86-64 | FreeBSD | да | да | да | да | да | Нет | Нет | Нет | Нет |
OpenBSD | да | да | Неизвестный | Неизвестный | Неизвестный | Неизвестный | Неизвестный | Неизвестный | Неизвестный | |
NetBSD | да | да | Неизвестный | Неизвестный | Неизвестный | Неизвестный | Неизвестный | Неизвестный | Неизвестный | |
Linux | да | да | да | да | да | да | да | Неизвестный | Нет | |
macOS | да | да | да | да | да | да | Нет | Нет | Нет | |
Окна | да | да | да | да | да | да | Нет | Нет | Нет | |
iPhone Sim | да | да | да | Нет | Нет | Нет | Нет | Нет | Нет | |
AROS | да | да | да | да | да | Нет | Нет | Нет | Нет | |
DragonFly BSD | да | да | да | да | да | Нет | Нет | Нет | Нет | |
Солярис | да | да | да | да | да | Нет | Нет | Нет | Нет | |
Хайку | да | Нет | Нет | Нет | Нет | Нет | Нет | Нет | Нет | |
РУКА | iOS | да | да | да | да | да | да | Нет | Нет | Нет |
Game Boy Advance | да | да | да | да | да | да | Нет | Нет | Нет | |
Nintendo DS | да | да | да | да | да | да | Нет | Нет | Нет | |
Linux | да | да | да | да | да | да | да | Неизвестный | Нет | |
Windows CE | да | да | да | да | да | да | да | Неизвестный | Нет | |
Android | да | да | Нет | Нет | Нет | Нет | Нет | Нет | Нет | |
Встроенный | да | да | Нет | Нет | Нет | Нет | Нет | Нет | Нет | |
Встроенный Rasp-Pi | да | Нет | Нет | Нет | Нет | Нет | Нет | Нет | Нет | |
AROS | да | Нет | Нет | Нет | Нет | Нет | Нет | Нет | Нет | |
AArch64 | Linux | да | да | Нет | Нет | Нет | Нет | Нет | Нет | Нет |
iOS | да | да | Нет | Нет | Нет | Нет | Нет | Нет | Нет | |
Android | да | Нет | Нет | Нет | Нет | Нет | Нет | Нет | Нет | |
AVR | Встроенный | да | Нет | Нет | Нет | Нет | Нет | Нет | Нет | Нет |
PowerPC | Linux | да | да | да | да | да | да | да | да | Нет |
macOS | да | да | да | да | да | да | да | да | Нет | |
Классическая Mac OS | да | да | да | да | Нет | Нет | да | да | Нет | |
AmigaOS 4 | да | да | да | да | Неизвестный | Неизвестный | Неизвестный | да | Нет | |
MorphOS | да | да | да | да | Неизвестный | Неизвестный | Неизвестный | да | Нет | |
AIX | да | да | да | Нет | Нет | Нет | Нет | Нет | Нет | |
Wii | да | да | да | да | Нет | Нет | Нет | Нет | Нет | |
PowerPC 64-разрядная | Linux | да | да | да | да | да | да | да | Нет | Нет |
macOS | да | да | да | да | да | да | Нет | Нет | Нет | |
AIX | да | да | да | Нет | Нет | Нет | Нет | Нет | Нет | |
SPARC | Солярис | да | да | да | да | да | Нет | Нет | Нет | Нет |
NetBSD | да | да | да | да | да | Нет | Нет | Нет | Нет | |
Встроенный | да | да | да | да | да | Нет | Нет | Нет | Нет | |
Linux | да | да | да | да | да | Нет | Нет | Нет | Нет | |
SPARC64 | Linux | да | да | да | Нет | Нет | Нет | Нет | Нет | Нет |
RISC-V | Встроенный | да | Нет | Нет | Нет | Нет | Нет | Нет | Нет | Нет |
RISC-V64 | Встроенный | да | Нет | Нет | Нет | Нет | Нет | Нет | Нет | Нет |
Виртуальная машина Java | Джава | да | Нет | Нет | Нет | Нет | Нет | Нет | Нет | Нет |
Android | да | Нет | Нет | Нет | Нет | Нет | Нет | Нет | Нет | |
MIPS (BE и LE) | Linux | да | Нет | Нет | Нет | Нет | Нет | Нет | Нет | Нет |
Встроенный | да | Нет | Нет | Нет | Нет | Нет | Нет | Нет | Нет | |
8086 (16 бит) | ДОС | да | Нет | Нет | Нет | Нет | Нет | Нет | Нет | Нет |
Win16 | да | Нет | Нет | Нет | Нет | Нет | Нет | Нет | Нет | |
Встроенный | да | Нет | Нет | Нет | Нет | Нет | Нет | Нет | Нет | |
m68k | Linux | да | Нет | Нет | Нет | Нет | Нет | Нет | Нет | да |
NetBSD | да | Нет | Нет | Нет | Нет | Нет | Нет | Нет | да | |
AmigaOS | да | Нет | Нет | Нет | Нет | Нет | Нет | Нет | да | |
Atari TOS | да | Нет | Нет | Нет | Нет | Нет | Нет | Нет | Да только ограниченный кросс-компилятор | |
Palm OS | да | Нет | Нет | Нет | Нет | Нет | Нет | Нет | Неизвестный |
Free Pascal также поддерживает генерацию байтового кода для виртуальной машины Java с версии 3.0.0 и ориентирован как на Oracle Java, так и на JVM Android от Google, хотя синтаксис 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 (с использованием пользовательского интерфейса). Начиная с FPC 2.6.2, OpenBSD и NetBSD поддерживаются архитектурами IA32 и X86_64. Добавлена новая встроенная цель для использования без ОС (в основном ARM Cortex M и MIPS). С помощью InstantFPC можно запускать программы на языке Pascal, которые вовремя переводятся как сценарии Unix или серверная часть CGI.
Ultibo core - это встроенная или «голая» среда разработки для Raspberry Pi. Ultibo основан на Free Pascal и разработан под модифицированной версией Lazarus. IDE основана на ПК, но также была перенесена на Linux и Mac. Ultibo - это среда выполнения без ОС, которая поддерживает большинство функций и позволяет программисту полностью контролировать оборудование через блоки RTL. Среда выполнения реализует многопоточную упреждающую многозадачность. Программист может разместить потоки на конкретном процессоре или позволить среде выполнения автоматически разделить нагрузку или сочетание того и другого. Поддерживается большинство моделей Raspberry Pi, включая A, B, A + и B +, а также Raspberry Pi 2B, 3B, 4B / 400 / CM4 и Zero.
Как и большинство современных компиляторов, Free Pascal можно использовать с интегрированной средой разработки (IDE). Помимо независимых IDE есть также плагины для различных существующих IDE.
Бесплатная IDE Pascal в LinuxПомимо компилятора и IDE, Free Pascal предоставляет следующие библиотеки: