Rozwiązania
Napisz raz, skompiluj gdziekolwiek
50 październik 2009
linux@software.com.pl
Free Pascal
Compiler i Lazarus IDE
Trwają niekończące się dyskusje na temat znaczenia technologii Java i Mono w świecie systemów
operacyjnych GNU/Linux. Rozważa się używanie ich do tworzenia praktycznie każdego typu aplikacji, od
webowych, przez przenośne, biurkowe, bazodanowe frontendy, po aplikacje wbudowane etc. W przypadku
aplikacji przenośnych nasz wybór nie musi jednak ograniczać się do Java i Mono, które w rzeczywistości
mają dużo wspólnego, jeśli chodzi o podstawy działania i zapewniania przenośności aplikacji (maszyna
wirtualna, kod pośredni) w myśl hasła write once, run everywhere. Możemy świadomie pójść trzecią drogą
i skorzystać z tandemu Free Pascal Compiler (FPC)/Lazarus.
Paweł Wawrzyniak
H
asło, które przyświeca twórcom FPC/
Lazarus, brzmi: write once, compile any-
where (zwróćmy uwagę na przewrotne za-
stąpienie w tym sloganie słowa everywhe-
re - wszędzie, znanego z hasła write once, run every-
where ukutego przez Sun Microsystems na rzecz pro-
mocji technologii Java, słowem anywhere – gdziekol-
wiek). W oczywisty sposób stanowi ono wyraz koncep-
cji alternatywnej wobec technologii Java i Mono (w isto-
cie – .NET). W odróżnieniu od poprzedniego podejścia,
nie ma tutaj mowy o żadnych maszynach wirtualnych, na
których uruchamiane są aplikacje w kodzie pośrednim.
Podstawowe założenia są takie, że:
• Tworzymy kod źródłowy w powszechnie znanym
języku – może to być Pascal lub Object Pascal.
• Następnie kod źródłowy kompilujemy do kodu wy-
nikowego określając docelową platformę sprzętową
i systemową.
Powyższe możliwości dostarcza nam kompilator Free
Pascal Compiler (FPC) oraz zintegrowane środowisko
programistyczne (ang. Integrated Development Environ-
ment, IDE) typu RAD (ang. Rapid Application Develop-
ment) o nazwie Lazarus.
Zarówno kompilator jak i IDE są obecnie w bardzo
zaawansowanym stadium rozwoju, a oferowane przez
nie cechy sprawiają, że w wielu przypadkach mogą być
uważane za najlepszy możliwy wybór, jeśli chodzi o na-
rzędzia programistyczne, dzięki którym szybko stworzy-
my atrakcyjne aplikacje z myślą o przenoszeniu ich mię-
dzy różnymi systemami. Dodajmy, że FPC/Lazarus nie
tylko pozwalają na tworzenie aplikacji przenośnych, ale
same – jako narzędzia – mają taki charakter. To sprawia,
że naprawdę warto przyjrzeć im się bliżej.
Wieloplatformowy kompilator Pascala
Najnowsza dostępna w momencie pisania artykułu wer-
sja kompilatora FPC (2.2.4) pozwalała na generowanie
kodu wynikowego dla następujących platform sprzęto-
wo-systemowych:
• GNU/Linux dla: i386, x86 (amd64), PowerPC,
Sparc, ARM.
Rozwiązania
Napisz raz, skompiluj gdziekolwiek
51www.lpmagazine.org
• MS Windows: 32-bitowe (95/98/Me/XP/
2000/2003/Vista and WinNT).
• MS Windows: 64-bitowe (XP/Vista/
2003).
• MS Windows CE dla: ARM (z uży-
ciem kompilatora skrośnego z platformy
win32-i386).
• FreeBSD dla: i386.
• Mac OS X dla: PowerPC, i386.
• DOS: z 32-bitowym ekstenderem GO-
32v2-i386.
• OS/2 dla: i386 (Warp v3.0, 4.0, WarpSe-
rver for e-Business oraz eComStation).
W przypadku najnowszej wersji FPC nie uda-
ło się opracować dedykowanych wersji dla
systemów operacyjnych NetBSD, OpenBSD
(wielka szkoda) i NetWare/i386, co spowodo-
wane jest faktem braku opiekunów dla tych
wydań. Autorzy kompilatora zapewniają jed-
nak, że w powinien on działać w wymienio-
nych systemach, ale ponieważ nie został od-
powiednio przetestowany, a brak opiekuna
oznacza także brak odpowiedniego wspar-
cia, wersje nie zostały włączone do oficjalne-
go wydania 2.2.4.
Jako ciekawostkę, warto wspomnieć
fakt, że starsze wersje kompilatora (z serii
1.x.x) były dostępne także dla takich platform
systemowych i sprzętowych, jak: QNX (sys-
tem czasu rzeczywistego)/i386, BeOS/i386,
Amiga/m680x0 (procesor Motorola). Obec-
nie trwają eksperymenty nad opracowaniem
dedykowanej wersji dla systemu Sun Solaris
(także OpenSolaris) i QNX (naprawdę, to bę-
dzie coś!).
Od Pascala do Delphi, C# i Oberona
Zanim zaczniemy ewentualną krytykę języ-
ka Pascal, jako podstawy kompilatora FPC,
pozwólmy sobie na przedstawienie krótkie-
go rysu historycznego i ewolucji języka Pas-
cal. Wydaje się bowiem, że podstawowe za-
rzuty stawiane tej technologii mają raczej
postać utartych dogmatów i nie wynikają z
prawdziwego doświadczenia. Fakt, że Pas-
cal upowszechnił się w środowiskach szkol-
nych i akademickich, jako narzędzie służą-
ce do nauki programowania, nie powinien
rzutować na ogólną ocenę języka. Z pewno-
ścią nie jest to bowiem język wyłącznie dla
uczniów, studentów, czy amatorów, tym bar-
dziej, że dał początek wielu ciekawym tech-
nologiom i innym językom o bardzo szero-
kim zastosowaniu. Każdy kto naprawdę in-
teresuje się językami programowania i in-
spiracji szuka poza technologiami główne-
go nurtu (ang. mainstream) z pewnością po-
trafi to zauważyć.
Język Pascal został opracowany przez
profesora Niklausa Wirtha w latach 1968 do
1972, jako uniwersalny język programowania
wysokiego poziomu. Jego podstawą stał się
popularny wówczas Algol. Nazwa języka po-
chodzi od francuskiego filozofa Blaise Pasca-
la. Po raz pierwszy opis języka został opubli-
kowany w The programming language Pas-
cal, Acta Informatica 1/1971, a następnie w
wersji poprawionej w The programming lan-
guage Pascal (Revised Report), Bericht der
Fachrgruppe Computer – Wissenschaften
5/1972. Jak twierdzą źródła internetowe, w
roku 1972 używano już języka Pascal na kur-
sie wprowadzającym do problematyki pro-
gramowania komputerów. Pierwszym pod-
ręcznikiem do nauki języka Pascal był Pas-
cal. User Manual and Report z roku 1974,
napisany przez Kathleen Jensen i Niklausa
Wirtha. Jak widać, od samego początku ję-
Kilka lat temu, słynąca z popularyzacji języka Pascal/Object Pascal w MS-DOS i MS Win-
dows firma Borland starała się przenieść swoje doświadczenia i narzędzia na platformę
GNU/Linux. Był to naprawdę świetny pomysł, tym bardziej, że w tamtym czasie brakowa-
ło narzędzia pozwalającego na szybkie tworzenie aplikacji (RAD) przenośnych między
GNU/Linux i MS Windows, oferujących wsparcie dla baz danych i posiadających atrak-
cyjny interfejs użytkownika. Coś jednak poszło nie tak...
Wydano trzy wersje (1.0, 2.0 i 3.0) środowiska Kylix. Wydaje się, że od samego początku fir-
ma zmagała się ze swego rodzaju niespójnością logiczną, jeśli chodzi o zdefiniowanie swo-
jego celu i akcje marketingowe. Z jednej strony Kylix miał być narzędziem, które zdominu-
je niszę wynikającą z braku ekwiwalentu Delphi pod GNU/Linuksem. Z drugiej można było
go uruchamiać wyłącznie w wybranych dystrybucjach, typu Red Hat, czy SuSE. To znacznie
ograniczało krąg odbiorców. Tego nie lubi środowisko entuzjastów systemów GNU/Linux.
Ponadto, Kylix, podobnie jak Delphi, był rozwiązaniem komercyjnym, a więc napotykał na
naturalny opór ze strony użytkowników GNU/Linuksa, którzy znacznie bardziej cenią sobie
licencję GNU/GPL. Z kolei licencja GNU/GPL nie jest mile widziana w przedsiębiorstwach,
które dostarczają komercyjnych aplikacji (tutaj znacznie lepsze notowania mają licencję
MIT czy BSD, pozwalające zamknąć kod oferowanego rozwiązania). Z oczywistych też
względów Borland nie mógł zdecydować się na wydanie Kyliksa na licencji GNU/GPL.
Sytuacja firmy Borland nie była łatwa, tym bardziej, że rynek GNU/Linuksa nie był w tam-
tym czasie tak ustabilizowany, jak dziś. Dodatkowo, firma nie potrafiła nadać spójnego,
zrozumiałego dla użytkowników GNU/Linuksa wizerunku swojego produktu, jako narzę-
dzia będącego dokładną kopią Delphi (dlaczego zmieniono nazwę na Kylix?), które ma
na celu uruchomienie rynku komercyjnych rozwiązań dla systemu GNU/Linux. Bardzo
często więc wyrażano swoje rozczarowanie, przytaczając, po części słuszne, argumenty,
że Pascal/Object Pascal nie nadaje się do pisania aplikacji i narzędzi systemowych dla
GNU/Linuksa, w którym większość kodu napisana jest w C i C++. Było to jednak jakby
manifestacją niezrozumienia idei narzędzia, a sam producent, zamiast tłumaczyć swoją
wizję (czyżby ostatecznie jej zabrakło?), wolał skupić się na wprowadzeniu wsparcia dla
języków C/C++ w Kyliksie (w niczym to nie pomogło, a wręcz jeszcze bardziej utwierdziło
potencjalnych odbiorców w mylnym rozumieniu przeznaczenia produktu).
Kylix był bardzo obiecującym narzędziem, nie pasował jednak do świata GNU/Linux,
choćby przez swoją licencję i koncepcję. Trzeba jednak przyznać, że pomysł był dobry,
choć najwyraźniej nie mógł zostać prawidłowo zrealizowany. Ostatecznie, firma Borland
wycofała się ze wsparcia dla Kyliksa.
Równolegle do działań firmy Borland rozwijały się inne narzędzia związane z językiem
Pascal: GNU/Pascal, wolna implementacja kompilatora Pascala, wchodząca w skład ze-
stawu kompilatorów GCC (ang. GNU Compiler Collection) i FPC/Lazarus. W czasie prób
upowszechnienia Kyliksa, narzędzia FPC/Lazarus nie oferowały zbyt wiele, a samo Laza-
rus IDE było bardzo niestabilne. Jednak dziś sytuacja wygląda całkiem inaczej. Produkt jest
bardzo dojrzały, aktywnie rozwijany i wydaje się, że w przeciwieństwie do Kyliksa, ma szan-
sę na całkowity sukces. Dostarcza on bowiem funkcjonalności Delphi (a nawet więcej, bio-
rąc pod uwagę przenośność), a jednocześnie jest opracowywany na licencjach GNU/GPL
i GNU/LGPL, dzięki czemu, choć jest uwolnionym produktem Open Source, nic nie stoi na
przeszkodzie, aby tworzyć w nim aplikacje komercyjne. Tego nie oferował nam Kylix!
Pascal w GNU/Linuksie, czyli rozwój w cieniu porażki Kyliksa
52 październik 2009
Rozwiązania
Napisz raz, skompiluj gdziekolwiek
zyk ten był bardzo popularny w edukacji [1].
Szczyt jego popularności to druga połowa lat
80-tych i pierwsza połowa lat 90-tych, głów-
nie za sprawą narzędzi programistycznych
firmy Borland – sławne kompilatory Turbo
Pascal i Borland Pascal dla systemów CP/M,
MS-DOS i MS Windows 3.x. Wówczas po-
pularna była strukturalna wersja języka, któ-
ra wyewoluowała, zgodnie z powszechnym
trendem w kierunku języka w pełni obiekto-
wego, zwanego Object Pascal.
Pierwsze rozszerzenia obiektowe Pasca-
la dostępne były jeszcze w czasach kompila-
torów Borlanda, jednak Object Pascal został
spopularyzowany w kolejnym produkcie fir-
my Borland – Delphi, począwszy od wersji
1.0. Obecnie język Object Pascal jest podsta-
wą takich środowisk programistycznych, jak
Delphi (dziś producentem Delphi nie jest już
Borland, a firma Embarcadero) oraz Delphi
Prism (nowy produkt będący wynikiem po-
łączenia sił firm Embarcadero i Rem Objects,
twórcy języka Oxygene dla .NET, także opar-
tego na Object Pascalu).
W świetle tych faktów widać, że język
Pascal wciąż ewoluuje i nie można postawić
mu zarzutu archaiczności. Chyba, że mamy
na myśli strukturalną wersję tego języka. Ob-
ject Pascal jest już językiem całkowicie obiek-
towym, a jego najnowsze wcielenia integrują
się z pozostałymi rozwiązaniami dla platformy
.NET (i jej uwolnionej implementacji – Mo-
no). Faktem jest natomiast, że Pascal nie jest
już tak popularny, jak kiedyś, za co być mo-
że winę ponosi, zdaje się, niespójny marketing
produktów firmy Borland (Delphi i Kylix).
Dodajmy, że Anders Hejlsberg, swe-
go czasu pracownik firmy Borland (1989-
1996), brał udział w rozwijaniu kompila-
torów Pascala oferowanych przez tą fir-
mę, był także szefem zespołu tworzącego
Delphi. Następnie, od 1996 roku rozpoczął
pracę w firmie Microsoft, gdzie najpierw
był zaangażowany w tworzenie kompila-
tora J++ i biblioteki Windows Foundation
Classes (WFC), a następnie, po przegranym
procesie między firmą Microsoft a Sun Mi-
crosystems (w którym – ogólnie rzecz uj-
mując –zarzucano firmie Microsoft tworze-
nie nieprzenośnej wersji języka Java, nie-
zgodnej z definicją tej technologii), w 2000
roku rozpoczął tworzenie następcy J++, ję-
zyka C# i jest jego głównym architektem.
Istnieje więc coś (właściwie ktoś), co łączy
pozornie odległe technologie – Object Pas-
cal i C#. Pewne właściwości Object Pasca-
la są także widoczne w C# (oprócz więk-
szości innych cech, zapożyczonych głów-
nie z języka Java).
Warto także zauważyć, że po stworze-
niu języka Pascal, Niklaus Wirth stworzył
bardzo podobny, jeśli chodzi o składnię, ale
rozszerzony na potrzeby modularności kodu
język Modula (1978), a następnie Modula-2
(1980). W założeniach miała to być ulepszo-
na wersja języka Pascal. W latach 80-tych
Niklaus Wirth opracował z kolei język Obe-
ron, stworzony na potrzeby systemu ope-
racyjnego o tej samej nazwie (1986), któ-
ry pewnymi cechami zbliżał się do koncep-
cji języka zorientowanego obiektowo [2].
Miał to być język bezpieczny, wyposażo-
ny w sprawdzanie granic tablic, silnie typo-
wany i posiadający tzw. kolektor nieużytków
(ang. garbage collector). W roku 2007 po-
wstała najnowsza specyfikacja tego języka,
oznaczona: Oberon-07. Jak widać ewolucja
języka Pascal w wykonaniu jego twórcy, je-
śli tak rozumieć kolejne języki opracowy-
wane przez Niklausa Wirtha [3], przebiega
całkiem innym torem niż rozwój, który wi-
dzimy na przykładzie Object Pascala, Del-
phi czy Delphi Prism.
Cechy języka Pascal
Nie sposób przedstawić wszystkich cech ję-
zyka Pascal w pojedynczym artykule, więc
skupmy się wyłącznie na tych najbardziej
charakterystycznych. Jeśli chodzi o skład-
nię, to zamiast powszechnych w innych
popularnych językach (Java, C, C++. C#,
PHP, Perl) znaków definiujących blok ko-
du { }, używa się słów kluczowych be-
gin i end (charakterystycznych także dla
Modula-2, Oberon, Ada). Zmienne i sta-
Rysunek 1. Skrypt instalatora FPC w działaniu
Rysunek 2. Tekstowe IDE dla Free Pascal Compiler pod GNU/Linuksem
53www.lpmagazine.org
Rozwiązania
Napisz raz, skompiluj gdziekolwiek
łe deklarujemy w wydzielonej części blo-
ku kodu, zwanej blokiem deklaracji (zmien-
ne po słowie kluczowym w bloku deklaracji
– var; stałe, analogicznie po słowie kluczo-
wym – const). Na początku modułów (ang.
units), w ich bloku deklaracji – definiuje-
my zmienne lub stałe globalne; na początku
procedur i funkcji, w ich blokach deklaracji
– zmienne lub stałe lokalne. Język jest tak-
że silnie typowany, co oznacza, że kompi-
lator na etapie kompilacji kodu źródłowego
sprawdza, czy do zmiennej typu X nie sta-
ramy się podstawić zmiennej typu Y. Dzięki
swojej rygorystyczności, Pascal zyskał so-
bie w kręgach swoich zwolenników etykietę
bezpiecznego języka programowania i fak-
tycznie, często można spotkać go tam, gdzie
liczy się solidność kodu i nie można pozwo-
lić sobie na błąd wynikający z faktu, że pro-
gramista poszedł na skróty.
Pascal jest językiem proceduralnym,
dlatego bliżej mu do języka C, niż C++. Do-
stępne są typy rekordowe, które w pewnym
sensie odpowiadają strukturom znanym z
C. Z kolei obiektowe rozszerzenie języka
Pascal – nazywane Object Pascal – w pew-
nym sensie może stanowić alternatywę dla
C++ (obiektowego rozszerzenia języka C).
Z pewnością jednak zarówno Pascal, jak i
Object Pascal są językami znacznie bardziej
rygorystycznymi niż C i C++. Ta cecha mo-
że być uważana zarówno za zaletę (eduka-
cja, aplikacje o znaczeniu krytycznym), jak
i za wadę (ograniczanie doświadczonych
programistów). Tutaj nie jesteśmy w sta-
nie dać odpowiedzi, czy jest to zaleta, czy
wada – należy przekonać się samemu. War-
to jedynie zwrócić uwagę, że Pascal/Object
Pascal poprzez swoją składnię i restrykcyj-
ność (silne typowanie) są językami bliski-
mi językowi Ada (nawet do tego stopnia, że
w obydwu językach także używa się słów
kluczowych begin i end, a sam kod źródło-
wy jest bardzo podobny), który znalazł za-
stosowanie w przemyśle wojskowym, lot-
nicznym, medycynie, czy energetyce (czyli
wszędzie tam, gdzie nie ma miejsca na błąd,
nawet kosztem obniżenia szybkości działa-
nia programu).
Pascal posiada także bardzo bogate za-
plecze kodu źródłowego, wszelkich biblio-
tek i komponentów, a dzięki możliwości łą-
czenia kodu źródłowego poprzez wrappery
i interfejsy (w większości dostępnych kom-
pilatorów) z bibliotekami dla innych języ-
ków (głównie C i C++), oferuje bardzo du-
że możliwości. Dziś jednak niewiele osób
korzysta ze strukturalnej odmiany Pascala
i powszechniej używany jest Object Pascal,
co zresztą zrozumiałe. Dzięki Delphi, Ob-
ject Pascal upowszechnił się także jako ję-
zyk służący do tworzenia aplikacji bazoda-
nowych, dzięki czemu dostępne jest szero-
kie wsparcie dla baz danych ze strony do-
stawców bibliotek i komponentów. Do-
tyczy to oczywiście także FPC/Lazarus,
które są w bardzo dużym stopniu zgodne
z Delphi.
Aby zrozumieć ideę i przeznaczenie języ-
ka Pascal/Object Pascal oraz uniknąć niepo-
trzebnego porównywania go z C/C++ można
pozwolić sobie na uproszczenie i założyć, że:
cechy języków C/C++ predestynują ich wyko-
rzystanie do takich zadań jak programowanie
systemów operacyjnych, niskopoziomowych
aplikacji (sterowniki dla urządzeń, wysoko-
wydajne biblioteki przetwarzania danych, np.
obrazu, dźwięku, kryptograficznych etc.), czy
aplikacji przenośnych. W tych zastosowaniach
Pascal/Object Pascal nie może z nimi konku-
rować. Jednak cechy języka sprawiają, że do-
skonale nadaje się on do tworzenia aplikacji
użytkowych działających na wysokim pozio-
Rysunek 3. Pierwsze wywołanie skompilowanego FPC
Listing 1. Poniższego błędu kompilacji można uniknąć wskazując na obecność GTK2 w systemie
[...]
Compiling /home/wawrzyn/lazarus/debugger/frames/options_debugger_
signals.pas
Linking ../lazarus
/usr/bin/ld: cannot find -lgdk_pixbuf
lazarus.pp(122,1) Error: Error while linking
lazarus.pp(122,1) Fatal: There were 1 errors compiling module, stopping
Fatal: Compilation aborted
make[2]: *** [lazarus] Error 1
make[2]: Leaving directory '/home/wawrzyn/lazarus/ide'
make[1]: *** [ide] Error 2
make[1]: Leaving directory '/home/wawrzyn/lazarus/ide'
make: *** [ide] Error 2
[…]
Listing 2. Końcówka udanej kompilacji Lazarus IDE
Free Pascal Compiler version 2.2.4 [2009/03/28] for i386
Target OS: Linux for i386
Compiling lazbuild.lpr
Linking ../lazbuild
1189 lines compiled, 2.7 sec
make[2]: Leaving directory '/home/wawrzyn/lazarus/ide'
make[1]: Leaving directory '/home/wawrzyn/lazarus/ide'
54 październik 2009
Rozwiązania
Napisz raz, skompiluj gdziekolwiek
mie i tutaj z powodzeniem może być uważa-
ny za konkurenta. Także jeśli chodzi o przeno-
śność. Mamy więc do czynienia z językami,
które przeznaczone są jakby na różne pozio-
my oddalenia od warstwy sprzętowej i do nie-
co innych zastosowań. Wszystko zależy jed-
nak od narzędzi – a trzeba przyznać, że dzięki
FPC/Lazarus, Pascal/Object Pascal mają silne
argumenty po swojej stronie.
FPC/Lazarus, zestaw
jedyny w swoim rodzaju
FPC/Lazarus nie powielają błędów Kylik-
sa, a ponadto, pod wieloma względami ofe-
rują znacznie więcej (atrakcyjne licencjono-
wanie, przenośność). Ponadto, choć z pewno-
ścią FPC/Lazarus są w stanie zapełnić niszę
na rynku rozwiązań do szybkiego tworzenia
aplikacji z graficznym interfejsem użytkow-
nika (i silnym wsparciem dla baz danych) w
systemie GNU/Linux, nie zapominajmy, że
mogą być z powodzeniem stosowane w MS
Windows, FreeBSD czy Mac OS X.
Prawdę mówiąc, ciężko znaleźć jakąś al-
ternatywę dla FPC/Lazarus. Jeśli chodzi o za-
awansowane, niekomercyjne IDE typu RAD
dla języka C/C++, to z pewnością wyróż-
nić można wxDevC++, które oferuje jednak
znacznie mniejsze możliwości niż Lazarus
(m.in. brak zaawansowanych bazodanowych
komponentów GUI, typu: siatki, kalendarze,
listy, pola edycyjne podłączane do źródeł da-
nych). Oczywiście, pewne funkcjonalności
można osiągnąć pisząc własny kod, zakłada-
my jednak, że chodzi o to, aby tego nie robić
(tworzenie aplikacji ma być szybkie i zgodne z
duchem Delphi). Ponadto, wxDevC++ można
uruchamiać wyłącznie w środowisku MS Win-
dows. Dodajmy tylko, jako ciekawostkę, że
wxDevC++ zostało napisane w... Delphi (jeśli
kiedyś uda się przekompilować wxDevC++ w
FPC/Lazarus, powinno być możliwe przenie-
sienie tego środowiska także do GNU/Linuksa
– na razie jednak próba ta nie udała się).
Uwolnionych rozwiązań opartych na ję-
zyku Pascal/Object Pascal (i w pewnym sen-
sie także komercyjnych), które mogłyby
konkurować z FPC/Lazarus, także brakuje.
Z kolei porównywanie FPC/Lazarus do Mo-
noDevelop dla Mono czy Eclipse lub NetBe-
ans dla Java nie ma tutaj żadnego sensu (cał-
kiem inna filozofia tworzenia aplikacji prze-
nośnych i skala przedsięwzięcia). Można
więc powiedzieć, że przynajmniej na razie
narzędzia FPC/Lazarus stanowią kategorię
same dla siebie i mają szansę zyskać sporą
popularność w systemach GNU/Linux, jak i
MS Windows. Przekonajmy się więc o tym,
że warto dać im szansę.
Instalacja Free
Pascal Compiler i Lazarus IDE
Instalację tandemu FPC/Lazarus rozpoczy-
namy od zainstalowania kompilatora (FPC),
a następnie instalujemy Lazarus (IDE). Do
przeprowadzenia tego procesu potrzebuje-
my:
• Binariów Free Pascal Compliler w wer-
sji 2.2.4 – pobieramy je z serwisu Sour-
ceForge.
• Źródeł Free Pascal Compiler – najłatwiej
pobrać je za pomocą narzędzia SVN.
• Źródeł Lazarus IDE – które również po-
bierzemy za pomocą narzędzia SVN.
Znajdujący się w dalszej części artykułu opis
instalacji FPC i Lazarus został przeprowa-
dzony w systemie operacyjnym GNU/Linux
Slackware 12.2. Przedstawiona metoda po-
winna jednak działać na większości dystry-
bucji. Zanim podejmiemy decyzję, że chce-
my pójść proponowaną ścieżką, sprawdź-
my tylko, czy w naszej dystrybucji nie są
dostępne gotowe do użycia pakiety binar-
ne (FPC i Lazarus IDE są dołączane do re-
pozytoriów pakietów wielu dystrybucji). Ni-
żej przedstawiony sposób pokaże nam tak-
że jedną istotną cechę FPC – kompilator ten
jest napisany w Pascalu (jak należy!), dlate-
go do kompilacji jego źródeł wykorzystamy
- skompilowany wcześniej kompilator Free
Pascal Compiler.
Instalacja binarnej
wersji kompilatora FPC
Binaria kompilatora FPC pobieramy z serwi-
su SourceForge.net [4]. Następnie, w konsoli
terminala wydajemy następujące komendy (z
konta użytkownika):
$ mkdir freepascal
$ cp fpc-2.2.4.i386-linux.tar
freepascal
$ cd freepascal
$ tar xvf fpc-2.2.4.i386-linux.tar
Rozpakowaniu ulegnie archiwum TAR, któ-
re teraz możemy zainstalować. W tym ce-
lu podnieśmy swoje uprawnienia do pozio-
mu superużytkownika i wykonajmy skrypt
instalacyjny:
$ su
Password: xxxxxxxx
# ./install.sh
Wyświetlone zostanie okno instalatora tek-
stowego, który zacznie zadawać nam sze-
reg pytań (Rysunek 1). Na początek potwier-
dzamy (Enter) domyślną lokalizację. Następ-
nie, instalator zapyta się, czy chcemy zainsta-
lować IDE w wersji tekstowej – czemu nie?
– może się przydać. Później, czy zainstalo-
wać bibliotekę FCL? (ang. Free Pascal Com-
ponent Library). Tutaj należy się drobne wy-
jaśnienie.
Biblioteka FCL dla kompilatora FPC ma
dostarczać modułów (klas) oferujących funk-
cjonalność potrzebą do realizacji podstawo-
Rysunek 4. Pierwsze uruchomienie i błąd, którego
należało się spodziewać. W rzeczywistości, tak wła-
śnie ma być
Rysunek 5. Lazarus IDE, od razu rzuca się w oczy podobieństwo do Delphi i Kyliksa
55www.lpmagazine.org
Rozwiązania
Napisz raz, skompiluj gdziekolwiek
wych działań aplikacji oraz częściowo funk-
cjonalność biblioteki VCL (ang. Visual Com-
ponent Library) w celu zapewnienia zgodno-
ści z Delphi. Ma także rozszerzać funkcjo-
nalność VCL o cechy charakterystyczne dla
FPC. Istotną różnicą wobec VCL jest też fakt,
że FCL zawiera wyłącznie komponenty nie-
wizualne. Moduły i komponenty, o których
piszemy, włącza się do kodu źródłowego pro-
gramu za pomocą słowa kluczowego Uses.
Uzupełnieniem FCL jest biblioteka LCL
(ang. Lazarus Component Library) dla Laza-
rus, która z kolei dostarcza wizualnych kom-
ponentów do budowania GUI aplikacji (włą-
czając wizualne komponenty GUI ze wspar-
ciem dla baz danych). FCL składa się obecnie
m.in. z następujących pakietów:
• fcl-base – moduły bazowe,
• fcl-async – asynchroniczne wejście/
wyjście,
• fcl-db – podstawowe wsparcie baz da-
nych wraz ze sterownikami,
• fcl-fpcunit – zestaw narzędzi do przepro-
wadzania testów jednostkowych (ang.
unit tests),
• fcl-image – odczyt i zapis obrazów,
• fcl-net – moduły związane z obsługą sieci,
• fcl-process – zarządzanie procesami sys-
temowymi,
• fcl-registry – zarządzanie rejestrem,
• fcl-web – wsparcie dla tworzenia aplika-
cji webowych,
• fcl-xml – przetwarzanie języka XML i
praca z DOM (ang. Document Object
Model),
• paszlib – konwersja standardowej bi-
blioteki kompresji zlib do języka Pascal
(oczywiście, z wyłączeniem wszelkich
zewnętrznych zależności).
Wróćmy do instalacji... Następnie instalator
pyta nas, czy zainstalować wszystkie pakie-
ty? – tak. Później, czy instalować dokumen-
tację? – tak. Potem, czy ma zainstalować pro-
gramy demonstracyjne (oczywiście, że tak
– to najlepsze źródło testów i dobry materiał
do nauki) – podajemy więc ścieżkę dla pro-
gramów demonstracyjnych, czyli – potwier-
dzamy domyślną propozycję. To wszystko.
Kompilator FPC w wersji binarnej, goto-
wej do pracy, został zainstalowany. Możemy
sprawdzić, co otrzymujemy na tym etapie.
So 90’s, czyli klasyczne IDE dla FPC
Podczas instalacji potwierdziliśmy, że chce-
my zainstalować klasyczne, tekstowe IDE
dla FPC. Przypomina ono do złudzenia sław-
ne IDE, które używane było przez kompilato-
ry Borland/Turbo Pascal, popularne w pierw-
szej połowie lat 90-tych. Uważam, że warto
je zainstalować i skonfigurować, ponieważ
może się okazać, że nie zawsze będziemy ko-
rzystali z możliwości graficznego Lazarusa
(którego zainstalujemy w dalszej części arty-
kułu). W celu uruchomienia tekstowego IDE
dla FPC, wydajemy komendę:
$ fp
Jeśli chodzi o stopień podobieństwa do sław-
nych, dosowych IDE firmy Borland, to zacho-
wano zgodność, nawet jeśli chodzi o więk-
szość skrótów klawiszowych, także... Jeśli
wiek nam pozwala (O! Ironio!), a nasza pa-
mięć nie zawiedzie, powinniśmy poczuć się
całkiem swojsko (Rysunek 2).
Instalacja Lazarus IDE,
czyli w stronę Delphi
W celu przeprowadzenia udanej instalacji La-
zarus IDE, będziemy potrzebowali źródłowej
wersji kompilatora FPC, która zostanie przez
nas przekompilowana oraz źródeł samego
Lazarus IDE. Najłatwiej, z konta tego same-
Rysunek 6. Określanie ścieżek wymaganych przez Lazarus IDE do poprawnego działania
Rysunek 7. Przykładowa aplikacja wykorzystująca bibliotekę OpenGL – tak, gry 3D także można pisać z
użyciem FPC/Lazarus
56 październik 2009
Rozwiązania
Napisz raz, skompiluj gdziekolwiek
go użytkownika (nie z konta root!), dla które-
go już zainstalowaliśmy kompilator FPC wy-
dajać komendę:
$ svn checkout http://
svn.freepascal.org/svn/fpc/trunk fpc
SVN rozpocznie pobieranie źródeł z Internetu.
Na początku tego procesu powstanie także ka-
talog fpc, zawierający źródła kompilatora FPC,
który później będzie wykorzystywany przez
Lazarus IDE podczas pracy. Warto także pamię-
tać o tym, że w przyszłości, w dowolnym mo-
mencie możemy zaktualizować pobrane źródła,
poprzez wydanie komend w katalogu fpc:
$ svn up
Teraz jednak, kiedy źródła zostały pobrane do
katalogu fpc, skupiamy się na dalszej instala-
cji. Wydajemy następujące komendy:
$ cd fpc
$ make clean all
Na tym etapie podnieśmy nasze uprawnienia
do poziomu superużytkownika:
$ su
Password: xxxxxxxx
I wydajmy komendy:
# make install
# exit
$ fpc
Jeśli wszystko przebiegło bez błędów (a po-
winno), to naszym oczom ukaże się sygnatu-
ra Free Pascal Compiler i lista jego parame-
trów (Rysunek 3).
Teraz możemy pobrać źródła Lazarus
IDE. Opuśćmy katalog fpc i wydajmy na-
stępująca komendę w naszym katalogu do-
mowym:
$ svn checkout http://
svn.freepascal.org/svn/lazarus/trunk
lazarus
Warto zauważyć, że całe IDE jest instalo-
wane do jednego katalogu (lazarus). Dzię-
ki temu odinstalowanie Lazarus IDE ograni-
cza się wyłącznie do usunięcia tego katalogu.
Nie musimy obawiać się, że po odinstalowa-
niu pakietu w naszym systemie zostaną reszt-
ki porozrzucane po różnych katalogach.
Kiedy SVN skończy pracę, wydajemy
następujące komendy:
$ pwd
/home/<nazwa_konta_użytkownika>
$ su
Password: xxxxxxxx
# cd lazarus
# make clean all
Rozpocznie się proces kompilacji źródeł La-
zarus IDE (oczywiście, do tego celu używa-
ny jest wcześniej zainstalowany kompilator
FPC, ponieważ Lazarus IDE napisane jest w
Pascalu, a nie w C lub C++). W pewnym mo-
Duża przenośność
• Opcje wyboru zgodności składni języka.
• Opcje wyboru platformy docelowej.
• Opcje wyboru docelowej biblioteki graficznej.
• Możliwość konwersji projektów z Delphi/Object Pascala.
• Można tworzyć aplikacje nie tylko w GNU/Linux, ale także w innych systemach ope-
racyjnych, np. MS Windows, MacOS X, FreeBSD (inne w opracowaniu).
• Aplikacje przenośne tworzy się zgodnie z koncepcją: write once, compile anywhere.
Szeroka paleta komponentów, bibliotek i kodu źródłowego
• Bogata biblioteka komponentów niewizualnych (FCL) i wizualnych (LCL), w tym bar-
dzo dobre wsparcie dla baz danych (m.in. MySQL, PostgreSQL, Interbase/Firebird,
MSSQL) z użyciem dostarczanych komponentów bazodanowych (Rysunek 8) lub
opracowanych przez zewnętrznych dostawców (np. ZeosLib).
• Możliwość instalowania dodatkowych komponentów LCL – analogicznie jak w przy-
padku biblioteki VCL w produktach firm Borland (a dziś – Embarcadero).
• Dzięki zgodności z Borland Pascalem i Delphi, solidna i bogata baza kodu źró-
dłowego.
Otwartość i elastyczność
Projekt rozwijany na zasadach Open Source – licencje GNU/GPL i GNU/LGPL pozwala-
ją wykorzystywać FPC/Lazarus do opracowywania aplikacji komercyjnych dla wszystkich
wspieranych platform docelowych.
Inne cechy
• Wydajny kompilator Free Pascal Compiler.
• Lazarus IDE jest bardzo zbliżone funkcjonalnie do Delphi/Kylix.
Podstawowe cechy Free Pascal Compiler i Lazarus IDE
Rysunek 8. Lazarus IDE oferuje bardzo bogatą bibliotekę wizualnych komponentów LCL, w tym całkiem
atrakcyjne kontrolki bazodanowe
57www.lpmagazine.org
Rozwiązania
Napisz raz, skompiluj gdziekolwiek
mencie, powinniśmy zobaczyć następujący
komunikat – Listing 1.
Błąd kompilacji jest spowodowany fak-
tem, że Lazarus chciałby domyślnie używać
starszej wersji biblioteki GTK niż zainstalo-
wana w naszym systemie wersja GTK2. I do-
brze. Niech tak zostanie. Nic nie zmieniajmy,
a jedynie wywołajmy kompilację ze stosow-
nym parametrem, celem uniknięcia powyż-
szego błędu:
# make clean all LCL_PLATFORM=gtk2
To jest najprostsze obejście. Autorzy FPC/
Lazarus ostrzegają, że może powodować wy-
stępowanie pewnej ilości błędów funkcjonal-
nych w czasie pracy z IDE, ale... Doświad-
czenia dowodzą, że nie jest tak źle jeśli cho-
dzi o stabilność. Jeżeli jednak bardzo zależy
nam na maksymalnej stabilności, zawsze mo-
żemy zainstalować pakiet libgdk-pixbuf-de-
vel i skompilować Lazarus IDE komendą:
make clean all. To rozwiązanie uważa-
ne jest za stabilniejsze, dlatego że biblioteka
GTK1 uważana jest za bardziej stabilną. Nie-
stety, w Slackware 12.x będą z tym problemy,
dlatego zaleca się (przynajmniej dla tej dys-
trybucji) skupić się na GTK2 i nie marnować
czasu. Po chwili, kiedy proces kompilacji La-
zarus IDE ze wsparciem dla biblioteki GTK2
dobiegnie końca, zobaczymy następujące ko-
munikaty – Listing 2.
Po zakończeniu kompilacji wydajemy ko-
mendy:
# exit
$ pwd
/home/<nazwa_konta_użytkownika>/
lazarus
$ ./lazarus
Uruchomione zostanie Lazarus IDE (Rysunek
4). Znowu błąd? Nie. To normalne przy pierw-
szym uruchomieniu. Zwyczajnie, Lazarus IDE
nie odnalazł wymaganych źródeł kompilatora
FPC, które będziemy musieli dopiero wska-
zać w czasie konfiguracji środowiska (po to
je pobieraliśmy). Potwierdźmy więc komuni-
kat i poczekajmy, aż uruchomi się IDE (Ry-
sunek 5).
Zwróćmy uwagę na podobieństwo La-
zarus IDE do Delphi czy Kyliksa. Teraz mu-
simy wskazać źródła Free Pascala (dlatego
m.in. je pobieraliśmy w wcześniejszym eta-
pie). W tym celu udajemy się do: Environ-
ment –> Options i na drzewku opcji, w węź-
le Environments –> Files, w pozycji FPC So-
urce Directory podajemy ścieżkę do źródeł
kompilatora FPC. W tym przykładzie będzie
to ścieżka /home/wawrzyn/fpc (dla użyt-
kownika wawrzyn). Następnie klikamy OK, a
po zamknięciu okna z menu Environment wy-
bieramy pozycję Rescan FPC source directo-
ry (Rysunek 6).
Zrobione. Posiadamy w pełni funkcjonal-
ne środowisko programistyczne Lazarus IDE
działające w oparciu o kompilator FPC.
Pierwsze kroki w nowym środowisku
Bez względu na to, czy mieliśmy do czynie-
nia z Delphi lub Kyliksem, naszą przygodę
z Lazarus/FPC najlepiej zacząć od udania
się do katalogu z przykładami. Jest to chy-
ba najlepszy sposób zaznajomienia się z no-
wymi narzędziami i ich podstawowymi moż-
liwościami. Jeśli jakiś przykład nie chce się
skompilować, np. wyświetla błąd:
[…] Fatal: Can’t find unit contnrs
used by Graphics
Oznacza to, że musimy poprawić konfigura-
cję naszego środowiska. W tym celu udajemy
się do menu: Project –> Compiler Options, na
zakładce Linking wybieramy Test. Zauważ-
my, że komunikaty ostrzeżeń (ang. warning)
nie są krytyczne, ale błędy (ang. error) całko-
wicie uniemożliwiają kompilację. We wspo-
mnianym przypadku, jeśli błąd dotyczy zdu-
plikowanego pliku konfiguracyjnego fpc.cfg
(jeden plik może znajdować się w katalogu
/etc/fpc.cfg, a drugi w katalogu domowym,
np.: /home/wawrzyn/.fpc.cfg – dla użytkowni-
ka wawrzyn), to najlepiej usunąć plik .fpc.cfg z
katalogu domowego. Po tym zabiegu wciska-
my przycisk Test, ponownie – błąd dotyczący
duplikatów, powinien zostać usunięty. Od te-
raz będziemy w stanie kompilować wszystkie
nasze projekty (o ile oczywiście nie wymagają
dostępności dodatkowych komponentów, któ-
re należy instalować ekstra). Dla przykładu,
zwróćmy uwagę na aplikację opartą na biblio-
tece OpenGL (Rysunek 7).
Podsumowanie
FPC/Lazarus to produkty na tyle dojrzałe i
oferujące tak bogatą funkcjonalność, że z po-
wodzeniem można o nich napisać niejedną
książkę. Tym samym, nie sposób przedstawić
wszystkich ich zalet w jednym artykule. Mam
jednak nadzieję, że udało mi się zachęcić do
eksperymentowania i poznawania możliwości
tego narzędzia we własnym zakresie. Już dziś
można powiedzieć, że FPC/Lazarus uniknęły
losu Kyliksa i w pewnym sensie zwyciężyły
ze swoim komercyjnym konkurentem, choć
wcale tak to się nie zapowiadało. Na ile jednak
narzędzia te odniosą sukces? Jaka będzie ich
popularność w najbliższym czasie? To w du-
żym stopniu zależy od nas, czyli od użytkow-
ników. Wydaje się, że przed FPC/Lazarus jest
całkiem świetlana przyszłość. Tym bardziej,
że narzędzia te nie są związane wyłącznie z
GNU/Linuksem lub MS Windows, jak ich
komercyjne pierwowzory (Delphi i Kylix), a
możliwości tworzenia aplikacji z ich użyciem
są ograniczone wyłącznie przez wyobraźnię
programisty – od frontendów dla baz danych,
po aplikacje graficzne 3D.
Autor jest tak zagorzałym zwolennikiem
Slackware GNU/Linux, że maksymę KISS
(Keep It Simple Stupid), która przyświe-
ca rozwojowi ulubionej dystrybucji, stara
się przenosić na praktycznie każdą sferę
swoich działań. Nie lubi chaosu, efekciar-
stwa i nachalnego marketingu, a w inży-
nierii ceni rozwiązania proste i skuteczne.
Zawsze gotów podjąć ciekawe wyzwanie i
porzucić wszelką rutynę. Wszak życie jest
za krótkie, aby się nudzić!
Kontakt z autorem:
wawrzyniak@gmail.com
O autorze
• [1] Wikipedia o języku Pascal –http://pl.wikipedia.org/wiki/Pascal_(j%C4%99zyk_
programowania)
• [2] Wikipedia o językach Modula, Modula-2, Oberon itp. – http://pl.wikipedia.org/wiki/
Modula, http://en.wikipedia.org/wiki/Oberon_(programming_language)
• [3] Strona domowa profesora Niklausa Wirtha – http://www.inf.ethz.ch/personal/wirth/
• [4] Wersje instalacyjne FPC – http://sourceforge.net/projects/freepascal/files/
• Strona domowa projektu Free Pascal Compiler – http://www.freepascal.org/
• Strona domowa projektu Lazarus IDE – http://www.lazarus.freepascal.org/
• Obszerna dokumentacja Lazarus IDE – http://wiki.lazarus.freepascal.org/Lazarus_
Documentation
• Komponenty bazodanowe ZeosLib – http://sourceforge.net/projects/zeoslib/
W Sieci

