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)
и бета платформите: