Hlavní navigace

Volně šiřitelné implementace programovacího jazyka Logo

3. 7. 2007
Doba čtení: 12 minut

Sdílet

Dnes si popíšeme jednotlivé implementace Loga. Ty se liší zejména komfortem vývojového prostředí, možností práce s více želvami, multimediálními schopnostmi, podporou událostního programování, podporou OOP aj. Dlužno poznamenat, že i volně šiřitelné alternativy jsou velmi dobře použitelné.

Obsah

1. Implementace programovacího jazyka Logo
2. Volně šiřitelné implementace programovacího jazyka Logo
3. Berkeley Logo (UCB Logo)
4. aUCBLogo
5. Microsoft Windows Logo (MSW Logo)
6. Turtle Tracks
7. Odkazy na další informační zdroje
8. Obsah následující části tohoto seriálu

1. Implementace programovacího jazyka Logo

Programovací jazyk Logo zcela jistě nepatří k hromadně nasazovaným programovacím jazykům – v této oblasti jsou dnes používány především kompilované jazyky typu C, C++, Java, C# a pro mnoho projektů také dynamicky typované jazyky, jakými jsou například Python, Perl, Tcl apod. Ostatně Logo nikdy nebylo tvořeno s předpokladem jeho použití jakožto majoritního programovacího jazyka používaného v „business“ aplikacích. Naopak, Logo je vhodné pro podporu konstruktivního myšlení (viz předchozí část tohoto seriálu), výuku programování a v mnoha případech se jedná o první programovací jazyk, se kterými se děti ve škole nebo jiné instituci (kluby) setkají při řešení praktických úkolů. Proto bylo při tvorbě tohoto jazyka dbáno na interaktivitu – jde o interpretovaný jazyk, který není zapotřebí kompilovat (ani by to nebylo možné).

Vzhledem k velké popularitě Loga, především ve školství, a také díky poměrně jednoduché interní struktuře celého jazyka, vzniklo mnoho jeho implementací. Některé z těchto implementací patří mezi komerční produkty, další jsou naopak nekomerční, šířené pod různými licencemi (freeware, různé typy open source včetně GPL apod.). V dalších kapitolách si některé známé i méně znáné implementace popíšeme. Jazyk Logo se stal proslulý především díky použití takzvané želví grafiky (turtle graphics). Ta byla později v různých podobách implementována i v dalších aplikacích (například KTurtle), programovacích jazycích či jejich knihovnách (Python, Turbo Pascal). I na tuto oblast se v navazující části tohoto seriálu zaměříme.

2. Volně šiřitelné implementace programovacího jazyka Logo

Volně šiřitelných variant jazyka Logo existuje poměrně velké množství. Jedná se jak o aplikace určené konkrétně pro nějaký operační systém či toolkit grafického uživatelského rozhraní (Logo pro Qt, Logo pro GTK…), tak i o aplikace, které je možné přeložit a spustit na více platformách. Multiplatformní implementace jsou většinou založeny na programovacím jazyku Java a JVM (Java Virtual Machine), některé také na architektuře .NET. V následujících kapitolách si představíme pravděpodobně nejvíce rozšířené open-source implementace Loga – Berkeley Logo (UCB Logo), aUCBLogo, Microsoft Windows Logo (MSW Logo) a jednu ze starších ale povedených implementací Loga realizovanou v programovacím jazyce Java známou pod názvem Turtle Tracks.

3. Berkeley Logo (UCB Logo)

