1 Neke od najinteresantnijih značajki GPC-a
GNU Pascal prevodilac (GPC) je, kao što ime govori, Pascal prevodilac (engl.
compiler) iz GNU obitelji (http://www.gnu.org/software/gcc/). Ovo znači:
- GPC je 32/64-bitni prevodilac,
- nema ograničenja kao što je 64 kB ili 640 kB limit poznat iz nekih
operacijskih sustava – čak i na tim sustavima –,
- radi na svim operacijskim sustavima podržanim od GNU C prevodioca,
uključujući
- Linux na Intelu, Alphi, S390, i na svim
ostalim podržanim tipovima hardvera,
- BSD obitelj: FreeBSD,
NetBSD,
OpenBSD,
- DOS sa 32 bita, koristeći
DJGPP ili EMX,
- MS-Windows 9x/NT, koristeći
Cygwin ili
mingw ili
MSYS,
- OS/2 sa EMX,
- Mac OS X,
- MIPS-SGI-IRIX,
- Alpha-DEC-OSF,
- Sparc-Sun-Solaris,
- HP/UX,
i druge (zabilješka: runtime sistem podržava samo ASCII bazirane
sisteme; to uključuje gotovo sve današnje sustave, međutim nekoliko IBM
strojeva još uvijek koristi EBCDIC; na tima, prevodilac bi se mogao izvršavati,
ali bi runtime podrška trebala velike izmjene),
- može služiti kao nativni prevodilac ili prevodilac između sistema
(engl. cross-compiler) - između svih podržanih sistema,
- proizvodi visoko optimirani kod za sve te sisteme,
- slobodan je softver
Free Software
(Open-Source Software)
u skladu sa
GNU General Public License
licencom),
- kompatibilan je sa ostalim GNU jezicima i alatima kao što su GNU C i
GNU debugger (ili, ako više volite, program za simboličko ispravljanje
pogrešaka u ispravljanom programu).
Prevodilac podržava slijedeće jezične standarde i kvazi-standarde:
- ISO 7185 Pascal (see Resursi),
- većinu dijelova ISO 10206 Extended Pascala,
- Borland Pascal 7.0,
- dijelove Borland Delphi, Mac Pascala i Pascal-SC (PXSC).
Neki naglasci:
- Iz Standard Pascala: Mnogi popularni Pascal prevodioci tvrde da
proširuju Standard Pascal, ali im nedostaju ove važne značajke.
- Polja kao konformni parametri – standardni i komforan način prosljeđivanja
polja (ARRAY) varijabilne veličine procedurama i funkcijama.
[Example]
- Prosljeđivanje lokalnih procedura kao proceduralnih parametara – s punim
pristupom svim varijablama “nadređene” procedure.
[Example]
-
Automatski datotečni međuspremnici (engl. file buffers) i standardne Get
i Put procedure. Predviđajuće čitanje (engl. read-ahead) bez privremenih
varijabli. [Example] Ovo dozvoljava, na primjer, da se
provjeri ulaz iz tekst datoteka prije čitanja bez konverzije kroz znakovne
nizove (engl. strings). [Example]
- Istinski pakirani zapisi (RECORD) i polja. Pakira 8 Booleovih varijabli u
jedan bajt.
[Example]
- Interne datoteke. Ne morate se brinuti o kreiranju privremenih imena
datoteka i njihovom brisanju kasnije.
[Example]
- Globalni goto. (Da, goto ima svoju ulogu kada nije ograničen
na trenutni potprogram.) [Example]
- Automatski postavlja diskriminantu varijabilnog zapisa (RECORD) u New.
[Example]
- Skupovi (SET) proizvoljne veličine. [Example]
- Iz Extended Pascala:
- Znakovni nizovi (strings) proizvoljne duljine.
[Example]
- ReadStr i WriteStr. Čitajte iz i pišite u znakovne nizove sa
punim komforom ReadLn/WriteLn.
[Example]
- Rutine za predstavljanje datuma i vremena neovisne od sistema (prenosive).
[Example]
- Iteracija pomoću članova skupa:
for Ch in ['A' .. 'Z', 'a' .. 'z'] do ...
[Example]
- Proširene operacije nad skupovima (simetrična diferencija, Card)
- Generalizirane Succ i Pred funkcije
(
foo := Succ (bar, 5);
).
- Kompleksni brojevi. [Example]
[Example]
- Operatori za potenciranje (pow i **) za realne i
kompleksne brojeve.
- Inicijalizirane varijable. [Example]
- Funkcije mogu vraćati vrijednost tipa zapis ili polje (Record, Array).
-
Varijable za imenovanu povratnu vrijednost u funkcijama.
[Example]
- Moduli.
- Ne-dekadski brojevi u bazama od 2 do 36: baza#broj.
- MinReal, MaxReal, EpsReal, MaxChar
konstante.
- Schemata – Pascalov način da se dobiju dinamička polja bez nestašnih
trikova [Example]
- Lokalne varijable mogu imati dinamičku veličinu.
[Example]
- Pristup odsječcima polja – pristupa se dijelovima polja kao manjem polju,
čak i na lijevoj strani operacije dodjele vrijednosti (engl. assignment)
[Example]
- Kompatibilan sa Borland Pascalom 7.0 s objektima (BP):
- Podržava jedinice (UNIT), objekte, ..., i čini čak i stvari kao
absolute varijable prenosivima. [Example]
- Dolazi s prenosivim verzijama standardnih BP jedinica sa punim
izvornim kodom.
- Istinski mrežno-transparentna CRT jedinica: možete izvršavati svoje CRT
aplikacije lokalno ili dok ste prijavljeni udaljeno (remote login), bez
potrebe za brigom o različitim tipovima terminala. Kompatibilna s BP
jedinicom, ali s mnogim proširenjima, kao npr. preklapajući prozori.
[Example]
- Potpuno funkcionalna GUI (X11) verzija CRT (također potpuno mrežno
transparentna).
- Random funkcija koja može proizvesti iste sekvence
pseudo-slučajnih brojeva kao i ona u BP – ako vam je to potrebno umjesto
mnogo jače elaboriranog inicijalnog algoritma.
- Podržava proceduralne varijable u stilu BP-a, jednako kao i procedure kao
parametre iz Standard Pascala. [Example]
- Ports jedinica dozvoljava pristup I/O portovima na sistemima gdje
to ima smisla. [Example]
- Specijalne kompatibilnostne značajke za pomoć u migraciji s BP-a na GPC,
kao GPC for BP jedinica koja pruža neke od GPC-ovih značajki za BP,
te neke rutine za pristup skupovima velikih memorijskih blokova na uniforman
način pod GPC-om i BP-om (čak i u tzv. realnom modu).
[Example]
- Dolazi sa BP-kompatibilnom binobj uslugom.
[Example]
- Iz Borland Delphija:
- abstract tipovi objekata i metoda
- is i as operatori za testiranje pripadnosti objekta tipu
- komentari s //
- Setlength procedura za znakovne nizove (string) čini nepotrebnim
korištenje trikova kao što je pridodjeljivanje “nultom karakteru”.
- Initialize i Finalize za rukovanje varijablama na
niskoj razini.
- Iz Pascal-SC (PXSC):
- Korisnički redefinirani (preopterećeni) operatori. Zbrajajte svoje
vektore sa +.
- Pažljivo definirana GNU proširenja pomažu vam da učinite svoje
programe iz realnog života prenosivima:
- 64-bitni cjelobrojni tipovi sa i bez predznaka.
- Specijalni tipovi garantiraju kompatibilnost sa drugim GNU jezicima kao
što je GNU C. Direktive kao {$L foo.c} čine jednostavnim
održavanje projekata pisanih u više jezika, npr. uključivanje koda pisanog
u drugim jezicima u Pascal programe
[Primjer (Pascal dio)]
[Primjer (C dio)],
- ili uključivanje Pascal koda u programe pisane u drugim jezicima.
[Primjer (Pascal dio)]
[Primjer (Pascal jedinica)]
[Primjer (C dio)]
- Proširenja kao BitSizeOf i ConvertFromBigEndian
pomažu rješavanju problema s različitim tipovima i unutrašnjim poretkom
(engl. endianess - big endian, little endian).
[Example]
- Male sitnice kao što su DirSeparator,
PathSeparator, GetTempDirectory pomažu vam da pišete programe
koji izgledaju i osjećaju se “kod kuće” na svim operativnim sistemima.
- PExecute rutina dozvoljava izvođenje 'child' procesa na prenosiv
način koji u potpunosti iskorištava višezadaćne (engl. multitasking)
okoline.
[Example]
- GNU GetOpt rutine daju komforan pristup kratkim i dugim opcijama u komandnoj
liniji u Unix-stilu sa i bez argumenata.
[Example]
- Rutine kao FSplit ili FSearch ili FExpand znaju o
specifičnostima raznih operativnih sistema.
[Example]
- FormatTime funkcija pušta vas da formatirate vrijednosti datuma i
vremena, prema raznim pravilima formatiranja.
[Example]
- Korisne i prenosive GNU standardne jedinice:
- Pipes jedinica daje međuprocesnu komunikaciju čak i pod običnim
DOS-om. [Example]
[Demo proces za primjer]
- GNU multipreciznostna GMP jedinica omogućava aritmetiku cijelih,
realnih i racionalnih brojeva proizvoljne preciznosti.
[Primjer: faktorijele]
[Primjer: Fibonaccijev niz]
[Primjer: potenciranje]
[Primjer: potenciranje realnih brojeva]
[Primjer: pi]
- POSIX funkcije poput ReadDir, StatFS ili
FileLock pružaju efikasno, lako za korištenje i prenosivo sučelje
(engl. interface) prema operacijskom sustavu. [Example]
[Example], [Example]
- DosUnix jedinica kompenzira neke nekompatibilnosti između dviju
obitelji operacijskih sustava.
[Example]
- MD5 jedinica izračunava MD5 sume poruka (engl. message digest),
u skladu s RFC 1321. [Example]
- FileUtils jedinica pruža neke rutine za rukovanje datotekama i
direktorijima na višoj razini. [Example]
- StringUtils jedinica pruža neke rutine za rad sa znakovnim nizovima
na višoj razini. [Example]
- Intl jedinica za internacionalizaciju.
[Example] [Example]
- Trap jedinica za hvatanje grešaka u vremenu izvođenja (runtime-errors)
i njihovo obrađivanje unutar programa. [Example]
-
A TFDD jedinica koja omogućuje neke trikove s tekst datotekama,
npr. “tee” datoteku koja prouzročuje da se sve pisano u nju ispisuje u dvije
druge datoteke. [Example]
- HeapMon jedinica koja pomaže detektirati "curenje" memorije
(engl. memory leaks) u vašim programima.
Demo programi spomenuti gore su raspoloživi na WWW-u jednako kao i u
GPC distribucijama, binarnim i source.
Nedostaci:
- GNU simbolički debugger (GDB) još ne razumije Pascal sintaksu i
tipove; potrebno je koristiti C sintaksu kod ispravljanja programa GDB-om.
- Sa GPC-om prevođenje traje dulje nego s npr. Borland Pascalom.
Suradnici dobrodošli!
Sposobni, predani programeri su uvijek dobrodošli u GNU Pascal tim. Ako
želite biti nezavisni od kompanija kojima morate plaćati za prevodilac
sa mnogo restriktivnijim uvjetima licenciranja koji se izvršava na
jednom operacijskom sustavu, budite pozvani da se pridružite
razvojnom timu, Acknowledgments.