A Free Pascal egy 32 és 64 bites Pascal fordító. A Pascal nyelvhez egy ingyenes fordítót nyújt. Ahogy fejlődött, egyre több Pascal dialektus került bele, a Turbo Pascalon kívül mára már támogat Object Pascal és Deplhi elemeket. Többféle kompatibilitási mód közül választhatjuk ki a nekünk kellőt. A kompatibilitás miatt programunkban használhatjunk más dialektusban megírt komponenseket is.
A Free Pascal közvetlenül assembly kódot állít elő, amit aztán gépi kódra fordít, esetleges optimalizálással.
A Free Pascal jelenleg (2.4.0) a következő operációs rendszereket támogatja: Linux, FreeBSD, Haiku Mac OS X/Darwin, DOS, Win32, Win64, WinCE, OS/2, Netware és MorphOS
Valamint a következő processzorokat: Intel x86, Amd64/x86_64, PowerPC, PowerPC64, Sparc, ARM
Miután világossá vált, hogy a Borland a 7-es verzió után nem fejleszi tovább a Borland Pascal-t, és a következő verzió csak Windowsra fog megjelenni, Florian Paul Klämpfl elkezdett fejleszteni egy saját fordítót. A fordítót a DOS-os, 16 bites Turbo Pascalban készítette, de az már 32 bites kódot generált. Miután a fordító képes volt lefordítani önmagát, maga a fordító is 32 bites lett.
Ezután kikerült az Internetre. Itt gyors fejlődésnek indult, hamar megjelent a Linuxos és a Windowsos verzió is. A Turbo Pascal mellett Delphi kompatibilitás is cél lett. 2000-ben elkészült az 1.0-ás verzió.
Picit lassabb, de folyamatos fejlődéssel egyre több funkciót implementáltak, és a fordító egyre több platformon működött. 2004-ben megjelent az AMD64-gyel kompatibilis 64 bites verzió, valamint szintén ekkor jelent meg a plaformok közti fordító (egyik platformon a másik platformra fordítás.
A lexikai elemek megegyeznek a Pascal és a Delphi lexikai elemeivel. Kompatibilitási módtól függően további kulcsszavak lehetnek.
Újdonság a megjegyzések terén található. Támogatja a C++-féle egysoros kommentett, valamint a fordító egedi a egymásba ágyazott Pascal-stílusú kommenteket, igaz, utóbbira "warning"-gal jelez, de fejlesztés során hasznos lehet hosszabb programkód ideiglenes eltávolítására.
Lásd: itt
Ezen kívül lehetőségünk van a C-ből megismert rövidített értékadásokra (csak az alábbiakra):
x += 2
x -= 2
x *= 2
A Pascalhoz megszokottan megkülönböztethetünk függvényt és eljárást. Habár logikai különség van, fizikailag a C-hez hasonlóan vannak implementálva. Sőt, a Free Pascal megengedi azt is, hogy egy függvényt utasításként hajtsunk végre (azaz a visszatérési értékét ne rendeljük változóhoz)
Lehetőség van az egyes alprogramok Assembly nyelven történő megírására is. A Free Pascal kétféle stílusú Assembly kódot fogad el, az Intel és AT&T szintaxist. A szabványos könyvtár magja, valamint ahol a hatékonyságot ez növeli, Assemblyben van megírva (lásd pl. Strings unit)
A logikai paraméterátadást illetően újdonság a const
kódszó, amely felügyeli, hogy a cím szerint átadott paraméter értékét ne változtathassuk meg. Korábbi Free Pascal verziókban lehetőség volt típus nélküli const
paramétert írni, azonban a 2.4.0-tól ilyen lehetőség nincs.
A paraméterátadás fizikai mikéntjében több lehetőség közül választhatunk, így programunk jobban kompatibilis lehet külső programokkal. (stdcall, cdecl, fastcall; részletesebben ezekről itt: X86 paraméterátadási módok)
A Pascalhoz megszokottan a programjainkat unitokba rendezhetjük.
Az alap számtípusok bővültek. Az alábbi táblázatban láthatóak az ismert típusok
Típus neve | Értékkészlet | Helyfoglalás (bájt) |
Byte | 0 .. 255 | 1 |
Shortint | -128 .. 127 | 1 |
Smallint | -32768 .. 32767 | 2 |
Word | 0 .. 65535 | 2 |
Integer | vagy Smallint vagy Longint - kompatibilitási módtól függ | 2 vagy 4 |
Cardinal | Longword | 4 |
Longint | -2147483648 .. 2147483647 | 4 |
Longword | 0 .. 4294967295 | 4 |
Int64 | -9223372036854775808 .. 9223372036854775807 | 8 |
QWord | 0 .. 18446744073709551615 | 8 |
Megjegyzés: Egyes unitok vezethetnek be aliasokat a típusokra
A valós számok ábrázolása is változik: mivel a Turbo Pascal 6 bájtos Real típusára nincs processzoros gyorsítás, ezért ez nem támogatott. Helyette az ennél precízebb, 8 bájtos, Double-t használhatjuk
Természetesen Free Pascal alatt már nem akadály nagy méretű tömbök készítése.
Újdonság viszont, hogy a tömbök kezelését átvették a C-ből: tetszőleges típusos pointert használhatunk tömbként. Lent egy program, ami kitölt egy size
méretű tömböt az elemek indexeinek kétszeresivel. Megjegyzés: ez a program sem Turbo Pascal, sem Delphi kompatibilitási módban nem fordul.
A nyelv támogatja a felsorolási típust is, szintén a C-hez hasonló módon:
A nyelv OBJFPC módban támogatja a kivételek kezelését. Kivételeket a raise
utasítással válthatjuk ki, és a try ... catch
, valamint a try ... finally
utasításokkal kezelhetjük.
A Free Pascal készítői az objetum-orientáltság megvalósítását a Delphi nyelvvel való kompatibilitás jegyében tervezték, ezért az nagyban hasonlít rá.
A nyelv nem támogatja a helyességbizonyítást.
A 2.2-es verziótól a Free Pascal támogatja a sablonokat. Típusparamétert adhatunk tetszőleges osztálynak.
A Free Pascal többszálú programok készítését beépítve támogatja. A System unitban levő TThreadManager rekordnak mezői olyan függvénymutatók, melynek értékei automatikusan kitöltődnek az egyes platformokon a párhozamos programozáshoz szükséges függvényekkel (szál indítás, szemafor, stb.)
Ezen kívül rendszerhívásokkal (pl. WinAPI), vagy külső könyvtárakkal (pl. SDL_thread) megoldható többszálú programok készítése.
A Free Pascal disztibúció rengeteg unittal érkezik. A belső könyvtáron (Run-time Library) kívül megkapjuk a Free Component Library-t, ami a Delphi VCL-jének a vizuális komponensek nélküli mása. Ezen kívül kapunk wrapper osztályokat, melyek egy-egy jól ismert könyvtárhoz adnak hozzáférést. A könyvtárak platformtól függően változhatnak, de ez a platformok közti különbségből fakad.