Squeak: návrat do budoucnosti (2)

16. 2. 2004
Doba čtení: 9 minut

Sdílet

V dnešním dílu si uděláme malou exkurzi do historie Smalltalku a popíšeme si vznik jeho v mnoha ohledech výjimečné implementace - Squeaku. Na závěr si konečně ukážeme jednoduchý prográmek.

Historie Smalltalku sahá do počátku sedmdesátých let. V té době se Learning Research Group (LRG) vedená Alanem Kayem zabývala velmi odvážnou myšlenkou malého levného osobního počítače s plochou obrazovkou ovládaného perem či přímo dotykem prstů, jenž měl být používán jako dynamická kniha. Zacházení s ním mělo být natolik jednoduché, že jej měly zvládnout bez problémů i děti. Tuto vizi nazvali Dynabook. LRG byla součástí slavného Palo Alto Research Center (PARC) firmy Xerox. Alan Kay již před příchodem ke Xeroxu pracoval v šedesátých letech na projektu Flex, což byl první pokus o osobní počítač založený na objektové orientaci vycházející z myšlenek programovacího jazyka Simula a grafického systému Sketchpad.

Dynabook se měla stát stejně revolučním krokem, jako tomu bylo při přechodu od ručně opisovaných knih ke knihtisku. Dotyková obrazovka, stereofonní zvukový výstup, připojení k telefonním linkám a možnosti dynamických simulací, animací a zobrazení trojrozměrných objektů měly co nabídnout prakticky každému – studentům, učitelům, lékařům, skladatelům, architektům, obchodníkům a dokonce i předškolním dětem.

V té době se samozřejmě možnosti počítačů daným požadavkům ani zdaleka neblížily. Nejinak tomu bylo i s jejich programovou výbavou. Pro plné využití možností Dynabook se sice od uživatele vyžadovaly jisté programátorské dovednosti, nicméně použití v té době dostupných jazyků zaměřených na numerické výpočty bylo nemyslitelné. Nejpřijatelněji se jevil jazyk Lisp a jemu podobné, ovšem ze hry jej vyřazovalo špatné zapouzdření dat a jen stěží by si kdo dokázal představit, jak s ním pracuje běžný uživatel.

Složitost programů psaných procedurálními jazyky s délkou kódu velmi rychle roste. Kayův koncept osobního počítače vycházel z jeho snadné rozšiřovatelnosti běžnými uživateli, což u procedurálních jazyků nepřicházelo v úvahu. Kay dokázal mimo jiné využít poznatků prostředí Logo vytvořeného pro výuku programování u dětí a rozhodl se pro vícevrstvou blokovou architekturu založenou na zapouzdření a dědičnosti. Tak se začalo pomalu rodit prostředí Smalltalku.

Jméno Smalltalk bylo zvoleno ze dvou důvodů. Programování mělo být v první řadě záležitostí co nejvíce se podobající nenáročné konverzaci s počítačem. Druhým důvodem pro volbu tohoto jména byl alibismus. Jeho autoři se nechtěli držet tehdejší módy, kdy systémy byly nazývány Zeus, Odin, Thor apod., a přitom prakticky nic neuměly. Pojmenování Smalltalk se jevilo natolik neškodné, že pokud by skutečně něco hezkého a užitečného udělal, mohlo to ostatní jen příjemně potěšit.

První návrh jazyka, dnes nazvaného Smalltalk-71, se jeho dnešní verzi moc nepodobal a rozhodně nezapře své kořeny. Například výpočet faktoriálu v něm vypadal takto:

to 'factorial' 0 is 1
to 'factorial' :n do 'n*factorial n-1'

První smalltalkovský systém byl vytvořen v říjnu roku 1972. Byl napsán v Basicu, měl přibližně tisíc řádků a dokázal vypočítat příklad 3 + 4 (škoda, že nezkoušeli vynásobit šest devíti). Jeho rychlost byla neuvěřitelná. Asi lze vytušit, že ne zrovna v kladném slova smyslu. Implementace v assembleru následovala po dvou měsících a dnes je známá pod označením Smalltalk-72.

