A Pascal nyelv

Free Pascal

Free Pascal

Bevezető

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

Történet

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.

Lexikai elemek

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.

//ez megjegyzés {ez az volt régen is} {ez új {megjegyzés} és még ez is megjegyzés, más Pascal-okban az előző záró kapcsos zárójelnél érne véget.}

Utasítások, vezérlési szerkezetek

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):

Alprogramok, modulok

Alprogramok

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)

Paraméterátadás:

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)

Modulok

A Pascalhoz megszokottan a programjainkat unitokba rendezhetjük.

Típusok

Számok

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észletHelyfoglalás (bájt)
Byte 0 .. 2551
Shortint-128 .. 1271
Smallint-32768 .. 327672
Word 0 .. 655352
Integer vagy Smallint vagy Longint - kompatibilitási módtól függ2 vagy 4
CardinalLongword4
Longint -2147483648 .. 21474836474
Longword0 .. 42949672954
Int64 -9223372036854775808 .. 92233720368547758078
QWord 0 .. 184467440737095516158

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

Tömbök

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.

program tomb; const size = 10000; var a: ^Cardinal; i: 0..(size-1); begin getmem(a, sizeof(Cardinal) * size); for i := 0 to size - 1 do begin a[i] := 2 * i; end; end.

Felsorolási típus

A nyelv támogatja a felsorolási típust is, szintén a C-hez hasonló módon:

Kivételkezelés

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.

Objektum-orientáltság

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á.

Helyességbizonyítás

A nyelv nem támogatja a helyességbizonyítást.

Sablonok

A 2.2-es verziótól a Free Pascal támogatja a sablonokat. Típusparamétert adhatunk tetszőleges osztálynak.

Párhuzamosság

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.

Szabványos könyvtárak

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.