Berkeley Logo, které je také známé pod označením UCB Logo, pravděpodobně patří k nejvíce aktivním projektům nekomerční implementace Loga, což se projevuje na kvalitní dokumentaci (tu zpracoval Brian Harvey, stejně jako velkou část samotného Berkeley Loga), množstvím podporovaných platforem a v neposlední řadě také dostupností této varianty Loga v repozitářích mnoha distribucí Linuxu, což značným způsobem zjednodušuje jeho instalaci a přibližuje tak Logo i běžným uživatelům (například mnoho uživatelů Linuxu má Logo nainstalováno, aniž by o tom věděli). Berkeley Logo je dostupné pro operační systém DOS, Microsoft Windows, Unixy i Linux (bez grafického okna i s podporou grafiky), počítače Macintosh atd. V dalším textu se zaměřím především na Berkeley Logo dostupné pro Linux s podporou grafiky a Microsoft Windows, protože se jedná o platformy, na nichž bude tato implementace Loga s největší pravděpodobností provozována (pokud je někdo ze čtenářů šťastným majitelem jablíčkového počítače, nechť se o svoje zkušenosti s Logem podělí v diskusi pod článkem).

Berkeley Logo je naprogramováno v programovacím jazyku C a – vzhledem k tomu, že je šířené pod známou a rozšířenou GNU licencí – jsou jeho zdrojové kódy volně dostupné. Většina zdrojových souborů je společná pro všechny platformy, některé soubory jsou však určeny pro systémově závislé činnosti (například jde o soubory xgraphics.c, ibmterm.c, macterm.c, ztcterm.c apod.). Mezi činnosti závislé na použité platformě patří podpora grafického uživatelského rozhraní (GUI), práce s adresáři a se soubory a volání externího textového editoru. Celé vývojové prostředí má na dnešní poměry malé systémové požadavky; pro samotný běh postačuje cca 4 MB RAM, což je podstatný rozdíl například od dále popisovaného Turtle Tracks napsaného v Javě. Výuka s využitím Berkeley Loga tedy může probíhat i na starších počítačích (plně dostačující může být například konfigurace Pentium 200 MHZ+32 MB RAM+Linux s X-window popř. Microsoft Windows 95/98, nebo nějaká forma bezdiskové terminálové stanice).

Grafické uživatelské rozhraní Berkeley Loga je závislé na systému, ve kterém je spuštěno. Na některých platformách se jedná o jednookenní aplikaci (typickým příkladem je port pro DOS a Microsoft Windows), v dalších systémech je odděleno grafické okno s želví grafikou od textového okna, do nějž se v interaktivním režimu zadávají příkazy (implementace pro X-window, kdy je textová obrazovka nahrazena konzolí/termi­nálem). V případě jednookenní aplikace je možné pro přepínaní mezi textovým a grafickým oknem používat příkazy TEXTSCREEN (TS), SPLITSCREEN (SS) a FULLSCREEN (FS), což je ukázáno na dalších dvou screenshotech.

logo0201
Obrázek 1: Berkeley Logo v režimu textové obrazovky (TEXTSCREEN (TS))

logo0202
Obrázek 2: Berkeley Logo v režimu rozdělené obrazovky (SPLITSCREEN (SS))

Kromě interního řádkového textového editoru (v tomto případě je však vhodnější mluvit o příkazovém řádku) je možné pro editace delších příkazů či nových procedur zavolat externí textový editor příkazem EDIT, který se nastavuje buď systémovou (shellovou) proměnnou EDITOR, nebo přímo z běžícího Berkeley Loga příkazem SETEDITOR, za nímž se uvede řetězec s názvem spouštěcího souboru oblíbeného editoru, například:

; GUI verze editoru VIM
seteditor "gvim

; editor dostupný z KDE
seteditor "kate

; poznámkový blok z Microsoft Windows
seteditor "notepad

; na závěr něco pro opravdové labužníky
seteditor "c:/progra~1/micros~2/office/winword.exe

Na operačním systému Microsoft Windows se volání externího editoru provádí céčkovou funkcí spawnlp(). To má za následek poněkud podivné chování celé aplikace – dokud není externí textový editor ukončen, nepřijímá proces Berkeley Loga žádné zprávy od systému a tím pádem ani jeho textové či grafické okno není překreslováno, nezískává fokus, nelze ho uzavřít, atd. Na toto chování se sice dá zvyknout, není však obvyklé. Na Linuxu a dalších systémech typu Unix je Berkeley Logo známé také pod názvem ucblogo či xlogo podle příkazu, kterým se spouští.