V roce 1974 byl Smalltalk portován na počítač Alto vyvíjený v rámci PARC (128–256 kB RAM) a s jeho pomocí bylo prováděno mnoho experimentů s grafickým uživatelským rozhraním. Ty zahrnovaly želví grafiku, editor ovládaný pomocí myši, strukturovaný grafický editor, animace, hudební systém apod.

Vylepšená verze, Smalltalk-74, byla použita k implementaci grafického uživatelského rozhraní založeného na překrývajících se oknech a vysouvajících se menu. Smalltalk-76 přišel s koncepčně čistším návrhem obsahujícím pro portovatelnost důležitý přechod na bytekód. Jazyk byl dále rozšířen o dědičnost.

Koncem sedmdesátých let Apple startoval projekt Lisa a Stevu Jobsovi bylo doporučeno, aby se po PARC porozhlédl. Dovolil tedy Xeroxu investovat milion dolarů do akcií Applu a na oplátku podnikl v závěru roku 1979 několik věhlasných návštěv v PARC. Zde mu mimo jiné (laserová tiskárna, kancelářská síť) byl demonstrován Smalltalk s jeho grafickým uživatelským rozhraním ovládaným třítlačítkovou počítačovou myší na počítači Dorado. Jedním z nejzajímavějších momentů prý bylo, když Jobs řekl, že se mu nelíbí trhaný styl rolování obsahu oken, a zeptal se, zda to jde udělat plynule. Během méně než jedné minuty Dan Ingalls, jeden z otců Smalltalku, vyhledal patřičné metody a udělal v nich několik poměrně zásadních změn, díky nimž bylo nyní rolování plynulé. To návštěvníky, především přítomné programátory, naprosto šokovalo.

V roce 1979 Xerox konečně souhlasil s publikováním Smalltalku. Nejdříve byla v roce 1981 v časopise Byte zveřejněna série uvádějících článků (na obálce byl vyobrazen stoupající balón, který se okamžitě stal logem Smalltalku). Tu následovalo několik knih popisujících postupně jazyk, jeho implementaci a uživatelské rozhraní. Smalltalk-80 byl ve své portabilní implementaci oficiálně uveden v roce 1983.

Licenční program Xeroxu dovoloval licencovat Smalltalk pouze omezenému počtu vývojářů a velkým společnostem. Z několika raných implementací Smalltalku pro počítače IBM přežila pouze jediná, Smalltalk/V spo­lečnosti Digitalk. Samotnému Xeroxu se náklady na vývoj nikdy nevrátily a nakonec se v roce 1987 rozhodl Smalltalk separovat pod křídla společnosti ParcPlace Systems. Tato společnost zaměstnala některé původní vývojáře a v roce 1990 představila systém OjectWorks později přejmenovaný na VisualWorks. Tato implementace využívá nativní správce oken hostitelských operačních systémů, což se samozřejmě neobešlo bez zásadních změn v architektuře.

Mezi další implementace Smalltalku patří VisualAge for Smalltalk společnosti IBM (od VisualWorks se příliš neliší), Dolphin Smalltalk, PocketSmalltalk, GNU Smalltalk, Gemstone Smalltalk (objektová databáze) apod.

Přestože je jim to obecně přisuzováno, lidé z PARC nevynalezli počítačovou myš (ta je dílem D. Engelbarta a dalších v Augmentation Research Center) ani grafické uživatelské rozhraní (viz již zmiňovaný Sketchpad, Grail a další). Přesto jsou jejich zásluhy neoddiskutovatelné a myšlenky, které dokázali realizovat již v sedmdesátých letech, ještě dnes budí obdiv.

Rovněž se všeobecně přeceňuje míra, s jakou čerpala společnost Apple nápady z PARC. Apple přišel s celou řadou zásadních vylepšení. Nicméně pravdou také je, že část členů LRG přešla k Applu a nemalou měrou se podílela na vývoji Lisy a MacIntoshe.

