Snaha vývojářů Free Pascalu o kompatibilitu s Delphi vyústila ve
vznik knihovny FCL, jež jednak překrývá některé části knihovny
VCL z Delphi a jednak přidává další zajímavou
funkcionalitu. Dnes se tedy podíváme, co všechno tato knihovna
zatím umí.
13.5.2004 08:00 | Aleš Hakl | přečteno 14265×
Knihovna jednotek FCL obsahuje mnoho užitečných tříd, komponent
a funkcí. Původně se jednalo o snahu o kompatibilitu s Delphi,
ale autoři postupně přidávali i jinou užitečnou funkcionalitu. A
tak vznikla knihovna, která je i přes svou značnou
rozpracovanost užitečná pro mnoho programů.
FCL je zkratka z Free Component Library, component
(česky komponenta) je v terminologii Delphi speciální třída
(TComponent a potomci), jež má zajímavou vlastnost:
umí vytvářet instance potomků načtením z proudu. Tato vlastnost
je zásadní pro Delphi, ale například v projektu Lazarus není ze mně
nepochopitelných důvodů využita.
Knihovna FCL implementuje pouze nevizuální komponenty a jiné
užitečné věci, není určena pro tvorbu uživatelského
rozhraní. Tvorbu uživatelského rozhraní řeší například výše
zmíněný projekt Lazarus a na
stránkách Free
Pascalu je ještě odkaz na projekt Kassandra, který ovšem
nikam nevede.
Pro rychlou představu bych se držel seznamu jednotek ze stránek knihovny
FCL s tím, že dle mého názoru nezajimávé jednotky vypustím a
o těch zajimavějších přidám další informace.
-
base64 - Jednotka obsahuje třídy
TBase64EncodingStream a
TBase64DecodingStream, které kódují zapsaná data
do Base64,
respektive čtená data dekódují. Obě třídy fungují jako
wrappery kolem jiného proudu (instance potomka abstraktní
třídy TStream), který je určen jediným parametrem
konstruktoru Create.
-
db - Základní
třídy pro přístup k databázím, zejména abstraktní třída
TDataset, od níž jsou děděny všechny ostatní
třídy pro práci s databázovými pohledy.
-
dbf - Komponenta
TDbf upravená
pro použití ve FPC.
-
ddg_ds -
Tato jinak nepříliš užitečná jednotka může sloužit jako ukázka,
jak vytvářet vlastní potomky třídy TDataset, jedná se
totiž o velice jednoduchou (a jednoúčelovou) databazi pracující
nad obyčejným souborem.
-
dom - A zde se
právě dostáváme k zajímavým věcem, čímž implementace Document Object
Model určitě je. Současný stav implementace je takový, že rozhraní
vypadá, že umí DOM Level 2, leč spolehlivě fungují pouze Level 1
vlastnosti. Ve spojení s poměrně narychlo napsaným a ne příliš
funkčním XML parserem to znamená, že podpora XML není vůbec
kompletní, ale přesto může fungovat jako rozumná metoda pro
ukládání dat nebo konfigurace.
-
ezcgi -
Jedná se o jednu jednoduchou třídu určenou pro podporu psaní
klasických CGI aplikací. Vše, co musíte udělat, je překrýt metody
DoGet a/nebo DoGet a prostřednictvím
dostupných metod a vlastností zjistit potřebné informace o
uživatelském požadavku.
-
http,
httpsvlt,
xmlrpc - Při procházení
zdrojových textů knihovny FCL jsem narazil na velmi zajímavý
adresář /net, jenž obsahuje jakousi implementaci xmlrpc a dokonce i s tím
související velmi jednoduchý (zatím silně rozpracovaný) http server, klient a servletovou
architekturu.
-
mysqldb
- Opět potomek TDataset, tentokrát pro
mysql. Vyplníte několik vlastností, zavoláte metodu a máte
výsledek SQL
dotazu v instanci potomka TDataset
-
pipes - V
celku jednoduchá jednotka, která obalí nepojmenovanou rouru
dvěma proudy - docela užitečná věc, v standardní knihovně C++
něco podobného dost postrádám.
-
xmlcfg -
Jednoduchá jednotka pro ukládání hierarchické konfigurace do
XML dokumentu. Cesty k jednotlivým vlastnostem se udávají jako
názvy oddělené lomítkem, přičemž poslední je název atributu,
ostatní názvy elementů. Například 'daemon/connection/port'.
-
xmlread - Velice
jednoduchý (ale funkční) XML parser. Největší nevýhodou je, že
parser neumí konertovat kódování. Pravdou je, že pokud chceme
pouze ukládat nějaká data, tak nám to zpravidla příliš nevadí a
leckdy i vyhovuje.
-
xmlwrite - Opak předchozího,
procedury které naopak zapíší obsah DOM stromu do XML dokumentu.
-
xpath - Funkčně vypadající
implementace jazyka XPath pracující nad
datovými strukturami z jednotky dom.
Tento výčet samozřejmě není vyčerpávající, pouze jsem vybral to
co je něčím zajímavé a většinou se jedná o jednotky, které v
VCL nenaleznete,
nebo jste je alespoň nenalezli v době kdy jsem v Delphi přestal
programovat.
Knihovna FCL je místy silně rozpracovaná či neúplná a autoři s
radostí přijímají jakékoli smysluplné další třídy, ať již GPL
implementace nevizuálních komponent z Delphi, nebo komponenty
uplně nové.
Doufám, že vás dnešní poněkud teoretický a agitační díl
připravil na další, tentokráte již poněkud užitečnější,
pokračování, kde bych se chtěl podívat právě na podporu práce s
XML ve Free Pascalu.