Free Pascal Compiler i Lazarus IDE

  • 1.
    Rozwiązania Napisz raz, skompilujgdziekolwiek 50 październik 2009 linux@software.com.pl Free Pascal Compiler i Lazarus IDE Trwają niekończące się dyskusje na temat znaczenia technologii Java i Mono w świecie systemów operacyjnych GNU/Linux. Rozważa się używanie ich do tworzenia praktycznie każdego typu aplikacji, od webowych, przez przenośne, biurkowe, bazodanowe frontendy, po aplikacje wbudowane etc. W przypadku aplikacji przenośnych nasz wybór nie musi jednak ograniczać się do Java i Mono, które w rzeczywistości mają dużo wspólnego, jeśli chodzi o podstawy działania i zapewniania przenośności aplikacji (maszyna wirtualna, kod pośredni) w myśl hasła write once, run everywhere. Możemy świadomie pójść trzecią drogą i skorzystać z tandemu Free Pascal Compiler (FPC)/Lazarus. Paweł Wawrzyniak H asło, które przyświeca twórcom FPC/ Lazarus, brzmi: write once, compile any- where (zwróćmy uwagę na przewrotne za- stąpienie w tym sloganie słowa everywhe- re - wszędzie, znanego z hasła write once, run every- where ukutego przez Sun Microsystems na rzecz pro- mocji technologii Java, słowem anywhere – gdziekol- wiek). W oczywisty sposób stanowi ono wyraz koncep- cji alternatywnej wobec technologii Java i Mono (w isto- cie – .NET). W odróżnieniu od poprzedniego podejścia, nie ma tutaj mowy o żadnych maszynach wirtualnych, na których uruchamiane są aplikacje w kodzie pośrednim. Podstawowe założenia są takie, że: • Tworzymy kod źródłowy w powszechnie znanym języku – może to być Pascal lub Object Pascal. • Następnie kod źródłowy kompilujemy do kodu wy- nikowego określając docelową platformę sprzętową i systemową. Powyższe możliwości dostarcza nam kompilator Free Pascal Compiler (FPC) oraz zintegrowane środowisko programistyczne (ang. Integrated Development Environ- ment, IDE) typu RAD (ang. Rapid Application Develop- ment) o nazwie Lazarus. Zarówno kompilator jak i IDE są obecnie w bardzo zaawansowanym stadium rozwoju, a oferowane przez nie cechy sprawiają, że w wielu przypadkach mogą być uważane za najlepszy możliwy wybór, jeśli chodzi o na- rzędzia programistyczne, dzięki którym szybko stworzy- my atrakcyjne aplikacje z myślą o przenoszeniu ich mię- dzy różnymi systemami. Dodajmy, że FPC/Lazarus nie tylko pozwalają na tworzenie aplikacji przenośnych, ale same – jako narzędzia – mają taki charakter. To sprawia, że naprawdę warto przyjrzeć im się bliżej. Wieloplatformowy kompilator Pascala Najnowsza dostępna w momencie pisania artykułu wer- sja kompilatora FPC (2.2.4) pozwalała na generowanie kodu wynikowego dla następujących platform sprzęto- wo-systemowych: • GNU/Linux dla: i386, x86 (amd64), PowerPC, Sparc, ARM.
  • 2.
    Rozwiązania Napisz raz, skompilujgdziekolwiek 51www.lpmagazine.org • MS Windows: 32-bitowe (95/98/Me/XP/ 2000/2003/Vista and WinNT). • MS Windows: 64-bitowe (XP/Vista/ 2003). • MS Windows CE dla: ARM (z uży- ciem kompilatora skrośnego z platformy win32-i386). • FreeBSD dla: i386. • Mac OS X dla: PowerPC, i386. • DOS: z 32-bitowym ekstenderem GO- 32v2-i386. • OS/2 dla: i386 (Warp v3.0, 4.0, WarpSe- rver for e-Business oraz eComStation). W przypadku najnowszej wersji FPC nie uda- ło się opracować dedykowanych wersji dla systemów operacyjnych NetBSD, OpenBSD (wielka szkoda) i NetWare/i386, co spowodo- wane jest faktem braku opiekunów dla tych wydań. Autorzy kompilatora zapewniają jed- nak, że w powinien on działać w wymienio- nych systemach, ale ponieważ nie został od- powiednio przetestowany, a brak opiekuna oznacza także brak odpowiedniego wspar- cia, wersje nie zostały włączone do oficjalne- go wydania 2.2.4. Jako ciekawostkę, warto wspomnieć fakt, że starsze wersje kompilatora (z serii 1.x.x) były dostępne także dla takich platform systemowych i sprzętowych, jak: QNX (sys- tem czasu rzeczywistego)/i386, BeOS/i386, Amiga/m680x0 (procesor Motorola). Obec- nie trwają eksperymenty nad opracowaniem dedykowanej wersji dla systemu Sun Solaris (także OpenSolaris) i QNX (naprawdę, to bę- dzie coś!). Od Pascala do Delphi, C# i Oberona Zanim zaczniemy ewentualną krytykę języ- ka Pascal, jako podstawy kompilatora FPC, pozwólmy sobie na przedstawienie krótkie- go rysu historycznego i ewolucji języka Pas- cal. Wydaje się bowiem, że podstawowe za- rzuty stawiane tej technologii mają raczej postać utartych dogmatów i nie wynikają z prawdziwego doświadczenia. Fakt, że Pas- cal upowszechnił się w środowiskach szkol- nych i akademickich, jako narzędzie służą- ce do nauki programowania, nie powinien rzutować na ogólną ocenę języka. Z pewno- ścią nie jest to bowiem język wyłącznie dla uczniów, studentów, czy amatorów, tym bar- dziej, że dał początek wielu ciekawym tech- nologiom i innym językom o bardzo szero- kim zastosowaniu. Każdy kto naprawdę in- teresuje się językami programowania i in- spiracji szuka poza technologiami główne- go nurtu (ang. mainstream) z pewnością po- trafi to zauważyć. Język Pascal został opracowany przez profesora Niklausa Wirtha w latach 1968 do 1972, jako uniwersalny język programowania wysokiego poziomu. Jego podstawą stał się popularny wówczas Algol. Nazwa języka po- chodzi od francuskiego filozofa Blaise Pasca- la. Po raz pierwszy opis języka został opubli- kowany w The programming language Pas- cal, Acta Informatica 1/1971, a następnie w wersji poprawionej w The programming lan- guage Pascal (Revised Report), Bericht der Fachrgruppe Computer – Wissenschaften 5/1972. Jak twierdzą źródła internetowe, w roku 1972 używano już języka Pascal na kur- sie wprowadzającym do problematyki pro- gramowania komputerów. Pierwszym pod- ręcznikiem do nauki języka Pascal był Pas- cal. User Manual and Report z roku 1974, napisany przez Kathleen Jensen i Niklausa Wirtha. Jak widać, od samego początku ję- Kilka lat temu, słynąca z popularyzacji języka Pascal/Object Pascal w MS-DOS i MS Win- dows firma Borland starała się przenieść swoje doświadczenia i narzędzia na platformę GNU/Linux. Był to naprawdę świetny pomysł, tym bardziej, że w tamtym czasie brakowa- ło narzędzia pozwalającego na szybkie tworzenie aplikacji (RAD) przenośnych między GNU/Linux i MS Windows, oferujących wsparcie dla baz danych i posiadających atrak- cyjny interfejs użytkownika. Coś jednak poszło nie tak... Wydano trzy wersje (1.0, 2.0 i 3.0) środowiska Kylix. Wydaje się, że od samego początku fir- ma zmagała się ze swego rodzaju niespójnością logiczną, jeśli chodzi o zdefiniowanie swo- jego celu i akcje marketingowe. Z jednej strony Kylix miał być narzędziem, które zdominu- je niszę wynikającą z braku ekwiwalentu Delphi pod GNU/Linuksem. Z drugiej można było go uruchamiać wyłącznie w wybranych dystrybucjach, typu Red Hat, czy SuSE. To znacznie ograniczało krąg odbiorców. Tego nie lubi środowisko entuzjastów systemów GNU/Linux. Ponadto, Kylix, podobnie jak Delphi, był rozwiązaniem komercyjnym, a więc napotykał na naturalny opór ze strony użytkowników GNU/Linuksa, którzy znacznie bardziej cenią sobie licencję GNU/GPL. Z kolei licencja GNU/GPL nie jest mile widziana w przedsiębiorstwach, które dostarczają komercyjnych aplikacji (tutaj znacznie lepsze notowania mają licencję MIT czy BSD, pozwalające zamknąć kod oferowanego rozwiązania). Z oczywistych też względów Borland nie mógł zdecydować się na wydanie Kyliksa na licencji GNU/GPL. Sytuacja firmy Borland nie była łatwa, tym bardziej, że rynek GNU/Linuksa nie był w tam- tym czasie tak ustabilizowany, jak dziś. Dodatkowo, firma nie potrafiła nadać spójnego, zrozumiałego dla użytkowników GNU/Linuksa wizerunku swojego produktu, jako narzę- dzia będącego dokładną kopią Delphi (dlaczego zmieniono nazwę na Kylix?), które ma na celu uruchomienie rynku komercyjnych rozwiązań dla systemu GNU/Linux. Bardzo często więc wyrażano swoje rozczarowanie, przytaczając, po części słuszne, argumenty, że Pascal/Object Pascal nie nadaje się do pisania aplikacji i narzędzi systemowych dla GNU/Linuksa, w którym większość kodu napisana jest w C i C++. Było to jednak jakby manifestacją niezrozumienia idei narzędzia, a sam producent, zamiast tłumaczyć swoją wizję (czyżby ostatecznie jej zabrakło?), wolał skupić się na wprowadzeniu wsparcia dla języków C/C++ w Kyliksie (w niczym to nie pomogło, a wręcz jeszcze bardziej utwierdziło potencjalnych odbiorców w mylnym rozumieniu przeznaczenia produktu). Kylix był bardzo obiecującym narzędziem, nie pasował jednak do świata GNU/Linux, choćby przez swoją licencję i koncepcję. Trzeba jednak przyznać, że pomysł był dobry, choć najwyraźniej nie mógł zostać prawidłowo zrealizowany. Ostatecznie, firma Borland wycofała się ze wsparcia dla Kyliksa. Równolegle do działań firmy Borland rozwijały się inne narzędzia związane z językiem Pascal: GNU/Pascal, wolna implementacja kompilatora Pascala, wchodząca w skład ze- stawu kompilatorów GCC (ang. GNU Compiler Collection) i FPC/Lazarus. W czasie prób upowszechnienia Kyliksa, narzędzia FPC/Lazarus nie oferowały zbyt wiele, a samo Laza- rus IDE było bardzo niestabilne. Jednak dziś sytuacja wygląda całkiem inaczej. Produkt jest bardzo dojrzały, aktywnie rozwijany i wydaje się, że w przeciwieństwie do Kyliksa, ma szan- sę na całkowity sukces. Dostarcza on bowiem funkcjonalności Delphi (a nawet więcej, bio- rąc pod uwagę przenośność), a jednocześnie jest opracowywany na licencjach GNU/GPL i GNU/LGPL, dzięki czemu, choć jest uwolnionym produktem Open Source, nic nie stoi na przeszkodzie, aby tworzyć w nim aplikacje komercyjne. Tego nie oferował nam Kylix! Pascal w GNU/Linuksie, czyli rozwój w cieniu porażki Kyliksa
  • 3.
    52 październik 2009 Rozwiązania Napiszraz, skompiluj gdziekolwiek zyk ten był bardzo popularny w edukacji [1]. Szczyt jego popularności to druga połowa lat 80-tych i pierwsza połowa lat 90-tych, głów- nie za sprawą narzędzi programistycznych firmy Borland – sławne kompilatory Turbo Pascal i Borland Pascal dla systemów CP/M, MS-DOS i MS Windows 3.x. Wówczas po- pularna była strukturalna wersja języka, któ- ra wyewoluowała, zgodnie z powszechnym trendem w kierunku języka w pełni obiekto- wego, zwanego Object Pascal. Pierwsze rozszerzenia obiektowe Pasca- la dostępne były jeszcze w czasach kompila- torów Borlanda, jednak Object Pascal został spopularyzowany w kolejnym produkcie fir- my Borland – Delphi, począwszy od wersji 1.0. Obecnie język Object Pascal jest podsta- wą takich środowisk programistycznych, jak Delphi (dziś producentem Delphi nie jest już Borland, a firma Embarcadero) oraz Delphi Prism (nowy produkt będący wynikiem po- łączenia sił firm Embarcadero i Rem Objects, twórcy języka Oxygene dla .NET, także opar- tego na Object Pascalu). W świetle tych faktów widać, że język Pascal wciąż ewoluuje i nie można postawić mu zarzutu archaiczności. Chyba, że mamy na myśli strukturalną wersję tego języka. Ob- ject Pascal jest już językiem całkowicie obiek- towym, a jego najnowsze wcielenia integrują się z pozostałymi rozwiązaniami dla platformy .NET (i jej uwolnionej implementacji – Mo- no). Faktem jest natomiast, że Pascal nie jest już tak popularny, jak kiedyś, za co być mo- że winę ponosi, zdaje się, niespójny marketing produktów firmy Borland (Delphi i Kylix). Dodajmy, że Anders Hejlsberg, swe- go czasu pracownik firmy Borland (1989- 1996), brał udział w rozwijaniu kompila- torów Pascala oferowanych przez tą fir- mę, był także szefem zespołu tworzącego Delphi. Następnie, od 1996 roku rozpoczął pracę w firmie Microsoft, gdzie najpierw był zaangażowany w tworzenie kompila- tora J++ i biblioteki Windows Foundation Classes (WFC), a następnie, po przegranym procesie między firmą Microsoft a Sun Mi- crosystems (w którym – ogólnie rzecz uj- mując –zarzucano firmie Microsoft tworze- nie nieprzenośnej wersji języka Java, nie- zgodnej z definicją tej technologii), w 2000 roku rozpoczął tworzenie następcy J++, ję- zyka C# i jest jego głównym architektem. Istnieje więc coś (właściwie ktoś), co łączy pozornie odległe technologie – Object Pas- cal i C#. Pewne właściwości Object Pasca- la są także widoczne w C# (oprócz więk- szości innych cech, zapożyczonych głów- nie z języka Java). Warto także zauważyć, że po stworze- niu języka Pascal, Niklaus Wirth stworzył bardzo podobny, jeśli chodzi o składnię, ale rozszerzony na potrzeby modularności kodu język Modula (1978), a następnie Modula-2 (1980). W założeniach miała to być ulepszo- na wersja języka Pascal. W latach 80-tych Niklaus Wirth opracował z kolei język Obe- ron, stworzony na potrzeby systemu ope- racyjnego o tej samej nazwie (1986), któ- ry pewnymi cechami zbliżał się do koncep- cji języka zorientowanego obiektowo [2]. Miał to być język bezpieczny, wyposażo- ny w sprawdzanie granic tablic, silnie typo- wany i posiadający tzw. kolektor nieużytków (ang. garbage collector). W roku 2007 po- wstała najnowsza specyfikacja tego języka, oznaczona: Oberon-07. Jak widać ewolucja języka Pascal w wykonaniu jego twórcy, je- śli tak rozumieć kolejne języki opracowy- wane przez Niklausa Wirtha [3], przebiega całkiem innym torem niż rozwój, który wi- dzimy na przykładzie Object Pascala, Del- phi czy Delphi Prism. Cechy języka Pascal Nie sposób przedstawić wszystkich cech ję- zyka Pascal w pojedynczym artykule, więc skupmy się wyłącznie na tych najbardziej charakterystycznych. Jeśli chodzi o skład- nię, to zamiast powszechnych w innych popularnych językach (Java, C, C++. C#, PHP, Perl) znaków definiujących blok ko- du { }, używa się słów kluczowych be- gin i end (charakterystycznych także dla Modula-2, Oberon, Ada). Zmienne i sta- Rysunek 1. Skrypt instalatora FPC w działaniu Rysunek 2. Tekstowe IDE dla Free Pascal Compiler pod GNU/Linuksem
  • 4.
    53www.lpmagazine.org Rozwiązania Napisz raz, skompilujgdziekolwiek łe deklarujemy w wydzielonej części blo- ku kodu, zwanej blokiem deklaracji (zmien- ne po słowie kluczowym w bloku deklaracji – var; stałe, analogicznie po słowie kluczo- wym – const). Na początku modułów (ang. units), w ich bloku deklaracji – definiuje- my zmienne lub stałe globalne; na początku procedur i funkcji, w ich blokach deklaracji – zmienne lub stałe lokalne. Język jest tak- że silnie typowany, co oznacza, że kompi- lator na etapie kompilacji kodu źródłowego sprawdza, czy do zmiennej typu X nie sta- ramy się podstawić zmiennej typu Y. Dzięki swojej rygorystyczności, Pascal zyskał so- bie w kręgach swoich zwolenników etykietę bezpiecznego języka programowania i fak- tycznie, często można spotkać go tam, gdzie liczy się solidność kodu i nie można pozwo- lić sobie na błąd wynikający z faktu, że pro- gramista poszedł na skróty. Pascal jest językiem proceduralnym, dlatego bliżej mu do języka C, niż C++. Do- stępne są typy rekordowe, które w pewnym sensie odpowiadają strukturom znanym z C. Z kolei obiektowe rozszerzenie języka Pascal – nazywane Object Pascal – w pew- nym sensie może stanowić alternatywę dla C++ (obiektowego rozszerzenia języka C). Z pewnością jednak zarówno Pascal, jak i Object Pascal są językami znacznie bardziej rygorystycznymi niż C i C++. Ta cecha mo- że być uważana zarówno za zaletę (eduka- cja, aplikacje o znaczeniu krytycznym), jak i za wadę (ograniczanie doświadczonych programistów). Tutaj nie jesteśmy w sta- nie dać odpowiedzi, czy jest to zaleta, czy wada – należy przekonać się samemu. War- to jedynie zwrócić uwagę, że Pascal/Object Pascal poprzez swoją składnię i restrykcyj- ność (silne typowanie) są językami bliski- mi językowi Ada (nawet do tego stopnia, że w obydwu językach także używa się słów kluczowych begin i end, a sam kod źródło- wy jest bardzo podobny), który znalazł za- stosowanie w przemyśle wojskowym, lot- nicznym, medycynie, czy energetyce (czyli wszędzie tam, gdzie nie ma miejsca na błąd, nawet kosztem obniżenia szybkości działa- nia programu). Pascal posiada także bardzo bogate za- plecze kodu źródłowego, wszelkich biblio- tek i komponentów, a dzięki możliwości łą- czenia kodu źródłowego poprzez wrappery i interfejsy (w większości dostępnych kom- pilatorów) z bibliotekami dla innych języ- ków (głównie C i C++), oferuje bardzo du- że możliwości. Dziś jednak niewiele osób korzysta ze strukturalnej odmiany Pascala i powszechniej używany jest Object Pascal, co zresztą zrozumiałe. Dzięki Delphi, Ob- ject Pascal upowszechnił się także jako ję- zyk służący do tworzenia aplikacji bazoda- nowych, dzięki czemu dostępne jest szero- kie wsparcie dla baz danych ze strony do- stawców bibliotek i komponentów. Do- tyczy to oczywiście także FPC/Lazarus, które są w bardzo dużym stopniu zgodne z Delphi. Aby zrozumieć ideę i przeznaczenie języ- ka Pascal/Object Pascal oraz uniknąć niepo- trzebnego porównywania go z C/C++ można pozwolić sobie na uproszczenie i założyć, że: cechy języków C/C++ predestynują ich wyko- rzystanie do takich zadań jak programowanie systemów operacyjnych, niskopoziomowych aplikacji (sterowniki dla urządzeń, wysoko- wydajne biblioteki przetwarzania danych, np. obrazu, dźwięku, kryptograficznych etc.), czy aplikacji przenośnych. W tych zastosowaniach Pascal/Object Pascal nie może z nimi konku- rować. Jednak cechy języka sprawiają, że do- skonale nadaje się on do tworzenia aplikacji użytkowych działających na wysokim pozio- Rysunek 3. Pierwsze wywołanie skompilowanego FPC Listing 1. Poniższego błędu kompilacji można uniknąć wskazując na obecność GTK2 w systemie [...] Compiling /home/wawrzyn/lazarus/debugger/frames/options_debugger_ signals.pas Linking ../lazarus /usr/bin/ld: cannot find -lgdk_pixbuf lazarus.pp(122,1) Error: Error while linking lazarus.pp(122,1) Fatal: There were 1 errors compiling module, stopping Fatal: Compilation aborted make[2]: *** [lazarus] Error 1 make[2]: Leaving directory '/home/wawrzyn/lazarus/ide' make[1]: *** [ide] Error 2 make[1]: Leaving directory '/home/wawrzyn/lazarus/ide' make: *** [ide] Error 2 […] Listing 2. Końcówka udanej kompilacji Lazarus IDE Free Pascal Compiler version 2.2.4 [2009/03/28] for i386 Target OS: Linux for i386 Compiling lazbuild.lpr Linking ../lazbuild 1189 lines compiled, 2.7 sec make[2]: Leaving directory '/home/wawrzyn/lazarus/ide' make[1]: Leaving directory '/home/wawrzyn/lazarus/ide'
  • 5.
    54 październik 2009 Rozwiązania Napiszraz, skompiluj gdziekolwiek mie i tutaj z powodzeniem może być uważa- ny za konkurenta. Także jeśli chodzi o przeno- śność. Mamy więc do czynienia z językami, które przeznaczone są jakby na różne pozio- my oddalenia od warstwy sprzętowej i do nie- co innych zastosowań. Wszystko zależy jed- nak od narzędzi – a trzeba przyznać, że dzięki FPC/Lazarus, Pascal/Object Pascal mają silne argumenty po swojej stronie. FPC/Lazarus, zestaw jedyny w swoim rodzaju FPC/Lazarus nie powielają błędów Kylik- sa, a ponadto, pod wieloma względami ofe- rują znacznie więcej (atrakcyjne licencjono- wanie, przenośność). Ponadto, choć z pewno- ścią FPC/Lazarus są w stanie zapełnić niszę na rynku rozwiązań do szybkiego tworzenia aplikacji z graficznym interfejsem użytkow- nika (i silnym wsparciem dla baz danych) w systemie GNU/Linux, nie zapominajmy, że mogą być z powodzeniem stosowane w MS Windows, FreeBSD czy Mac OS X. Prawdę mówiąc, ciężko znaleźć jakąś al- ternatywę dla FPC/Lazarus. Jeśli chodzi o za- awansowane, niekomercyjne IDE typu RAD dla języka C/C++, to z pewnością wyróż- nić można wxDevC++, które oferuje jednak znacznie mniejsze możliwości niż Lazarus (m.in. brak zaawansowanych bazodanowych komponentów GUI, typu: siatki, kalendarze, listy, pola edycyjne podłączane do źródeł da- nych). Oczywiście, pewne funkcjonalności można osiągnąć pisząc własny kod, zakłada- my jednak, że chodzi o to, aby tego nie robić (tworzenie aplikacji ma być szybkie i zgodne z duchem Delphi). Ponadto, wxDevC++ można uruchamiać wyłącznie w środowisku MS Win- dows. Dodajmy tylko, jako ciekawostkę, że wxDevC++ zostało napisane w... Delphi (jeśli kiedyś uda się przekompilować wxDevC++ w FPC/Lazarus, powinno być możliwe przenie- sienie tego środowiska także do GNU/Linuksa – na razie jednak próba ta nie udała się). Uwolnionych rozwiązań opartych na ję- zyku Pascal/Object Pascal (i w pewnym sen- sie także komercyjnych), które mogłyby konkurować z FPC/Lazarus, także brakuje. Z kolei porównywanie FPC/Lazarus do Mo- noDevelop dla Mono czy Eclipse lub NetBe- ans dla Java nie ma tutaj żadnego sensu (cał- kiem inna filozofia tworzenia aplikacji prze- nośnych i skala przedsięwzięcia). Można więc powiedzieć, że przynajmniej na razie narzędzia FPC/Lazarus stanowią kategorię same dla siebie i mają szansę zyskać sporą popularność w systemach GNU/Linux, jak i MS Windows. Przekonajmy się więc o tym, że warto dać im szansę. Instalacja Free Pascal Compiler i Lazarus IDE Instalację tandemu FPC/Lazarus rozpoczy- namy od zainstalowania kompilatora (FPC), a następnie instalujemy Lazarus (IDE). Do przeprowadzenia tego procesu potrzebuje- my: • Binariów Free Pascal Compliler w wer- sji 2.2.4 – pobieramy je z serwisu Sour- ceForge. • Źródeł Free Pascal Compiler – najłatwiej pobrać je za pomocą narzędzia SVN. • Źródeł Lazarus IDE – które również po- bierzemy za pomocą narzędzia SVN. Znajdujący się w dalszej części artykułu opis instalacji FPC i Lazarus został przeprowa- dzony w systemie operacyjnym GNU/Linux Slackware 12.2. Przedstawiona metoda po- winna jednak działać na większości dystry- bucji. Zanim podejmiemy decyzję, że chce- my pójść proponowaną ścieżką, sprawdź- my tylko, czy w naszej dystrybucji nie są dostępne gotowe do użycia pakiety binar- ne (FPC i Lazarus IDE są dołączane do re- pozytoriów pakietów wielu dystrybucji). Ni- żej przedstawiony sposób pokaże nam tak- że jedną istotną cechę FPC – kompilator ten jest napisany w Pascalu (jak należy!), dlate- go do kompilacji jego źródeł wykorzystamy - skompilowany wcześniej kompilator Free Pascal Compiler. Instalacja binarnej wersji kompilatora FPC Binaria kompilatora FPC pobieramy z serwi- su SourceForge.net [4]. Następnie, w konsoli terminala wydajemy następujące komendy (z konta użytkownika): $ mkdir freepascal $ cp fpc-2.2.4.i386-linux.tar freepascal $ cd freepascal $ tar xvf fpc-2.2.4.i386-linux.tar Rozpakowaniu ulegnie archiwum TAR, któ- re teraz możemy zainstalować. W tym ce- lu podnieśmy swoje uprawnienia do pozio- mu superużytkownika i wykonajmy skrypt instalacyjny: $ su Password: xxxxxxxx # ./install.sh Wyświetlone zostanie okno instalatora tek- stowego, który zacznie zadawać nam sze- reg pytań (Rysunek 1). Na początek potwier- dzamy (Enter) domyślną lokalizację. Następ- nie, instalator zapyta się, czy chcemy zainsta- lować IDE w wersji tekstowej – czemu nie? – może się przydać. Później, czy zainstalo- wać bibliotekę FCL? (ang. Free Pascal Com- ponent Library). Tutaj należy się drobne wy- jaśnienie. Biblioteka FCL dla kompilatora FPC ma dostarczać modułów (klas) oferujących funk- cjonalność potrzebą do realizacji podstawo- Rysunek 4. Pierwsze uruchomienie i błąd, którego należało się spodziewać. W rzeczywistości, tak wła- śnie ma być Rysunek 5. Lazarus IDE, od razu rzuca się w oczy podobieństwo do Delphi i Kyliksa
  • 6.
    55www.lpmagazine.org Rozwiązania Napisz raz, skompilujgdziekolwiek wych działań aplikacji oraz częściowo funk- cjonalność biblioteki VCL (ang. Visual Com- ponent Library) w celu zapewnienia zgodno- ści z Delphi. Ma także rozszerzać funkcjo- nalność VCL o cechy charakterystyczne dla FPC. Istotną różnicą wobec VCL jest też fakt, że FCL zawiera wyłącznie komponenty nie- wizualne. Moduły i komponenty, o których piszemy, włącza się do kodu źródłowego pro- gramu za pomocą słowa kluczowego Uses. Uzupełnieniem FCL jest biblioteka LCL (ang. Lazarus Component Library) dla Laza- rus, która z kolei dostarcza wizualnych kom- ponentów do budowania GUI aplikacji (włą- czając wizualne komponenty GUI ze wspar- ciem dla baz danych). FCL składa się obecnie m.in. z następujących pakietów: • fcl-base – moduły bazowe, • fcl-async – asynchroniczne wejście/ wyjście, • fcl-db – podstawowe wsparcie baz da- nych wraz ze sterownikami, • fcl-fpcunit – zestaw narzędzi do przepro- wadzania testów jednostkowych (ang. unit tests), • fcl-image – odczyt i zapis obrazów, • fcl-net – moduły związane z obsługą sieci, • fcl-process – zarządzanie procesami sys- temowymi, • fcl-registry – zarządzanie rejestrem, • fcl-web – wsparcie dla tworzenia aplika- cji webowych, • fcl-xml – przetwarzanie języka XML i praca z DOM (ang. Document Object Model), • paszlib – konwersja standardowej bi- blioteki kompresji zlib do języka Pascal (oczywiście, z wyłączeniem wszelkich zewnętrznych zależności). Wróćmy do instalacji... Następnie instalator pyta nas, czy zainstalować wszystkie pakie- ty? – tak. Później, czy instalować dokumen- tację? – tak. Potem, czy ma zainstalować pro- gramy demonstracyjne (oczywiście, że tak – to najlepsze źródło testów i dobry materiał do nauki) – podajemy więc ścieżkę dla pro- gramów demonstracyjnych, czyli – potwier- dzamy domyślną propozycję. To wszystko. Kompilator FPC w wersji binarnej, goto- wej do pracy, został zainstalowany. Możemy sprawdzić, co otrzymujemy na tym etapie. So 90’s, czyli klasyczne IDE dla FPC Podczas instalacji potwierdziliśmy, że chce- my zainstalować klasyczne, tekstowe IDE dla FPC. Przypomina ono do złudzenia sław- ne IDE, które używane było przez kompilato- ry Borland/Turbo Pascal, popularne w pierw- szej połowie lat 90-tych. Uważam, że warto je zainstalować i skonfigurować, ponieważ może się okazać, że nie zawsze będziemy ko- rzystali z możliwości graficznego Lazarusa (którego zainstalujemy w dalszej części arty- kułu). W celu uruchomienia tekstowego IDE dla FPC, wydajemy komendę: $ fp Jeśli chodzi o stopień podobieństwa do sław- nych, dosowych IDE firmy Borland, to zacho- wano zgodność, nawet jeśli chodzi o więk- szość skrótów klawiszowych, także... Jeśli wiek nam pozwala (O! Ironio!), a nasza pa- mięć nie zawiedzie, powinniśmy poczuć się całkiem swojsko (Rysunek 2). Instalacja Lazarus IDE, czyli w stronę Delphi W celu przeprowadzenia udanej instalacji La- zarus IDE, będziemy potrzebowali źródłowej wersji kompilatora FPC, która zostanie przez nas przekompilowana oraz źródeł samego Lazarus IDE. Najłatwiej, z konta tego same- Rysunek 6. Określanie ścieżek wymaganych przez Lazarus IDE do poprawnego działania Rysunek 7. Przykładowa aplikacja wykorzystująca bibliotekę OpenGL – tak, gry 3D także można pisać z użyciem FPC/Lazarus
  • 7.
    56 październik 2009 Rozwiązania Napiszraz, skompiluj gdziekolwiek go użytkownika (nie z konta root!), dla które- go już zainstalowaliśmy kompilator FPC wy- dajać komendę: $ svn checkout http:// svn.freepascal.org/svn/fpc/trunk fpc SVN rozpocznie pobieranie źródeł z Internetu. Na początku tego procesu powstanie także ka- talog fpc, zawierający źródła kompilatora FPC, który później będzie wykorzystywany przez Lazarus IDE podczas pracy. Warto także pamię- tać o tym, że w przyszłości, w dowolnym mo- mencie możemy zaktualizować pobrane źródła, poprzez wydanie komend w katalogu fpc: $ svn up Teraz jednak, kiedy źródła zostały pobrane do katalogu fpc, skupiamy się na dalszej instala- cji. Wydajemy następujące komendy: $ cd fpc $ make clean all Na tym etapie podnieśmy nasze uprawnienia do poziomu superużytkownika: $ su Password: xxxxxxxx I wydajmy komendy: # make install # exit $ fpc Jeśli wszystko przebiegło bez błędów (a po- winno), to naszym oczom ukaże się sygnatu- ra Free Pascal Compiler i lista jego parame- trów (Rysunek 3). Teraz możemy pobrać źródła Lazarus IDE. Opuśćmy katalog fpc i wydajmy na- stępująca komendę w naszym katalogu do- mowym: $ svn checkout http:// svn.freepascal.org/svn/lazarus/trunk lazarus Warto zauważyć, że całe IDE jest instalo- wane do jednego katalogu (lazarus). Dzię- ki temu odinstalowanie Lazarus IDE ograni- cza się wyłącznie do usunięcia tego katalogu. Nie musimy obawiać się, że po odinstalowa- niu pakietu w naszym systemie zostaną reszt- ki porozrzucane po różnych katalogach. Kiedy SVN skończy pracę, wydajemy następujące komendy: $ pwd /home/<nazwa_konta_użytkownika> $ su Password: xxxxxxxx # cd lazarus # make clean all Rozpocznie się proces kompilacji źródeł La- zarus IDE (oczywiście, do tego celu używa- ny jest wcześniej zainstalowany kompilator FPC, ponieważ Lazarus IDE napisane jest w Pascalu, a nie w C lub C++). W pewnym mo- Duża przenośność • Opcje wyboru zgodności składni języka. • Opcje wyboru platformy docelowej. • Opcje wyboru docelowej biblioteki graficznej. • Możliwość konwersji projektów z Delphi/Object Pascala. • Można tworzyć aplikacje nie tylko w GNU/Linux, ale także w innych systemach ope- racyjnych, np. MS Windows, MacOS X, FreeBSD (inne w opracowaniu). • Aplikacje przenośne tworzy się zgodnie z koncepcją: write once, compile anywhere. Szeroka paleta komponentów, bibliotek i kodu źródłowego • Bogata biblioteka komponentów niewizualnych (FCL) i wizualnych (LCL), w tym bar- dzo dobre wsparcie dla baz danych (m.in. MySQL, PostgreSQL, Interbase/Firebird, MSSQL) z użyciem dostarczanych komponentów bazodanowych (Rysunek 8) lub opracowanych przez zewnętrznych dostawców (np. ZeosLib). • Możliwość instalowania dodatkowych komponentów LCL – analogicznie jak w przy- padku biblioteki VCL w produktach firm Borland (a dziś – Embarcadero). • Dzięki zgodności z Borland Pascalem i Delphi, solidna i bogata baza kodu źró- dłowego. Otwartość i elastyczność Projekt rozwijany na zasadach Open Source – licencje GNU/GPL i GNU/LGPL pozwala- ją wykorzystywać FPC/Lazarus do opracowywania aplikacji komercyjnych dla wszystkich wspieranych platform docelowych. Inne cechy • Wydajny kompilator Free Pascal Compiler. • Lazarus IDE jest bardzo zbliżone funkcjonalnie do Delphi/Kylix. Podstawowe cechy Free Pascal Compiler i Lazarus IDE Rysunek 8. Lazarus IDE oferuje bardzo bogatą bibliotekę wizualnych komponentów LCL, w tym całkiem atrakcyjne kontrolki bazodanowe
  • 8.
    57www.lpmagazine.org Rozwiązania Napisz raz, skompilujgdziekolwiek mencie, powinniśmy zobaczyć następujący komunikat – Listing 1. Błąd kompilacji jest spowodowany fak- tem, że Lazarus chciałby domyślnie używać starszej wersji biblioteki GTK niż zainstalo- wana w naszym systemie wersja GTK2. I do- brze. Niech tak zostanie. Nic nie zmieniajmy, a jedynie wywołajmy kompilację ze stosow- nym parametrem, celem uniknięcia powyż- szego błędu: # make clean all LCL_PLATFORM=gtk2 To jest najprostsze obejście. Autorzy FPC/ Lazarus ostrzegają, że może powodować wy- stępowanie pewnej ilości błędów funkcjonal- nych w czasie pracy z IDE, ale... Doświad- czenia dowodzą, że nie jest tak źle jeśli cho- dzi o stabilność. Jeżeli jednak bardzo zależy nam na maksymalnej stabilności, zawsze mo- żemy zainstalować pakiet libgdk-pixbuf-de- vel i skompilować Lazarus IDE komendą: make clean all. To rozwiązanie uważa- ne jest za stabilniejsze, dlatego że biblioteka GTK1 uważana jest za bardziej stabilną. Nie- stety, w Slackware 12.x będą z tym problemy, dlatego zaleca się (przynajmniej dla tej dys- trybucji) skupić się na GTK2 i nie marnować czasu. Po chwili, kiedy proces kompilacji La- zarus IDE ze wsparciem dla biblioteki GTK2 dobiegnie końca, zobaczymy następujące ko- munikaty – Listing 2. Po zakończeniu kompilacji wydajemy ko- mendy: # exit $ pwd /home/<nazwa_konta_użytkownika>/ lazarus $ ./lazarus Uruchomione zostanie Lazarus IDE (Rysunek 4). Znowu błąd? Nie. To normalne przy pierw- szym uruchomieniu. Zwyczajnie, Lazarus IDE nie odnalazł wymaganych źródeł kompilatora FPC, które będziemy musieli dopiero wska- zać w czasie konfiguracji środowiska (po to je pobieraliśmy). Potwierdźmy więc komuni- kat i poczekajmy, aż uruchomi się IDE (Ry- sunek 5). Zwróćmy uwagę na podobieństwo La- zarus IDE do Delphi czy Kyliksa. Teraz mu- simy wskazać źródła Free Pascala (dlatego m.in. je pobieraliśmy w wcześniejszym eta- pie). W tym celu udajemy się do: Environ- ment –> Options i na drzewku opcji, w węź- le Environments –> Files, w pozycji FPC So- urce Directory podajemy ścieżkę do źródeł kompilatora FPC. W tym przykładzie będzie to ścieżka /home/wawrzyn/fpc (dla użyt- kownika wawrzyn). Następnie klikamy OK, a po zamknięciu okna z menu Environment wy- bieramy pozycję Rescan FPC source directo- ry (Rysunek 6). Zrobione. Posiadamy w pełni funkcjonal- ne środowisko programistyczne Lazarus IDE działające w oparciu o kompilator FPC. Pierwsze kroki w nowym środowisku Bez względu na to, czy mieliśmy do czynie- nia z Delphi lub Kyliksem, naszą przygodę z Lazarus/FPC najlepiej zacząć od udania się do katalogu z przykładami. Jest to chy- ba najlepszy sposób zaznajomienia się z no- wymi narzędziami i ich podstawowymi moż- liwościami. Jeśli jakiś przykład nie chce się skompilować, np. wyświetla błąd: […] Fatal: Can’t find unit contnrs used by Graphics Oznacza to, że musimy poprawić konfigura- cję naszego środowiska. W tym celu udajemy się do menu: Project –> Compiler Options, na zakładce Linking wybieramy Test. Zauważ- my, że komunikaty ostrzeżeń (ang. warning) nie są krytyczne, ale błędy (ang. error) całko- wicie uniemożliwiają kompilację. We wspo- mnianym przypadku, jeśli błąd dotyczy zdu- plikowanego pliku konfiguracyjnego fpc.cfg (jeden plik może znajdować się w katalogu /etc/fpc.cfg, a drugi w katalogu domowym, np.: /home/wawrzyn/.fpc.cfg – dla użytkowni- ka wawrzyn), to najlepiej usunąć plik .fpc.cfg z katalogu domowego. Po tym zabiegu wciska- my przycisk Test, ponownie – błąd dotyczący duplikatów, powinien zostać usunięty. Od te- raz będziemy w stanie kompilować wszystkie nasze projekty (o ile oczywiście nie wymagają dostępności dodatkowych komponentów, któ- re należy instalować ekstra). Dla przykładu, zwróćmy uwagę na aplikację opartą na biblio- tece OpenGL (Rysunek 7). Podsumowanie FPC/Lazarus to produkty na tyle dojrzałe i oferujące tak bogatą funkcjonalność, że z po- wodzeniem można o nich napisać niejedną książkę. Tym samym, nie sposób przedstawić wszystkich ich zalet w jednym artykule. Mam jednak nadzieję, że udało mi się zachęcić do eksperymentowania i poznawania możliwości tego narzędzia we własnym zakresie. Już dziś można powiedzieć, że FPC/Lazarus uniknęły losu Kyliksa i w pewnym sensie zwyciężyły ze swoim komercyjnym konkurentem, choć wcale tak to się nie zapowiadało. Na ile jednak narzędzia te odniosą sukces? Jaka będzie ich popularność w najbliższym czasie? To w du- żym stopniu zależy od nas, czyli od użytkow- ników. Wydaje się, że przed FPC/Lazarus jest całkiem świetlana przyszłość. Tym bardziej, że narzędzia te nie są związane wyłącznie z GNU/Linuksem lub MS Windows, jak ich komercyjne pierwowzory (Delphi i Kylix), a możliwości tworzenia aplikacji z ich użyciem są ograniczone wyłącznie przez wyobraźnię programisty – od frontendów dla baz danych, po aplikacje graficzne 3D. Autor jest tak zagorzałym zwolennikiem Slackware GNU/Linux, że maksymę KISS (Keep It Simple Stupid), która przyświe- ca rozwojowi ulubionej dystrybucji, stara się przenosić na praktycznie każdą sferę swoich działań. Nie lubi chaosu, efekciar- stwa i nachalnego marketingu, a w inży- nierii ceni rozwiązania proste i skuteczne. Zawsze gotów podjąć ciekawe wyzwanie i porzucić wszelką rutynę. Wszak życie jest za krótkie, aby się nudzić! Kontakt z autorem: wawrzyniak@gmail.com O autorze • [1] Wikipedia o języku Pascal –http://pl.wikipedia.org/wiki/Pascal_(j%C4%99zyk_ programowania) • [2] Wikipedia o językach Modula, Modula-2, Oberon itp. – http://pl.wikipedia.org/wiki/ Modula, http://en.wikipedia.org/wiki/Oberon_(programming_language) • [3] Strona domowa profesora Niklausa Wirtha – http://www.inf.ethz.ch/personal/wirth/ • [4] Wersje instalacyjne FPC – http://sourceforge.net/projects/freepascal/files/ • Strona domowa projektu Free Pascal Compiler – http://www.freepascal.org/ • Strona domowa projektu Lazarus IDE – http://www.lazarus.freepascal.org/ • Obszerna dokumentacja Lazarus IDE – http://wiki.lazarus.freepascal.org/Lazarus_ Documentation • Komponenty bazodanowe ZeosLib – http://sourceforge.net/projects/zeoslib/ W Sieci