Pascal, potažmo Object Pascal, prohlašovat za mrtvou relikvii je trochu programátorský kolorit. Je to trochu upovídaný programovací jazyk, ale dokážu najít hodně důvodů, proč jej definitivně neodsunout na smetiště dějin a proč v něm řešit některé úlohy.
Ano, byl to druhý programovací jazyk, který jsem se nějak systematicky učil, překvapivě tím prvním byl Forth, podle seriálu od Rudolfa Pecinovského, který vycházel v Amatérském Rádiu (1984).
Není Pascal jako Pascal
Pascal podle původního návrhu určen k výuce programování a odsud pochází i jeho zdánlivá „upovídanost“; kdo viděl někdy zápis v COBOLu tak bude nesouhlasit; se striktní typovou kontrolou.
Pascal je standardizován, ale standard je poměrně starý (fakticky počítačový pravěk) a dnes se pravděpodobně nejvíce využívá podoba Object Pascalu, jak byla definována roku 1985 (překladač Mac Pascal) a zpopularizována začátkem 90. let 20. století překladači firmy Borland (po Turbo Pascal 5.5).
Když Borland ohlásil ukončení vývoje svého Pascalovského překladače, začal vývoj Free Pascalu [dále jen FP], který považuji za nejlepší překladač. FP je portován snad na všechny běžně používané kombinace platforem a operačních systémů, případně lze použít kompilaci pro jinou platformu. FP fakticky adoptoval standard jazyka definovaný Borlandem, podporuje standardní syntaxe ANSI i ISO (Standardpascal P5) a některé části syntaxe Apple Pascalu. FP sám o sobě nemá rozumné IDE, ale existuje projekt Lazarus, který je popsatelný jako „open source Delphi“.
Není bez zajímavosti, že Pascal byl portován na Apple II a propagován jako hlavní programovací jazyk pro modely Lisa a Macintosh. Pascal, jako hlavní vysokoúrovňový jazyk, skončil u Apple s přechodem na mikroprocesory PowerPC. Svou stopu má i sázecím systému TeX, nebo je v něm vyvíjen velmi populární Total Commander.
![](https://marek.olsavsky.cz/wp-content/uploads/2017/10/Lazarus-1024x576.png)
![Free Pascal IDE](https://marek.olsavsky.cz/wp-content/uploads/2017/10/fpide-1024x320.png)
![](https://marek.olsavsky.cz/wp-content/uploads/2009/05/lazarus_s.png)
Object Pascal je…
Přehledný
Pomine-li programátor poměrně velikou „ukecanost“ jazyka, tak Pascal nutí programátora k logickému uspořádání programu i funkcí/procedur:
- Deklarace proměnných jsou na začátku, v samostatném bloku
var
. - Příkaz přiřazení je
:=
a porovnání=
. - Kolik programátorů někdy udělalo chybu (typicky v C-like jazycích), kdy v podmínkách přiřadili, místo porovnání? To Pascal nedovoluje.
Typově striktní
Pascal je kompilovaný a staticky typovaný jazyk (tuto informaci lze potkat v každé učebnici). Chybná přiřazení nepropustí překladač, který tak nutí programátora přemýšlet nad strukturou dat.
Z několika základních typů lze poskládat vlastní struktury a je to velmi úsporné pro pozdější uložení dat (ano ukládat tajemná čísla do databáze; s číselníky jen někde v programu; není korektní přístup k datovému návrhu).
Modulově orientovaný
Zdrojové kódy lze rozdělit do modulů (unit
), které jsou ve zvláštních souborech. To je dnes běžné, ale pro sestavení projektu není potřeba používat systém jako je make
.
Jednotky sdružují v jednom souboru hlavičky (interface
) i vlastní kódy procedur/funkcí (implementation
). Osobně mi systém „vše v jednom souboru“ vyhovuje.
Objektový
Po vydání Turbo Pascal 5.5 se dostal Object Pascal do širšího povědomí programátorů. Není tak striktně objektový, jako Ruby, nebo Smalltalk, přecijen byla podpora OOP dodána až dodatečně.
V unit
ě se objekt definuje jako komplexní typ (type TName = object
) s nastavením soukromých a veřejných metod (funkce/procedury) i vlastností (proměnné).
Je multiplatformní
Delphi běží jen v operačním systému Microsoft Windows (možná by se mi povedlo je spustit přes WINE) a prý umí kompilovat pro GNU/Linux, nebo MacOS X. Nedisponuji jimi, poslední Delphi, které jsem měl koupené, byla velmi povedená verze 6.
Vedle Delphi je svobodný projekt Free Pascal, který sám nemá RAD, a velmi povedený Lazarus, jenž nejen podporuje kompilaci pro jiné platformy, ale sám na různách platformách běží. Ano psát v Lazarusu na slabém počítači, například Raspberry Pi, není moc pohodlné, ale pro odladění problémových míst a finální kompilaci to stačí. Seznam podporovaných architektur a operačních systémů je opravdu solidní.
Generiky
Od roku 2006 podporuje FP i Generiky (parametrizované typy). Až do jara 2017 byla jejich podpora spíše experimentální, to změnilo vydání FGL.
Zajímavost
Svět jazyka Pascal je trochu pestřejší, než někteří připouští. Existuje i Smart Mobile Studio, v němž lze vytvářet aplikace s výstupem do HTML5 a JavaScriptu.
Závěr
Již delší dobu mám jako hlavní jazyky Python a Go, ale oba mi ne vždy vyhovují k zadání problému. Object Pascal, přesněji napsáno Free Pascal a Lazarus, mi skvěle poslouží vždy, když potřebuji udělat rychle malou aplikaci, chci solidní nástroj pro tvorbu GUI a příjemným bonusem je možnost kompilace pro několik platforem.
Vcelku zajímavý výukový materiál pro Pascal (anglicky) pochází od Michalise Kamburelise, autora Castle Game Engine. České výukové materiály s balíkem užitečných příkladů najdete na wikistránce TrSek.
Občas si říkám, že bych měl už Object Pascal vyměnit za moderní Rust, ale ve výsledku vítězí nedostatek času na „rozšiřování obzorů“ a zatím úplně nevěřím Mozille v otázce dlouhodobé podpory (zkušennost s Firefox OS pro mě bude ještě dlouho odstrašující).
Komentáře
5 komentářů: „Object Pascal není mrtvý, sněte dál“
Pascal je sice standardizovaný, ale Object Pascal nikoli. Navíc Obbject Pascal ani plně nevyhovuje standard Pascalu.
Pascal je původně učební jazyk, a jako takový trochu dře. Je dělám na naučení se štábní kultury, nikoli jako praktický jazyk. A jako učební jazyk je Pascal skvělý. Jako praktický jazyk už nikoli.
Objektové pojetí Borlandu, tedy Object Pascalu je značně nešťastné. Když jsem v něm kdysi ve firmě delší dobu programoval, došel jsem k názoru, že hůře se to objektové rozšíření už udělat nedalo. Dal bych přednost jakémukoli z jiných OOP jazyků, které znám. Všude je to vyřešeno lépe.
Pascal je snadno naučitelný, nic těžkého na něm není. Jediný problém je, že v Pascalu je na první místo kladena snadnost parsování a výroby Pascal kompilátoru, takže programátor pak zbytečně občas řeší, kam napsat středník a kam nikoli, ale žádná vysoká věda to není.
V podstatě jedinou výhodou Object Pascalu je to, že Borland k němu udělal grafickou knihovnu a IDE. A tím výhody Object Pascalu končí. Tedy můžete na to vlítnout a jednodušší věci prakticky spíše naklikat než naprogramovat.
Já jsem ale neměl problém použít externí grafickou knihovnu, ať v tom Pythonu, C++, či jinde. Tím pádem výhody Object Pascalu padají, zůstávají jen nevýhody – zmatený nalepovák syntaxe a objektů Object Pascalu. Je velká škoda, obrovská škoda, že Borland extenze Pascalu nevymyslel syntakticky a prakticky lépe. Takto de facto Pascal pohřbil vytvořením poloslepé větve Pascalu.
Pascal se dříve používal velice často, stejně jako celá řada dalších programovacích jazyků s pascalskou (alias algolskou) syntaxí. Vyzdvihl bych jeden skoro geniální jazyk zvaný Simula. Ten udělal jazyk s pascalskou syntaxí a objektovým programováním mnohem lépe, než Borland. Byl to legendární jazyk, velice často používaný, a první objektově orientovaný programovací jazyk vůbec. Učil se na každé vysoké škole. A po zkušenostech s ním jakýsi Stroustrup se rozhodl adaptovat C na objektry a vzniklo C++.
Díky za komentář.
Vadí snad, že není standard, když majoritní implementace defakto tvoří normu?
Jako praktický jazyk; a fakt je, že to je hlavně díky geniálnímu RAD Delphi; se Object Pascal osvědčil. Je docela zajímavé se podívat, co vše je v něm napsáno, nejsou to jen pidiprográmky. Napadá mě třeba ještě CQRLOG.
Jsem podezřelý z toho, že mám problém s použitím externí grafické knihovny? Třeba máte pravdu, ale distribuce není úplně triviální, když jste v prostředí, kde je ideálním způsobem distribuce „portable app“. Pak doinstalovat třeba lidsky vypadající wxWidgets může být trochu problém (pomíjím to, že ještě není produkční verze pro Python3).
Osobně jej nezavrhuji, použiji když je výhodné a; vyplatí se dočíst do konce; přitom mám dnes preference výběru trochu jinde.
Ach jo, myslel jsem, že na tehcnickém webu se věci berou věcně, nikoli osobně. Takže nejdříve o standardizaci jazyků.
Mně osobně vadí, pokud něco nemá standard. Majoritní implementace opravdu nestačí. Ze standardu mimo jiné zjistíte, co je zamýšlené chování, co je „implementation defined“, a co je chyba.
Právě proto se u seriózních jazyků, byť s jedinou implementací, píše standard – a ten je závazný. Je tomu tak třeba u Pythonu, je tomu tak třeba u různých databází, je tomu tak u mnoha věcí.
U jazyků bez standardu jste v háji. Pokud ten jazyk využíváte naplno, obvykle nevíte, jestli to co využíváte je náhodná implementace, nebo jestli je to standard, který i v dalších verzích hodlají dodržet.
Použijete třeba operaci -5 modulo 3. Jaký je výsledek, a jaký bude v dalších verzích? Pokud to není popsáno ve standardu, nevíte, a pro jistotu je lépe operaci nepoužívat.
Co je dalším důsledkem psaného standardu je fakt, že autoři jazyka při něm domyslí syntaxi a chování. Neznám programovací jazyk bez standardu, který vypadá jak nalepovák nalepováků, protože nic autory nenutilo to pořádně promýšlet. A je jedno, jestli mluvím o ObjectPascalu, o PHP, o Perlu, či řadě dalších jazyků.
Takže za mě vadí, pokud jazyk nemá psaný standard. Má jej obrovská řada jazyků i s jedinou implementací. A je to na kvalitě těch jazyků obrovsky znát.
—
ObjectPascal je samozřejmě rozšířený, ono tu Delphi bylo a je docela dlouho. Nicméně se domnívám, že vymírá a nakonec vymře. Jedním z důvodů bude právě ten neexistující standard. Druhým nedomyšlená nalepená syntaxe objektů.
A že je spousta programů? No je. Já jsem nikdy nepsal, že je špatné v Object Pascalu programovat.
—
Jedinou skutečnou výhodou ObjectPascalu je příjemné dělání GUI. Ovšem programování neGUI už dost dře.
Externí knihovny GUI tuto jeidnou výhodu dokáží srovnat i u jiných jazyků, ovšem s výhodami lepšího jazyka. V Pythonu jsem programoval GUI ve stejném IDE, které se skoro nelišilo od Delphi nad wxWidgets. Totéž mohu říci o C++.
Jednoduše škoda špatné syntaxe ObjectPascalu a evidentně rychlých a nedomyšlených nalepení objektů do Pascalu, protože to je drsná a neopravitelná vada. S lepší syntaxí by se ObjectPascal stal standardním kvetoucím jazykem.
Co se týká Delphi, borlandské kompilátory – včetně těch v Delphi – velmi špatně optimalizují, a jsou velice chybové. Před dávnou dobou jsem se prostě zařekl, že chci programovat v kompilátorech, kde nemusím dělat alfa testera překladače a ve strojovém kódu kontrolovat, zda to přeložil správně. Borlandské kompilátory byly jediné, kde občas chyba programu vedla nikoli na chybu zdrojového kódu, ale na chybu kompilátoru, který špatně přeložil zdrojový kód do binární podoby – a na to jsem časem přestal mít náladu. To může být IDE superprímové, ale toto opravdu nemusím.
Navíc kvůli špatné optimalizaci borlandských kompilátorů se zhusta vyplatilo pro exponovanější věci psát assemblerovské rutiny. To se v kvalitnějších kompilátorech vyplatí jen zřídka, protože jiné kompilátory optimalizují velice dobře. Jak je to za posledních několik let netuším, třeba přestali blbnout a dali to do pořádku.
—
Zkrátka, pokud chcete rychle naklikat jednoduchou GUI aplikaci a pak dopsat několik řádků obsluh GUI událostí, pak je to okouzlující. A tím kouzlo ObjectPascalu a Borlandu končí. Dál už je smetí, a je to škoda. Borland a ObjectPascal mohl být úžasný projekt. Ale defect by design už se v zásadě napravit nedá. A je toho moc, co dře.
Tedy nejde ani tak o ObjectPascal, ale o nezvládnutí řady věcí. Zatímco standardní Pascal z pera Niklause Wirtha byl navržen velice dobře na své účely, skoro cokoli přilepil do syntaxe Borland byl spíše nalepovák, než dobře domyšlený počin. K tomu nekvalitní a chybové borlanské kompilátory.
Přidejte si k tomu cenu, za kterou kopíte dnešní obdobu Delphi a umírání máte jako na dlani. A open source komunita kopii ObjectPascalu bude vyvíjet podle vzoru nástupce Borlandu – protože není standard – a jak na to začne komerční firma dlabat, bude to odnášet i open source kopie.
ObjectPascal umírá a umře. Kdyby ke mně přišel začátečník, ukážu mu obdobu Deplhi pro Python/C++/jiný jazyk včetně IDE – a nemá proč se vůbec trápit s nějakým Pascalem.
Miloslav Ponkrác
Trochu budu polemizovat; na technickém webu byste těžko hledal kategorie jako Osobní, kde je nemalá část obsahu. S Vámi je to trochu těžké, styl psaní máte ve stylu „kdo nemá stejný názor, tak mele nesmysle.“ :-).
Můžeme polemizovat, nezanikly mnohem obskurdnější jazyky, než Object Pascal. Tuším, že ke Go, či Rust, najdu jen těžko nějaký standard. A zejména o prvním bych si netroufl tvrdit, že je to „nalepovák“ (jazyk je velmi kompaktní, jen standard library je už velmi košatá).
Zkuste se zamyslet, nakolik by si tvůrce kompilátoru uškodil, kdyby zavedl nějaké chování a pak jej změnit. Udržel by vývojáře u svého překladače? Object Pascal, myslím, není úplně dílo Borlandu, ale Apple a ten byl mnohem silnější v definici toho, co se stane standardem.
Příměr s databázemi mi nepřipadá jako šťastný. Snad jen vývojáři PostgreSQL mají snahu se držet normy, vedle níž přidávají nějaká rozšíření.
Nebudu s Vámi polemizovat o situaci kolem jiných jazyků. Neřeším language-nazi spory, pokud mi nástroje, jazyk, dostupnos knihoven a možnosti distribuce výsledku vyhovují, tak dál neřeším. Nejsem zajatec jednoho jazyka, nicméně nesouhlasím s Vámi, že ObjectPascal v dohledné době zmizne.
S vámi je to těžké. Vy píšete stylem „kdo nemá stejný názor jako vy, mele nesmysle“ a „kdo nemá stjený záor jako vy, sněte dál“. 🙂 Neberte to osobně, není to tak myšleno. Věcné názory jsou věcné názory, nikoli osobní útoky.
Go a Rust jsou velice mladé jazyky a ještě jim ani neoschlo mléko na bradě. Polemizovat, zda přežijí, je trochu předčasné. Já myslím, že rozhodně nepřežijí časově ani to, co ten Object Pascal. Za 5 let na ně budeme koukat jako na umírající jazyky okrajového významu.
Ani já nejsem lang-nazi (je smutné, že nálepkujete – já jsem diskutoval věcně a bez nálepek). Hledím si vybírat jazyky prakticky a používám těch jazyků poměrně dost.
Řada databázových strojů má svůj písemný standard, já nepsal, že je to nutně SQL obecná norma, to jste si tam přimyslel vy.
Nicméně diskuse jde směrem nálepkování a obviňování z různých osobních úmyslů – a to není dobrý směr. Takže toto je můj poslední koment k tomuto.