# Free Pascal

Free Pascal (afgekort FPC) is een vrije, portable en open source-compiler voor Pascal en Object Pascal. Het is een 32/64-bits compiler met ondersteuning voor meerdere processorarchitecturen en besturingssystemen. De compiler implementeert Borlands Pascal-dialecten (Turbo Pascal en Delphi, evenals een aantal Mac Pascal-constructies, en is beschikbaar voor de meeste gangbare besturingssystemen.
Free Pascal stond bekend als FPK Pascal, waarbij de letters stonden voor de initialen van de auteur Florian Paul Klämpfl. De naam werd eind 1997 gewijzigd in Free Pascal Compiler, wat afgekort wordt tot FPC.

## Functies

Free Pascal wordt geleverd met een tekstmodus-IDE die lijkt op die van Turbo Pascal (Turbo Vision). Deze IDE leed aan bitrot omdat er geen onderhoud werd gepleegd.
Door samenwerking in de tweede helft van 2005 en de eerste maanden van 2006 werden de meeste grote problemen verholpen en werd de IDE weer release-waardig.
Net als Turbo Pascal en Delphi heeft Free Pascal uitstekende ondersteuning voor integratie van assembleertalen in de Pascal/Object Pascal-code. Free Pascal ondersteunt verschillende architecturen en notaties in de interne assembler.
De grafische onderdelen van de Delphi-bibliotheken (de VCL en het ontwikkelen van een grafische IDE en Rapid application development) zijn onderdeel van een apart project, genaamd Lazarus.

## Taaldialect

Free Pascal heeft de de facto standaarddialecten van moderne Pascal-programmeurs overgenomen: de Borland-dialecten. Vanaf versie 2.0 is er continu gewerkt aan compatibiliteit met Delphi 7.
Het project heeft een compilatiemodeconcept, en de ontwikkelaars hebben duidelijk gemaakt dat ze werkende patches voor de ANSI- en ISO-standaarddialecten zouden schrijven om ondersteuning voor een standaardmodus aan het project toe te voegen.
Er is gepoogd een deel van de syntaxis van Apples Pascaldialect te ondersteunen, om de interactie met Mac OS en Mac OS X te vergemakkelijken. Omdat dit dialect een aantal Standaard Pascal-features implementeert die niet beschikbaar zijn in Turbo Pascal en Delphi, is Free Pascal meer ISO-compatibel dan deze anderen.
Met de 2.2-serie is er weinig noemenswaardigs veranderd aan de doelen voor het dialect (met name compatibiliteit met Delphi 7). In plaats daarvan heeft vooral compatibiliteit prioriteit. Er ontbreekt nog steeds Delphi-functionaliteit, namelijk compilerondersteuning voor het exporteren van klassen vanuit shared libraries (gedeelde bibliotheken), wat handig is voor bijvoorbeeld Lazarus, dat pakketten van components implementeert.

## Geschiedenis
### Het begin

Free Pascal verscheen toen Borland duidelijk maakte dat er geen Borland Pascal 8 zou komen, en de volgende versie enkel Windows zou ondersteunen (dit werd later Delphi).
Florian Paul Klämpfl, toen student, begon met het werken aan zijn eigen compiler. De compiler was vanaf het begin geschreven in het Turbo Pascal-dialect en genereerde 32-bit-code voor de go32v1 extender, die toen werd gebruikt en ontwikkeld door het DJGPP-project.
In het begin was de compiler zelf een 16 bit-programma, geproduceerd door de Turbo Pascal-compiler. Na twee jaar was de compiler in staat zichzelf te compileren, en werd toen ook 32 bit.

### Uitbreiding

Toen de eerste 32 bit-compiler op het internet werd gepubliceerd, gingen de eerste vrijwilligers meedoen aan het project. Een aantal jaar later werd er door Michael van Canneyt een Linux-port gemaakt, vijf jaar voordat Kylix beschikbaar was.
De DOS-versie werd ook steeds beter, en migreerde naar de go32v2 extender. Vooral hierdoor werd versie 0.99.5 een stuk meer gebruikt dan voorgaande versies, en was de laatste versie die zich enkel richtte op Turbo Pascal-compatibiliteit - in latere versies is er een Delphi-compatibiliteitsmodues toegevoegd. Deze versie is ook geporteerd naar systemen met een 680x0.
Met de 0.99.8-release is de Win32-target toegevoegd en is er een begin gemaakt met het opnemen van een aantal Delphi-features. Er werd begonnen aan het stabiliseren van de code voor de 1.0-uitgave. Deze mijlpaal is bereikt in juli 2000.
De 1.0-serie werd veel gebruikt, zowel voor commerciële als educatieve toepassingen. Voor de 1.0-releases is de compiler opnieuw geporteerd naar 68k, en de compiler produceerde stabiele code voor een aantal 68k Unices en AmigaOS.

### De tweede generatie

Gedurende de stabilisatie van wat later 1.0.x zou worden, en specifiek tijdens het porteren naar de Motorola 68k-systemen, was het duidelijk dat het ontwerp van de codegenerator in veel opzichten te beperkt was. De belangrijkste problemen waren dat het toevoegen van een processor bestond uit het herschrijven van de codegenerator, en dat het de registertoewijzing was gebaseerd op het altijd beschikbaar houden van drie registers tussen het bouwen van blokken, wat flexibiliteit beperkte en moeilijk vol te houden was.
Om deze redenen is er een aparte 1.1.x-branch gevormd van de 1.0.x-hoofdbranch in december 1999. In het begin bestond de nieuwe branch voornamelijk uit verbeteringen en herschreven delen van alle delen van de compiler, en daarna zijn de codegenerator en registertoewijzer herschreven. Toen is ook de nog ontbrekende Delphi-compatibiliteit toegevoegd.
Het werk aan 1.1.x ging langzaam maar zeker, en eind 2003 werkte de PowerPC-port, gevolgd door ports naar ARM en SPARC in respectievelijk de zomer en herfst van 2004. De AMD64-port volgde begin 2004, en dat maakte dat de compiler beschikbaar werd voor een 64-bit-platform.
In november 2003 is een eerste bètaversie van de 1.1.x branch vrijgegeven en is het versienummer opgeschroefd naar 1.9.0. Deze werden gauw opgevolgd door versie 1.9.2 en 1.9.4.
Versie 1.9.4 was bijzonder omdat het de eerste versie met was met ondersteuning voor Mac OS X.
Het werk ging verder met versie 1.9.6 (januari 2005), 1.9.8 (eind februari 2005), 2.0.0 (mei 2005), 2.0.2 (december 2005) en 2.0.4 (augustus 2006).

### Verbetering: de 2.2-versies

In 2006 was er nog niet begonnen aan het werk aan het herstructuren zoals gepland voor 2.2, zoals het herschrijven van het unit-systeem. Er is toen besloten om te werken aan de stabiliteit van de al geïmplementeerde features. Een aantal redenen voor het veranderen van de roadmap waren de eisen van het Lazarus-project, specifiek the interne linker, ondersteuning voor Win64, Windows CE en Mac OS X op x86 en gerelateerde features zoals DWARF. Na een korte reeks betas (2.1.2 and 2.1.4) is versie 2.2.0 vrijgegeven in september 2007, gevolgd door versie 2.2.2 in augustus 2008, en toen versie 2.2.4 in maart 2009.
In de 2.2.x-serie zijn de ondersteuning voor ActiveX/COM, interface, en OLE sterk verbeterd, maar zijn er wel een paar bugs overgebleven. De interfacedelegatie via het implements-sleutelwoord is gedeeltelijk geïmplementeerd.
Naast de taalondersteuning is ook de bibliotheekondersteuning voor ActiveX verbeterd.
Een andere grote verandering was de interne linker voor Win32, Win64 en Windows CE, die linktijd en geheugengebruik flink omlaag bracht, en de compile-link-run-cyclus in Lazarus wat uitstaanbaarder maakt. De efficiëntie van het smart-linken (dead code elimination) is ook verbeterd.
Kleinere nieuwe features zijn de verbeterde ondersteuning voor het DWARF debugformaat, en optimalisaties zoals staartrecursie, weglaten van onnodige stack frames en register-gebaseerde common subexpression elimination. Een eerste implementatie van genericiteitsondersteuning is ook beschikbaar, maar enkel voor 'verkenningsdoeleinden'.
Het is op dit moment onduidelijk of de verbeterde ondersteuning voor in binaire bestanden ingebedde resources in 2.3.x in versie 2.2.4 beschikbaar zal zijn.

## Platformen

Free Pascals beschikbaarheid hangt af van de major version.

### Versie 3.0.2

Op 15 februari 2017 is een bugfix-update van FPC beschikbaar gekomen. FPC is inmiddels een veel gebruikte, goed werkende Pascal-compiler die voor veel platforms werkt.
De eigen IDE is een vervolg op de oude DOS IDE en kent dus beperkte functionaliteit. Deze is wel handig om de compiler in te stellen.
Tijdens het maken van software kan daarom beter gebruik gemaakt worden van bijvoorbeeld de gratis Blood Shed Dev-Pascal IDE, die aansluit op FPC en onder Windows werkt met de gebruikelijke editfuncties, inclusief interactieve syntaxiscontroles.

### Versie 2.3

Naast de door versie 2.2 ondersteunde platformen ondersteunt deze versie:
* Symbian OS - met UIQ toolkit
* Mac OS X 64-bit - voor x86_64 (AMD64) en 64-bit PowerPC
* FreeBSD/x86_64 - niet volledig stabiel momenteel

### Versie 2.2 (stabiel)

De huidige stabiele versie 2.2.0 heeft, naast ondersteuning van de 2.0.x-versies, ondersteuning voor de volgende platforms:
* Windows 64 bit
* Mac OS X (op Intel, i386)
* PowerPC 64-bit
* Windows CE (Windows Mobile)
* Nintendo Game Boy Advance (alleen standaard-ARM)
* Nintendo DS

### Versie 2.0

Processoren:
* IA-32: Intel 80386, compatibele processoren, en later Intel-processoren van dezelfde familie (80486 en de Pentiums).
** AMD64: x86_64 (64 bit)
* PowerPC
* ARM
* SPARC 8 en 9
Besturingssystemen:
* Linux: alle CPU's
* BSD en afgeleiden
** FreeBSD
** Mac OS X en Darwin (PowerPC)
* Mac OS
* DOS; Go32V2 extender. PMode extender soms gebruikt voor embedded systemen.
* Win32 (Microsoft Windows 95 en alle latere versies)
* OS/2: EMX en native
* Novell NetWare
* MorphOS

### Versie 1.0

Processoren:
* Intel 80386 en compatibele processoren
* Motorola 680x0
Besturingssystemen:
* Linux: x86/m68k
* BSDs
** FreeBSD
** NetBSD: x86/m68k
* DOS: Go32V2 extender. PMode extender wordt soms gebruikt voor embedded-projecten.
* Win32
* OS/2: EMX
* Amiga Klassiek, m68k
Bètaplatformen:
* BeOS
* Er heeft een tijdje een bèta voor OpenBSD/x86 bestaan.
* SunOS, Solaris
* QNX
* Windows CE