Specialitou Berkeley Loga jsou makra, pomocí nichž je možné například vytvářet nové řídicí struktury. Makra jsou vytvářena pomocí příkazů .MACRO a .DEFMACRO. Použití maker i způsob jejich zápisu se do značné míry podobá použití procedur, ovšem s tím rozdílem, že makro vrací seznam příkazů Loga. To znamená, že makro na základě svých parametrů provede vytvoření seznamu příkazů a tento seznam je posléze interpreterem proveden. Tento způsob práce s makry leží někde v polovině cesty mezi primitivními céčkovými makry (zde se jedná o příkazy pro preprocesor bez vazby na vlastní sémantiku) a makry použitými v Lispu (zde jsou makra speciálními formami, v Logu nikoli, tím je prakticky pouze příkaz TO).

4. aUCBLogo

aUCBLogo vzniklo, jak již ostatně název této implementace napovídá, rozšířením výše uvedeného UCB Loga. Už na první pohled je patrný rozdíl v grafickém uživatelském rozhraní. To však zdaleka není vše. aUCBLogo je vybaveno interním editorem, který dokáže barevně zvýrazňovat různé syntaktické kategorie jazyka, používat folding (opět založený na syntaxi) atd. Interpreter dokáže pracovat s želvou, která se pohybuje v trojrozměrném prostoru, a je tedy možné vytvářet skutečné trojrozměrné obrazce. Velmi zajímavá je funkce zobrazení obsahu paměti virtuálního stroje Loga – pro každý blok je možné zobrazit, jaké informace obsahuje, přičemž jsou v reálném čase „animovány“ změny obsahu paměti. Pro zkoumání interních vlastností interpreteru a garbage collectoru je to nedocenitelná pomůcka.

logo0203
Obrázek 3: aUCB Logo v režimu split screen

