Free Pascal

Free Pascal (или FPK Pascal) е 32-битов и 64-битов компилатор за Pascal.

Free Pascal е 32/64-битов мултиплатформен (поддържащ както различни операционни системи, така и различни процесорни архитектури) компилатор. Компилаторът реализира диалектите на Borland (Turbo Pascal и Delphi) и е достъпен за най-често срещаните операционни системи.

Free Pascal първоначално се е казвал FPK Pascal, тъй като FPK са инициалите на автора Florian Paul Klämpfl. Въпреки популярното мнение, FPK Pascal не означава „Free Pascal Kompiler“, най-малкото поради факта, че „Compiler“ на немски не съдържа "k". В края на 1997 името на проекта е променено на Free Pascal Compiler (FPC).

3.2.2 е последната стабилна версия на Free Pascal.

FPC е доста добре документиран свободен софтуер, с документация от около 1800 страници.

Free Pascal се разпространява със среда за разработка, работеща в текстов режим. Тя наподобява тази на Turbo Pascal.

Отделно е създаден проект, който дава възможност за визуално програмиране на FPC, наречен Lazarus. Интерфейсът му наподобява този в Borland Delphi, а бибилиотеката с визуални компоненти LCL съдържа аналози на голяма част от функциите и компонентите, намиращи се във VCL.

FPC се придържа към реалността и реализира де факто стандартните диалекти на Pascal: диалектите на Borland. (По-точно: Borland Pascal 7 и Delphi 2 за версия 1.0.x и Delphi 6/7 за 2.0.x).

Въпреки това обаче проектът има концепция за режим на компилиране и разработчиците са дали ясен знак че няма да отхвърлят работещи patch-ове, които добавят режим на компилиране съвместим с Ansi/ISO стандарта.

Също така известни усилия са положени и за поддръжка на част от синтаксиса на Apple-ския Pascal за да се улесни интерфейса към Mac OS (X).

Следната функционалност от Delphi все още липсва във Free Pascal:

  • Delegation using the "implements" keyword
  • automatic COM IDispatch dual interfaces (dispinterfaces)
  • dispid in normal interfaces
  • packages
  • set types can have different size.

Компилаторът FreePascal се съпровожда от богат набор библиотеки и солидна документация.

Библиотеките за UNIX среда дават възможност за комуникация с различни мрежови услуги и бази данни, както и за директен достъп до ядрото. Това прави FPC удобен за изграждане на големи приложения. FPC през последните години стана реален инструмент за програмистите, които предпочитат простия и ясен стил на езика Pascal. След отказа на Borland да поддържа езика Pascal за други платформи (освен Windows – от версия XE5 вече поддържа iOS и Android), FreePascal е дефакто стандарт за езика.

Компилаторът е един от 4-те, които официално се използват на международните състезания по информатика.

Free Pascal се заражда когато Borland обявяват че няма да има Borland Pascal 8 и следващата версия ще бъде продукт само за Windows (който впоследствие излиза под името Delphi). Тогава един студент (Florian Paul Klämpfl) започва работа по свой собствен компилатор. Компилаторът, макар и писан на 16-битовия Turbo Pascal е генерирал 32-битов код, използвайки DOS extender-а go32v1 (същия, който е използван от gcc (DJGPP) под DOS). След две години компилаторът вече може сам да компилира себе си.

32-битовият компилатор е публикуван в мрежата и първите разработчици се присъединяват към проекта. В първите години след появата му в интернет е направена Linux версия от Michael van Canneyt (цели 5 години преди Kylix), DOS версията е адаптирана към OS/2 EMX extender-а, за ползване под OS/2, а самата DOS версия постепенно е подобрена и пренесена върху go32v2 extender-а. Това води до появата на версия 0.99.5 която става много по-използвана от версиите преди нея, и също последната, която поддържа само Turbo Pascal, тъй като следващите вече включват и Delphi-съвместим режим. Също така 0.99.5 е пренесена и на системи с процесор Motorola 680x0.

Във версия 0.99.8 е добавена Win32 поддръжка и е започнат процеса на добавяне на Delphi разширенията към Pascal. Започва стабилизиране за версия 1.0 и окончателно тя излиза през юли 2000. 1.0.x серията (заедно с последвалите я версии, последната, 1.0.10 през юли 2003) стават широко използвани както професионално, така и в обучението. 1.0.x версиите отново са прехвърлени и на процесор 680x0 и компилаторът генерира стабилен код за редица Unix-подобни OS и за AmigaOS.

