AmigaE aneb programování nejen v krušných podmínkách

Jan Skypala

Nelíbí se vám assembler pro svou drsnost? Máte jen 1 MB paměti a nemůžete si dovolit náročné programovací jazyky? A nebo se vám nelíbí, jak dlouho trvá překlad v céčku, ale přesto chcete programovat? Pak je tu řešení, které se nazývá AmigaE.

Jazyk, který sice na jiných počítačích nenajdete (takže prográmky napsané na Amize nebudete moci snadno překompilovat pro pécéčko), neexistuje k němu žádná česky psaná učebnice, zato ale nabízí pohodu i při malé paměti a kompiluje rychlostí blesku. Pojďme sena něj podívat.

Historie
AmigaE je poměrně nový jazyk. Jeho vývoj začal v roce 1991 a tehdy v září začal produkovat první spustitelné prográmky. Pak ještě rok trvalo, než uměl volat funkce z knihoven, číst moduly a podobně a po několika měsících betatestování spatřil v lednu 1993 světlo světa - byl dán k dispozici všem, kdo měli zájem. To byla verze 2.1a, brzy se objevila varianta s odstraněnými některými chybami a koncovkou 2.16, která se stala na více jak rok hitem mezi programátorskými nadšenci. V červenci 1994 přišlo mnoho vylepšení s novou verzí 3.0a, přišla ale také cena (do té doby byl jazyk „freeware“, tj. zadarmo). Koncem roku 1994 přišla verze 3.1 a s debuggerem a poslední novinkou je z půlky loňského roku 3.2a s možností vytvářet amiga knihovny (ty, co jsou v adresáři LIBS:).
Jazyk byl nejdříve nazýván pouze E, avšak posléze se ukázalo, že již jazyk s takovým jménem existuje (jedná se o variantu jazyka C++ s přímou podporou pro práci s databázemi) a tak jej jeho autor přejmenoval na AmigaE. Ano, čtete správně, jeho autor. Tento jazyk byl vymyšlen a napsán jediným člověkem, holanďanem, který se jmenuje Wouter van Oortmerssen. Nový název je však pouze pro oficiálnost, na internetu se mu stále říká E a češi o něm mluví jako o „éčku“.

Struktura
Jazyk vychází převážně z nyní tak oblíbeného a rozšířeného jazyka C, v něčem se však vrací k Pascalu a na pár místech se inspiroval různými dialekty Basicu, Lispem a Adou. Program se skládá stejně jako v céčku z funkcí a ta hlavní se pochopitelně jmenuje main(). Pro funkce se ovšem používá pascalovské jméno procedura, vhodnější už vzhledem k tomu, že podle matematiků funkce dává výsledek v oblasti reálných čísel, avšak v programování tomu tak občas není. Ukažme si nejprve notoricky známý HelloWorld napsaný v éčku (program je nominován na nejnudnější program historii programování):

PROC main()
WriteF(Hello, world! )
ENDPROC

První, co člověka zarazí, je absence složených závorek nebo pascalovské konstrukce begin-end. Podle mně (a nejen mně) však znaky jako složené závorky činí zdrojový text sice kratším, avšak nečitelnějším (navíc vyslovit třeba „proc“ je snazší než „,levá složená závorka“) a ENDPROC mnohem snadněji napoví, k čemu patří, než takové pascalovské end. Jiné konstrukce (jako IF nebo WHILE) mají svá zakončení pochopitelně také kontextová (ENDIF resp. ENDWHILE).
Dále zaujme to, že za voláním funkce WriteF() není středník. On tam být může, ale naštěstí nemusí. Ukažte mi programátora, který nemá problémy se středníky v céčku nebo Pascalu a já mu budu gratulovat. V éčku je nutné středník umístit mezi dva příkazy pouze tehdy, když tyto leží na stejném řádku.
Éčkové WriteF() se od céčkového printf() liší tím, že není bufferované (tj. text se objeví na výstupu ihned, ne až systém uzná za vhodné). Funkce PrintF() je ale k dispozici také. Proč Wouter prohodil z céčka zažité funkce apostrofu a uvozovek nevím, asi jen pro legraci (ale občas to naštve, zvláště když jste dělali nějakou dobu pouze v jednom z těchto jazyků a zničehonic začnete v tom druhém - chyby jsou spíš pravidlem, než výjimkou).
Co ale určitě potěší, je rychlost překladu (je to tak říkajíc hned) a délka výsledného prográmku. Ten má pouhých 676 bajtů (v céčku vás přijde takováto sranda na 5740 bajtů, osm a půl krát tolik).

Originální nápady
Pojďme se nyní podívat na některé další chytré nápady. Asi, jako nejskvělejší považuji odbourání céčkového ->. Tento dvojznak je umisťován mezi ukazatel na strukturu a jméno položky. Takže např. když „dostaneme od systému okno“, obdržíme adresu na systémem vytvořenou strukturu a šířku zjistíme pomocí window->width. Jinde v programu používáme nějakou strukturu přímo a na položky se odkazujeme pomocí tečky (třeba zásobník.vrchol). Musíme si ovšem pamatovat, co je struktura samotná a co jen ukazatel na ni. V éčku je celý problém jednodušší: používáme pouze tečku. Překladač sám rozpozná, oč se jedná a provede překlad správně. Takže i v prvním případě bychom psali window.width.
Při výpisu textu používáme v řetězci pro různé specialitky pouze obrácené lomítko - jak pro nové řádky, tak pro udání místa a typu proměnné. Takže céčkové

printf(„%s má %d let. “, jméno,věk)

se nám mění ve

WriteF(s má d let. , jméno,věk).

Zase méně pamatování si.
Často se stane, že chcete, aby vám funkce vrátila více hodnot. Například podle nějaké parametricky zadané rovnice chcete vrátit x-ovou a y-ovou pozici. Lze to obejít (např. přes ukazatele), v éčku ale existuje snadnější řešení. Stačí při vracení a přebírání hodnot oddělit proměnné čárkami a je to. Takže tedy x.y:=křivka(parametr).

Systém výjimek
V nejnovějších překladačích C++ se objevuje systém výjimek. Na Amize je to pouze v GNU C++ verze 2.7.2 (to je úplně nejnovější), žádné jiné amigácke céčko je neumí. Éčko je však nabízí již od počátku. Vysvětleme si, co to systém výjimek je. Výjimkou nazýváme vznik problému v určité části programu. Například když chceme otevřít okno a ono se to nepovede. Nejběžnějším řešením je použití podmínek, což by v éčku vypadalo takto:

IF win:=OpenWindowTagList( NILL, NILL )
....
další kód
...
ENDIF

Nevýhodou je jednak vzrůstající délka programu, ale i to, že podobných akcí děláme zpravidla více - např. otevřeme ze pět knihoven, zamkneme obrazovku, otevřeme na ní okno, v něm vytvoříme pět až dvacet tlačítek... Brzy bychom se dostali se zápisem programu hodně „doprava“ a začalo by to být více a více nepřehledné. S použitím výjimek uděláme pouze:

IF win:=OpenWindowTagList( NILL, NILL ) = NILL THEN Raise(„NWlN“)

Takže při neúspěchu otevření okna je vyvolána obsluha výjimek se zprávou „NWIN“. Tam vše uzavřeme a program poslušně ukončíme. Toto je jen náčrt využití výjimek, jedná se však o velice silný nástroj. Éčko navíc nabízí možnost předdefinování výjimek. Např. že má být vyvolána výjimka kdykoliv, když se nepodaří otevřít nějakou knihovnu. Pak už jen otevíráme knihovny, jednu za druhou a nepíšeme ani to IF-THEN-Raise().

Objektové programování
Od verze 3.0 éčko tak nabízí možnost stále modernějšího objektového programování. Éčko nám umožňuje definovat struktury a funkce nad nimi, dědit objekty (takže nad jinou strukturou můžeme volat funkce pro objekt zděděný). Dále nám může zakázat některé položky struktury vidět zvenčí (říká se tomu, že je udělá soukromí - PRIVATE). K čemu je to dobré? Například u okna si systém musí pamatovat nejen velikost a jiné podobné vlastnosti, ale i na které obrazovce okno leží. Ale ta by neměla programátora vůbec zajímat, nedejbože aby ji měnil, takže jejím znepřístupněním vytváříme bezpečnější výsledek. Privátní mohou být pochopitelně i metody.
Éčko nám dále nabízí funkce, které se volají při vytváření nebo zániku objektu a přímé volání metod otcovských objektů. V řeči objektových programátorů nám éčko nabízí dědičnost, polymorfismus, zapouzdření, konstruktory, destruktory a přímý přístup na super-metody. A abych nezapomněl: naštěstí éčko neumožňuje statická metody, všechny metody jsou virtuální.

Nevýhody
Éčko nemá jen výhody. Je tu několik nevýhod, které zkušené programátory odrazují. Asi za nejzávažnější lze považovat neexistenci priorit. To znamená, že všechny výrazy se vyhodnocují odleva. Takže 2+3*4 je v tomto jazyce 20. Pochopitelně si lze zvyknout, dá to ale kus práce.
Další nevýhodou je práce s reálnými čísly. Není nijak nedokonalá, ale v programu se to hemží vykřičníky, což na přehlednosti nepřidá.
A ještě je tu netypovost. Jediným typem je LONG. Lze diskutovat, zda se jedná o nevýhodu, mnoho programovacích jazyků dnes i při požadavku na BYTE nebo WURD použije 4 bajty aniž by o tom uživatel věděl, umožňuje však stále využít typy proměnných při vytváření funkcí se stejnými jmény a různými parametry. V éčku lze ovšem samozřejmě pracovat bez problémů s bajty a wordy v polích a strukturách.