Jedinou vážnější nevýhodou této varianty Loga je nestabilita na některých počítačích. Pravděpodobně to je způsobeno nějakou funkcí pracující s grafikou, protože se na dvou ze třech testovacích počítačů po určité době některá okna přestala korektně překreslovat a místo obrázků (třeba v editoru) se zobrazovaly náhodně vybarvené pixely. Na stránkách o aUCBLogu (http://www.phy­sik.uni-augsburg.de/~miche­ler/) je dostupná i verze bez podpory OpenGL, která může některé problémy se zobrazováním vyřešit.

logo0204
Obrázek 4: Trojrozměrný objekt vytvořený v aUCBLogu

logo0205
Obrázek 5: Další trojrozměrný objekt vytvořený v aUCBLogu

logo0206
Obrázek 6: Textový editor integrovaný v aUCBLogu

logo0207
Obrázek 7: Složitější motiv vytvořený v aUCBLogu

logo0208
Obrázek 8: Vizualizace paměti virtuálního stroje interpreteru Loga

5. Microsoft Windows Logo (MSW Logo)

Microsoft Windows Logo nás mate svým názvem, protože se nejedná o program vytvořený Microsoftem, ale firmou Softtronics. Tato implementace Loga se vyznačuje především podporou více nezávislých želv, možností vytvářet a zobrazovat bitmapové obrázky želv (místo vektorového trojúhelníčku), podporou multimedií odvozenou od API operačního systému Microsoft Windows, podporou 3D modelování a také knihovnou pro komunikaci aplikací pomocí TCP/IP. Kromě toho je možné jednoduchým způsobem vytvářet animované GIFy, což si ukážeme v některé další části tohoto seriálu (animovaný obrázek uvedený v první části byl vytvořen právě v MSW Logu).

Z jazykového hlediska je zajímavé, že je podporována tail recursion, což mj. znamená, že iterace (opakování) implementované pomocí rekurze může být v této variantě Loga rychlostně i paměťově srovnatelná s programovými smyčkami. Mezi další programovací jazyky, které tail recursion podporují, patří například Scheme či některé implementace LISPu.

logo0209
Obrázek 9: Trojrozměrný objekt vytvořený v MSW Logu

logo0210
Obrázek 10: Složitější trojrozměrný objekt

logo0211
Obrázek 11: Fullscreen režim v MSW Logu

logo0212
Obrázek 12: Příkazové okno MSW Loga

logo0213
Obrázek 13: Okno se zobrazením stavu MSW Loga

6. Turtle Tracks

Implementaci jazyka Logo pojmenovanou Turtle Tracks vytvořil Daniel Azuma v programovacím jazyku Java. Použití Javy s sebou přináší několik výhod, zejména nezávislost na konkrétní platformě. Turtle Tracks je možné spouštět buď jako plnohodnotnou desktopovou aplikaci, která má přístup na disk apod., nebo jako applet přímo z okna webového prohlížeče; v tomto případě však dochází k některým bezpečnostním omezením funkčnosti (nelze například pracovat se soubory). Turtle Tracks je určen pro Javu minimálně verze 1.1, proto by jeho spuštění nemělo být problematické ani na „alternativních“ JVM. Grafické uživatelské rozhraní, které je velmi jednoduché a přitom použitelné, je postaveno nad knihovnou AWT. Nevýhodou jsou poněkud vyšší nároky na paměť (hned po spuštění si aplikace naalokuje přes 12 MB operační paměti, záleží ovšem na použitém JVM) a pomalejší běh interpreteru i samotného vykreslování, což se projeví zejména při tvorbě složitějších obrazců.

Turtle Tracks podporuje želví grafiku, ale pouze s jednou želvou, podobně jako Berkeley Logo a mnoho dalších volně šiřitelných implementací Loga. Dále jsou, samozřejmě kromě základních procedur typu REPEAT, zabudovány procedury pro práci se soubory a adresáři (CD, CDUP, LOAD, OPENREAD, OPENWRITE, OPENUPDATE, PWD a SAVE), procedury pro komunikaci po síti Internet (LOADURL, OPENSOCKET, OPENURL a SERVERSOCKET) a procedury pro podporu multithreadingu a synchronizace jednotlivých vláken (BARRIER, THREAD, THREADRUN, STOPTHREAD, CRITICAL apod.).

Tato implementace Loga je šířena pod GNU licencí verze 2, takže není problém s jejím dalším šířením, používáním či rozšiřováním. Sám autor předpokládá možnost zabudování Turtle Tracks do větších aplikací (například ve formě skriptovacího jazyka), změnu grafického uživatelského rozhraní (záměna AWT za Swing či SWT), přidání dalších primitiv (to je poměrně jednoduché, postačuje přidat správně napsanou Javovskou třídu do podadresáře lib), podpory multimedií apod. V současnosti je Turtle Tracks zmražen ve stabilní verzi 1.0 a není již není dále vyvíjen. To by nebyl až takový problém (Java je zpětně kompatibilní a Turtle Tracks běží i na verzi 1.6), nejzávažnějším kazem na kráse této implementace Loga je však nedostatečná dokumentace. Většina příkazů je sice stejná, jako v Berkeley Logu (UCB Logu), avšak některé odlišnosti samozřejmě existují.

Grafické uživatelské rozhraní Turtle Tracks je založeno na trojici nezávislých oken, které se chovají podobně u každé běžné SDI (Single Document Interface) aplikace, tj. okna jsou do značné míry na sobě nezávislá a neleží v žádném nadřazeném okně. První okno, jež je nazvané Turtle Tracks Console, je zobrazeno ihned po startu aplikace či appletu a obsahuje poměrně chudé hlavní menu, uprostřed textovou oblast, ve které se zobrazuje historie příkazů, chybové hlášení interpreteru a textové výstupy z aplikace (například po zadání příkazu PRINT). V dolní části okna se nachází další textová oblast, do které se mohou po získání fokusu, tj. po kliknutí myší na tuto oblast, zadávat nové příkazy, které se ihned v interaktivním režimu provedou.

logo0214
Obrázek 14: První (hlavní) okno prostředí Turtle Tracks

Druhé okno s názvem Logo Graphics, jež se zobrazí po zadání příkazu DRAW a kdykoliv se může opět skrýt po zadání příkazu NODRAW, slouží pro vyobrazení grafické plochy, po které se pohybuje želva. Implicitní velikost tohoto okna je 400×400 pixelů, přičemž každý pixel odpovídá jednotkovému kroku želvy. To je poněkud nezvyklé, běžně je totiž měřítko mezi pixely a krokem želvy nastaveno tak, že celá grafická plocha (ať už v okně či na celé obrazovce) odpovídá 200×200 krokům želvy. Na příkaz DRAW je dobré nezapomínat, protože v Turtle Tracks se okno s plochou pro želvu nezobrazuje automaticky – v mnoha jiných implementacích Loga se totiž grafická část zobrazí ihned po zadání některého příkazu, který souvisí se želvou, například postačuje zadat příkaz HOME.

logo0215
Obrázek 15: Okno s plochou, po níž se pohybuje želva

Třetím oknem je textový editor (Turtle Tracks Editor), do kterého je možné zapisovat složitější příkazy, vytvářet nové procedury (slova) atd. Editor se spouští z hlavního menu aplikace buď výběrem nového dokumentu, otevřením existujícího zdrojového souboru nebo zadáním příkazu EDIT "název procedury. Nové procedury či zapsané příkazy je možné ihned otestovat buď vyvoláním položky menu Execute without closing přímo z okna editoru, nebo použitím klávesové zkratky Ctrl+E. Samotné ovládání textového editoru je velmi jednoduché, editor podporuje základní příkazy pro pohyb kurzoru, práci se schránkou, mazání znaků atd. (nečekejte však žádná makra, regulární výrazy a další pokročilejší příkazy, v podstatě se totiž jedná o normální textové políčko z AWT). Oken textových editorů je možné mít v rámci jedné aplikace Turtle Tracks otevřeno více, což se hodí například při vytváření složitějších programů. Přípravu delších zdrojových kódů je samozřejmě možné provádět v libovolném textovém editoru a poté zdrojový soubor otevřít v editoru Turtle Tracks nebo text přenést přes schránku (ideální při zadávání příkladů přes web).

logo0216
Obrázek 16: Textový editor zabudovaný do aplikace Turtle Tracks

logo0217
Obrázek 17: Motiv vytvořený v Turtle Tracks

CS24_early

7. Odkazy na další informační zdroje

  1. Domácí stránka Turtle Tracks:
    http://turtle­tracks.source­forge.net/
  2. Applet Turtle Tracks (možnost spuštění v prohlížeči bez nutnosti instalace):
    http://turtle­tracks.source­forge.net/applet­.html
  3. Neúplná dokumentace k Turtle Tracks:
    http://turtle­tracks.source­forge.net/doc­s/index.html
  4. Domácí stránka Daniela Azumy (autora této implementace Loga):
    http://alumnus­.caltech.edu/~da­zuma/home/
  5. Informace o aUCBLogu:
    http://www.phy­sik.uni-augsburg.de/~miche­ler/
  6. Domácí stránka MSW Loga:
    http://www.sof­tronix.com/lo­go.html

8. Obsah následující části tohoto seriálu

V následují části tohoto seriálu si popíšeme některé komerční implementace programovacího jazyka Logo (i komerční aplikace jsou však mnohdy nabízeny zadarmo, většinou však bez zdrojových kódů). Zaměříme se především na ty implementace, které je možné použít na více platformách a operačních systémech, včetně Linuxu a Microsoft Windows.

Byl pro vás článek přínosný?

Autor článku

Vystudoval VUT FIT a v současné době pracuje na projektech vytvářených v jazycích Python a Go.