Squeak

Historie Squeaku začíná v prosinci 1995. Vzešel z potřeby vyvinout otevřené portovatelné tvárné prakticky použitelné objektově orientované programovací prostředí s malým jednoduchým jádrem a jednotnou architekturou, která by obstála v nově nastupujícím prostředí Internetu a kapesních počítačů, kde je nutná nezávislost na operačním systému a hardwaru. Mělo být rovněž natolik jednoduché, aby šlo použít pro výuku a bylo přístupné i neodborníkům a dětem. Java v té době tyto požadavky rozhodně nesplňovala. Na otázku, zda je tomu tak dnes, nechť si každý odpoví sám.

Bylo čím dál jasnější, že dozrál čas pro novou implementaci Smalltalku, která by se s těmito nároky dokázala vyrovnat. Naštěstí autoři Squeaku nemuseli začínat od nuly. K dispozici měli starou applovskou implementaci Smalltalku-80, která se skládala z objektové paměti (image) a separátního virtuálního stroje. Ten byl ovšem tvořen 120 stránkami takřka nekomentovaného assembleru, jenž prošel postupně rukama sedmi autorů (čest památce posledních šesti). O portovatelnosti nemohla být řeč.

Autoři Squeaku se rozhodli virtuální stroj z pochopitelných důvodů napsat v jazyce C. Mělo to ovšem jeden háček. Vývojový tým byl tvořen lidmi jako Dan Ingalls či Alan Kay a těm se setsakramentsky nechtělo pouštět do C. Přímo se děsili pomyšlení na dny strávené laděním céčkovských zdrojáků.

Zvolili proto naprosto odlišný postup. Rozhodli se, že napíší interpret přímo ve Smalltalku. Přesněji řečeno, vytvořili si podmnožinu Smalltalku, kterou tvořilo pouze 42 překladových pravidel. V ořezání Smalltalku došli tak daleko, že úplně vypustili dokonce i objekty. Lze to přibližně přirovnat k tomu, jako by interpret napsali v C++, ale použili k tomu pouze konstrukcí jazyka C. Paralelně k programování interpretu začali vytvářet překladač této podmnožiny Smalltalku přímo do jazyka C (samozřejmě jej napsali také ve Smalltalku).

Proč něco tak krkolomného? Protože se při programování interpretu mohli opřít o vývojové prostředí Smalltalku se všemi jeho ladícími možnostmi a pohodlím. Hardwarově závislé operace jako grafické výstupy pak simulovali v prostředí mateřského Smalltalku.

Šlo jim to skutečně od ruky. Po pěti týdnech již měli funkční interpret bytekódu fungující v rámci hostitelského applovského Smalltalku, o týden později již mohli na obrazovku napsat a nechat vypočítat starý známý příklad 3 + 4. V osmém týdnu dokázali zobrazovat okna v interpretu přeloženém do C a v desátém týdnu mohli upustit od konvertování image z applovské implementace. O šest týdnů později již Squeak dosáhl takového stupně rychlosti a použitelnosti, že v něm rozjeli simulátor interpretu a překladač podmnožiny Smalltalku do C. Tím se Squeak naprosto osamostatnil.

Do dnešních dnů byla podmnožina Smalltalku pro vývoj virtuálního stroje rozšířena o několik dalších překladových pravidel. Portování Squeaku vypadá tak, že si necháte vytvořit přímo ve Squeaku soubor interp.c, což je platformně nezávislý generovaný interpret bytekódů včetně správy objektové paměti, garbage collectoru apod. V současnosti má přibližně 22 tisíc řádků (díky tomu, že v něm funkce většinou nevrací žádnou hodnotu a přetypování není důsledně ošetřováno, vyštěkne na vás kompilátor asi tři tisíce varování, ale žádnou paniku). Tento interpret se spoléhá na to, že mu dodáte několik málo funkcí, z nichž část je obsažena ve standardní knihovně jazyka C. Jedná se o některé matematické funkce (sin, exp, sqrt…), identifikační typ pro soubor (typicky FILE), putchar, getchar, printf, strcmp, strlen a clock. Dále mu musíte poskytnout funkce pro čtení, zápis a pohyb v image (typicky pomocí open, close, seek), alokaci paměti (malloc), práci s obrazovkou (zjištění jejích parametrů, zobrazení bitové mapy), přísun událostí (myš, klávesnice), případně třeba funkce pro spolupráci se schránkou hostitelského operačního systému. Pak již jen stačí načíst do paměti image, spustit interpret a jste prakticky hotovi.