Co je součástí AmigaE?
S éčkem je i debugger, který je zvláště od poslední verze výkonný a příjemný. Dále u éčka najdeme mnoho již, připravených modulů pro práci s uživatelským prostředím. 3D grafikou a plno dalších, stačí je jen přidat k vlastním výtvorům. Je zde i plno krátkých prográmků, které mohou sloužit jako příklady pro začínající. Dokumentace je bohužel anglicky, ale ti, kdo anglicky umí, ji ocení. Je zde jak kompletní velice dobrá referenční příručka, tak i vynikající návod pro začátečníky.
Éčko má i pro vážné zájemce lákavou nabídku - cenu. Ta je přibližně 1000,- Kč, což je v porovnání s konkurencí směšná částka. Navíc tato částka je jednorázová, jak je ve světě shareware zvykem. Pokud máte přístup k internetu, upgrady jsou zdarma. A to, že je éčko výkonný jazyk vhodný pro jakkoliv použití ukazuje i softwarový trh, vždyť jsou v něm napsány dva velice známé programy: Iconian a Photogenics.

Závěrem
Tento článek nemohl plně ukázat, jaký celkově programovací jazyk AmigaE je. Bylo to spíš jen letmé nahlédnutí pod pokličku. Všem, kdo mají chuť, doporučuji vyzkoušet si demo verzi, která je zdarma (produkuje ale pouze programy max. 8 kB dlouhé ). Navíc se bude dat jako učebnice použít připravovaný seriál pro AMIGA Review o programování na Amize. Zdrojáky, které budou seriál doprovázet, budou v assembleru, véčku i éčku, takže si každý bude moct vyzkoušet všechno a rozhodnout se pro to, co mu bude vyhovovat nejlépe.

Objektově orientované programování
Nejprve řekněme pro začátečníky, oč se vlastně jedná. Tento pohled na programování nevychází z matematiky, ale z obyčejného pohledu na svět. Objektem nazýváme nějaký předmět a činnosti, které s ním můžeme dělat. Tak například předmětem může být zámek a jednou z činností zamykání. Toto spojení nám ovšem dává pouze popis zámku, ne nějaký konkrétní zámek. U toho pak známe samozřejmě i velikost, barvu, tvar atd. To je nám ale jedno, chceme-li zamknout. Máme-li tedy konkrétní zámek (nazývejme ho třeba první zámek), provedeme pouze první zámek-zamknout. Objekty nám také umožňují tzv. dědění. Ze zámku např. zdědí dveře, a zadáme-li později první dveře zamknout, systém už bude sám vědět, že má vlastně provést první zámek-zamknout. Z dveří může dále zdědit třeba místnost atd.
Objektově lze programovat v jakémkoliv jazyce. Nemusí to být C++, stačí obyčejné C, nemusí to být AmigaE 3.0, lze použít i verze starší, lze to dokonce i v assembleru. Nejedná se totiž o to, že by jazyk uměl něco specifického. Jedná se pouze o přístup k programování. Mluvíme-li pak o jazyku jako o objektově orientovaném, jedná se pouze o to, že obsahuje nástroje, které tento druh programování značně zjednodušují.
Místo předmětu používáme v jazyce nějakou strukturu (občas ji samotnou nazýváme chybně objektem nebo třídou, tou je však teprve až ve spojení s činnostmi). A činnosti jsou pochopitelně funkce (u objektů se jim říká metody), které nad danou strukturou provádíme.

AmigaE

Hodnocení: 8,0 z 10
Autor: Oortmersen
Cena: DM 60,-
Typ: shareware

+

rychlost kompilace, systémové nároky (RAM, HDD); zajímavé prog. prvky; předkompilované lavičky

-

nepřítomnost přehrávací rutiny; neohrabaná práce s floaty; neexistence priorit operací


Pozn.: články boli naskenované ako text a preto obsahujú aj zopár chýb. Taktiež neručíme za zdrojové kódy (Asm, C, Arexx, AmigaGuide, Html) a odkazy na web. Dúfame, že napriek tomu vám táto databáza dobre poslúži.

Žiadna časť nesmie byť reprodukovaná alebo inak šírená bez písomného povolenia vydavatela © ATLANTIDA Publishing