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