Další rozšiřující funkce, jako je například práce se zvukem nebo síťovým rozhraním, jsou řešeny pomocí pluginů. Ty mohou být a většinou kvůli kompaktnosti také jsou zabudovány přímo do virtuálního stroje.

Squeak je tedy implementace Smalltalku s virtuálním strojem napsaným ve Smalltalku. Není šířen pod GPL. Alan Kay a jeho spolupracovníci vycházeli při tvorbě licence z přirovnání k vědeckému výzkumu. Všeobecně platné poznatky jsou nepřivlastnitelné a patří celému lidstvu. Naproti tomu konkrétní práce na těchto poznatcích založené mohou být předmětem vlastnictví. Pokud ve Squeaku vytvoříte nějaký program, můžete jej libovolně licencovat a prodávat dalším subjektům, aniž byste museli zveřejňovat jeho zdrojové kódy. Nicméně pokud zasáhnete do existujících tříd a vazeb mezi nimi, upravíte virtuální stroj či jej portujete na novou platformu, musíte tyto úpravy zveřejnit.

Jedná se tedy o velmi liberální licenci umožňující komerční uzavřené nasazení, ovšem rovněž zajišťující sdílení a rozšiřování stávající implementace. Apple, z jehož Smalltalku Squeak vychází, si ponechal práva na bitmapové fonty, které jsou ve Squeaku obsaženy. Na ně jsou vztažena některá licenční omezení a jsou také hlavním důvodem, proč je celá licence psána na Apple. Díky tomu vypadá poměrně nestandardně a především u debianistů nevyvolává právě velké nadšení.

Smalltalk hraje v historii informačních technologií ještě jednu velmi významnou úlohu. Díky své otevřenosti se stal jedním z prvních systémů, na kterém se ukázaly všechny výhody a nevýhody otevřeného softwaru. O výhodách se jistě nikterak široce zmiňovat nemusím. Protože podívat se na libovolné zdrojové kódy jakékoliv části systému bylo otázkou několika kliknutí, byl Smalltalk často nehorázně kopírován. To vedlo k aplikaci silně restriktivních licenčních opatření a k jeho velmi vysoké ceně. Tento fakt spolu s hardwarovými nároky Smalltalku stál za jeho malým rozšířením, přestože se jedná o produkt, jenž je oproti podstatně mladší Javě či platformě .Net koncepčně o generaci napřed. Při vytváření Squeaku byl kladen velký důraz na jasně definovanou vazbu na původní PARCovský Smalltalk, aby nedocházelo k žádným dodatečným licenčním sporům, což applovská implementace naštěstí zaručovala.

Licenční a výkonnostní bariéry dnes padají, a pokud se Smalltalku podaří proniknout do všeobecného povědomí, jistě jej čeká budoucnost ještě zajímavější, než jaká byla jeho minulost.

Abych už konečně ukázal alespoň řádek smalltalkovského kódu, napíši vám squeakovskou verzi programu Hello world:

ict ve školství 24

Speaker woman say: 'hello world'.

Tento řádek neudělá nic jiného, než že váš počítač ženským hlasem pozdraví svět. Tak co, už se těšíte na další nezávaznou konverzaci se svým počítačem?

Odkazy

www.parc.com
www.squeak.org
www.comtalk.net