Следващото поколение

[редактиране | редактиране на кода]

По време на стабилизирането на бъдещото тогава 1.0.x, и по-специално по време на пренасянето на m68k системи става ясно, че дизайнът на генератора на код е твърде ограничен по много начини. Двата принципни проблема са: добавянето на поддръжка на нови процесори означава пренаписване на целия генератор на код и заделянето на регистрите е основано на принцип (винаги да се пазят 3 свободни регистъра между градивните блокове) който е твърде труден за спазване и негъвкав.

Поради тези причини, FPC 1.1.x клонът е създаден от 1.0.x бета клона през декември 1999. В началото промените са основно почистване на кода и пренаписване/дизайн на всички части от компилатора, след това генератора на код и register allocator-а са пренаписани. Като бонус и липсващите неща за Delphi съвместимост са добавени.

Работата по 1.1.x продължава бавно но сигурно и в ранната 2003 поддръжката на процесор PowerPC започва да работи, бързо последвана от AMD64 (разработена с помощта на емулатор – по това време разработчиците не са имали истински чип) и първоначалните версии за ARM и Sparc. Поддръжката на AMD64 реално прави компилатора 32 и 64-битов.

През ноември 2003 е направена първата бета версия на 1.1.x клона и по повод случая номерът на версията е увеличен на 1.9. Това бързо е последвано от излизането на версии 1.9.2 и 1.9.4. 1.9.4 е специална защото е първата която поддържа Mac OS X.

Работата по компилатора продължава с версии 1.9.6 (януари 2005) и 1.9.8 (края на февруари 2005). Версия 2.0.0 излиза окончателно през май 2005.

На 10 септември 2007 излиза новата стабилна версия 2.2.0 на продукта. Промените спрямо предишната версия са доста, като най-важните са:

  • поддръжка на PowerPC/64 и ARM архитектури;
  • добавена поддръжка на Windows x64, Windows CE, Mac OS X/Intel, Game Boy Advance, и Game Boy DS платформи;
  • вграден много по-бърз линкер (linker) за Windows платформите;
  • поддръжка на "interface delegation", "bit packed" записи и масиви и поддръжка за COM/OLE варианти и "dispinterface";
  • по-добра поддръжка на варианти, множество ресурсни файлове за една програма;
  • "widestring" е COM/OLE съвместим с Windows, подобрена поддръжка на бази от данни.

Планове за бъдещето (версия 2.1.x)

  • Подобряване на поддръжката на COM/OLE. Това включва наколко неща:
    • интерфейси (vmt) съвместими с COM
    • Variant-и (заради OLE)
    • implements style delegation
  • Неща свързани с link-ването, debug-ването и с файловите формати, генерирани от компилатора:
    • Оптимизиране на smart link-ването (махане на .a файловете, използване на по-малко памет).
    • По-добра поддръжка на "packages" и на динамични библиотеки (PIC!) като цяло.
    • cross linking (до голяма степен е готово в 2.0)
    • преход от stabs към dwarf формат за генерираната debug информация.
    • Някаква поддръжка на ресурси съвместими с Kylix. (все още се обсъжда от разработчиците)
  • Поддръжка на „големи“ файлове (с 64-битови дължини).
  • Свързани с Apple Pascal:
    • Предаване на адрес на вложена под-процедура, като параметър при извикване на друга процедура.

Част от тази функционалност (по-специално нещата касаещи link-ването) може да иска преструктуриране свързано с

  • написване на вграден linker за някои основно платформи (вместо LD)
  • Пренаписване на кода, свързан с поддръжката на модули (units).

Платформите поддържани от FPC зависят от версията.

Текущата стабилна версия 2.0.x поддържа следните процесори

и следните операционни системи

Предишната стабилна версия 1.0.x поддържаше следните процесори

и следните операционни системи:

  • GNU/Linux, (x86/m68k)
  • FreeBSD,
  • NetBSD, (x86/m68k)
  • DOS (С помощта на dos extender-а Go32V2. PMode extender се използва понякога за embedded projects),
  • Win32,
  • OS/2 (EMX)
  • Classic Amiga (m68k)

и бета платформите: