Internet Info, s.r.o. Lupa Měšec Podnikatel Root Zdroják DigiZone Slunečnice Vitalia TopDrive KupDnes Navrcholu NovýTarif Dobrý web Weblogy Woko Jagg Computer.cz SK: MojeLinky

Hlavní navigace

Squeak: návrat do budoucnosti (2)

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.

Tweetni to Twitter Jaggni to! Jagg Del.icio.us Delicious

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:

davame_internetu_obsah
       
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

Školení: Linux – Firemní server

Na třídenním školení se naučíte nainstalovat a spravovat kompletní linuxový server do Vaší firmy se všemi základními službami, které potřebujete pro provoz Vaší sítě, firemních emailů a webových stránek.

Podrobnější informace a přihláška

Ohodnoťte jako ve škole:
Průměrná známka 2,95

Přehled názorů

...nac delat veci jednoduse
deda.jabko 16. 2. 2004 01:03
Nový
zkusil
udiven 16. 2. 2004 04:10
Nový
Fajn clanek
Pavel Stehule 16. 2. 2004 07:46
Nový
zvlastni
nemo 16. 2. 2004 09:03
Nový
└ 
Re: zvlastni
Pavel Křivánek 16. 2. 2004 09:28
Nový
Proc Java?
Karel Zak 16. 2. 2004 09:45
Nový
├ 
Re: Proc Java?
Vít Profant 16. 2. 2004 10:24
Nový
├ 
Re: Proc Java?
zoul 16. 2. 2004 10:50
Nový
│
├ 
Re: Proc Java?
Peter Budai 16. 2. 2004 11:25
Nový
│
├ 
Re: Proc Java?
OldFrog 16. 2. 2004 11:34
Nový
│
│
└ 
Re: Proc Java?
Jerry 16. 2. 2004 11:52
Nový
│
│
 
└ 
Re: Proc Java?
Jan Vrany 18. 2. 2004 20:24
Nový
│
├ 
Re: Proc Java?
ondrej 16. 2. 2004 12:26
Nový
│
│
└ 
Re: Proc Java?
zoul 16. 2. 2004 12:57
Nový
│
│
 
├ 
Re: Proc Java?
OldFrog 16. 2. 2004 13:12
Nový
│
│
 
└ 
Re: Proc Java?
ondrej 16. 2. 2004 14:49
Nový
│
│
 
 
├ 
Re: Proc Java?
zoul 16. 2. 2004 16:48
Nový
│
│
 
 
│
├ 
Re: Proc Java?
ondrej 16. 2. 2004 18:06
Nový
│
│
 
 
│
│
└ 
Re: Proc Java?
Ucho 16. 2. 2004 20:51
Nový
│
│
 
 
│
│
 
├ 
Re: Proc Java?
ondrej 16. 2. 2004 21:17
Nový
│
│
 
 
│
│
 
└ 
Re: Proc Java?
Jenda 16. 2. 2004 21:28
Nový
│
│
 
 
│
└ 
Re: Proc Java?
Haskell rulezz 16. 2. 2004 20:54
Nový
│
│
 
 
└ 
Neco proti
me 16. 2. 2004 17:51
Nový
│
└ 
Re: Proc Java?
MeDon 17. 2. 2004 00:12
Nový
│
 
└ 
Re: Proc Java?
zoul 17. 2. 2004 09:13
Nový
│
 
 
├ 
Re: Proc Java?
MeDon 17. 2. 2004 10:17
Nový
│
 
 
├ 
Re: Proc Java?
Pavel Křivánek 17. 2. 2004 11:06
Nový
│
 
 
└ 
Re: Proc Java?
ondrej 17. 2. 2004 14:16
Nový
│
 
 
 
└ 
Re: Proc Java?
zoul 17. 2. 2004 14:54
Nový
│
 
 
 
 
└ 
Re: Proc Java?
ondrej 17. 2. 2004 23:51
Nový
├ 
Re: Proc Java?
martin 16. 2. 2004 11:24
Nový
└ 
Re: Proc Java?
podlesh 16. 2. 2004 14:25
Nový
themes
a.kubasek 16. 2. 2004 11:27
Nový
└ 
Re: themes
Pavel Křivánek 16. 2. 2004 11:50
Nový
Namety pro dalsi dily...
OldFrog 16. 2. 2004 11:50
Nový
pekne retro
Maude Lebowski 16. 2. 2004 11:59
Nový
└ 
Re: pekne retro
tdx 16. 2. 2004 13:05
Nový
tak nevim
nemo 16. 2. 2004 12:13
Nový
├ 
sorry
nemo 16. 2. 2004 12:14
Nový
├ 
Re: tak nevim
OldFrog 16. 2. 2004 12:24
Nový
└ 
Re: tak nevim
Pavel Křivánek 16. 2. 2004 16:13
Nový
 
└ 
Re: tak nevim
nemo 16. 2. 2004 18:09
Nový
Ono to fakt funguje :-)
Karlos 16. 2. 2004 12:32
Nový
šerednost
Sidd 16. 2. 2004 14:26
Nový
└ 
Re: šerednost
Llama 16. 2. 2004 16:27
Nový
 
├ 
Re: serednost
Jerry III 16. 2. 2004 21:59
Nový
 
│
└ 
Re: serednost
H. 17. 2. 2004 22:57
Nový
 
└ 
Re: šerednost
Radim 16. 2. 2004 22:12
Nový
squeak
sk1pp 16. 2. 2004 14:30
Nový
instalace :o(((
Jan Spurny 16. 2. 2004 15:24
Nový
└ 
Re: instalace :o(((
Pavel Křivánek 16. 2. 2004 16:04
Nový
A co Lisp?
Tux 16. 2. 2004 21:37
Nový
└ 
Re: A co Lisp?
Pavel Křivánek 16. 2. 2004 22:43
Nový
 
├ 
Re: A co Lisp?
Tux 17. 2. 2004 15:50
Nový
 
└ 
Re: A co Lisp?
Ladislav Thon 24. 2. 2004 00:46
Nový
       

Tento text je již více než dva měsíce starý. Chcete-li na něj reagovat v diskusi, pravděpodobně vám již nikdo neodpoví. Pro řešení aktuálních problémů doporučujeme využít naše diskusní fórum.

Zasílat nově přidané příspěvky e-mailem