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 поддържа следните процесори
 Intel 80386 и съвместими
 PowerPC
 ARM (Zaurus)
 Sparc v8 и v9
 AMD64 (x86_64)

и следните операционни системи
 GNU/Linux, (всички процесори)
 FreeBSD
 Mac OS X и Darwin (PowerPC)
 Mac OS (PowerPC)
 DOS (С помощта на dos extender-а Go32V2. PMode extender се използва понякога за embedded projects),
 Win32,
 OS/2 (EMX и native)
 Novell NetWare

Предишната стабилна версия 1.0.x поддържаше следните процесори
 Intel 80386 и съвместими
 Motorola 680x0

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

и бета платформите:
 BeOS, (beta)
 SunOS (Solaris),
 QNX

Външни препратки 
 Free Pascal
 Lazarus, среда за разработка, подобна на Delphi, но използваща FPC
 Introduction to Free Pascal 2.0
 www.mis-algoritmos.com

Свободен софтуер
Приложен софтуер