Prvního října tomu bylo právě deset let, co Dan Ingalls oznámil světu existenci nové implementace Smalltalku pojmenovanou Squeak. Ta si rychle získala přízeň mnoha vývojářů, a to především díky liberální licenci a poměrně netradičnímu způsobu, jímž byl napsán virtuální stroj, který umožnil velice rychlé portování na celou řadu platforem. Protože Squeak nevznikl na zelené louce, ale přímo navazoval na implementace Smalltalku z počátku osmdesátých let, jednalo se již o okamžitě použitelné vývojové prostředí. Malou exkurzi do jeho historie si můžete přečíst například v jednom z našich starších článků.
Za těch dlouhých deset let Squeak prošel samozřejmě celou řadou zásadních změn a patřičně nabobtnal. Rovněž komunita kolem něj se v mnohém změnila. Od počátku byl Squeak vyvíjen jako multimediální Smalltalk, a tak byl velký důraz kladen na práci s 2D a 3D grafikou, hudbu a zvukem. Squeak sloužil jako platforma pro výzkum výuky programování pro děti a dá se říct, že v této oblasti naplnil původní záměry jeho autorů. Jeho strohé grafické uživatelské rozhraní MVC bylo nahrazeno prostředím Morphic, jehož celková architektura je k tomuto využití přímo stvořena. Hlavním výsledkem těchto snah je projekt eToys. Na to, jak se s ním pracuje, se můžete podívat například na SqueakLand.org. Dnes se využívá například na 80 tisících školních počítačích ve Španělsku a pokud vám španělština není úplně cizí, můžete si tuto upravenou verzi Squeaku stáhnout z swiki.agro.uba.ar. Ne náhodou by měl být Squeak součástí projektu OLPC, tedy známých stodolarových notebooků pro děti rozvojových zemí. Samotný Alan Kay, který se svým týmem v sedmdesátých letech vytvořil Smalltalk, je v tomto projektu silně zainteresován, což je pochopitelné, protože do značné míry naplňuje jeho vizi tzv. Dynabook, kterou zformoval koncem šedesátých let.
Tento vývoj měl ale pro Squeak dva nepříjemné důsledky. V době svého vzniku vypadal dost archaicky, což poté překryla značná dávka infantilnosti, a tak Squeak dodnes působí poněkud dětinsky. Donedávna tak vypadaly i jeho oficiální stránky a tak není divu, že bylo snadné tento projekt nebrat vážně.
Druhým nepříjemným důsledkem bylo kontinuální nabalování nových funkcí, stále větší provázanost různých i nepřímo souvisejících částí systému a přidávání experimentálních projektů. Dnešní Squeak proto tvoří hodně velká monolitická image (Smalltalk na rozdíl od většiny jazyků nepracuje se zdrojovými kódy, ale s obrazy objektové paměti). V poslední verzi je její velikost bezmála 16MB.
V dnešní době je téměř nemožné podchytit samotnou podstatu Squeaku. Už díky tomu, že se jedná o implementaci Smalltalku, je to zároveň programovací jazyk, kompletní vývojové prostředí, samostatný operační systém a zároveň i výsledná aplikace. Navíc má Squeak velice široký záběr. Prezentovat ho jako moderní progresivní vývojovou platformu a zároveň jako hračku pro děti není právě jednoduché, což se ukázalo například při předělávání stránek tohoto projektu.
Dá se ale říct, že v posledních letech se úloha Squeaku jako multimediální platformy postupně odsouvá do pozadí a hlavní iniciativu v této oblasti přebírá Kayův Croquet , což je kolaborativní prostředí, pod jehož trojrozměrným povrchem je ukryto mnoho zajímavých a revolučních myšlenek.
S tím, jak se jeho komunita rozšiřuje, stále více roste potřeba orientovat se na seriózní komerční aplikace. Uživatelské rozhraní Morphic sice umí kde co, ale pro tuto oblast bohužel jednoduše není vhodné. Projekty WxSqueak ani SqueakGtk zajišťující provázanost na nativní rozhraní hostitelského operačního systému zatím nedokázaly tuto mezeru zcela zaplnit. První jmenovaný se sice dostal do již v praxi použitelného a také používaného stavu, jeho vývoj ale v posledních měsících stagnuje a GtkPlugin není zatím schopen mu konkurovat.
Squeak tak dnes nachází uplatnění především v oblasti webových serverů, kde mu k prosazení pomáhá především framework Seaside, který si stačil vydobýt pověst pravděpodobně nejsofistikovanějšího webového frameworku vůbec. Avi Bryant jej sice začal vytvářet pro Ruby, ale kvůli technickým limitům (které byly později odstraněny) zkusil přejít na Squeak a k Ruby už se nevrátil. Seaside je nyní bezesporu hlavním motorem vývoje Smalltalku.
K narozeninám patří dárky a Squeak jich ke svému desátému výročí dostal hned několik.
Nová verze
V těchto dnech vychází nová verze Squeak 3.9. Po verzi 3.8, která přinesla komplexní obecnou podporu pro národní prostředí (obecnější než Unicode, viz www.is.titech.ac.jp/~ohshima/squeak/m17npaper/main.html), bylo hlavním úkolem verze 3.9 integrovat do Squeaku Traits, které elegantním způsobem nahrazují násobnou dědičnost. U metajazyka, jakým je Smalltalk, se špatně odlišují zásahy do jazyka, ale tato změna by se za modifikaci jazyka považovat dala. Rověž metody mají možnost používat pragmy (ty ale na rozdíl od VisualWorks nemají oporu v syntaxi).
Stlačení zdrojového souboru
Smalltalk používá pro práci se zdrojovými kódy dvojicí souborů sources a changes. Soubor sources obsahuje zdrojový kód všech metod v systému určité verze (v našem případě 3.0) a do souboru changes se zapisují průběžně všechny další změny. Díky tomu lze ve Smalltalku jednoduše zkoumat historii verzí libovolné metody a jako bonus se vám prakticky nikdy nestane, že v případě nekorektního ukončení vývojového prostředí přijdete o pracně napsaný kód.
Bohužel velikost těchto souborů je zatím limitována na 32 MB a protože se velikost rozdílového souboru této hranici nebezpečně blížila, je pro verzi 3.9 vygenerován zdrojový soubor nový. Naneštěstí při tom vypadlo několik kostlivců ze skříně vložených při začleňování Traits, a tak se verze 3.9 znatelně opozdila.
Squeak pro Javu
Dan Ingalls pracuje na vytvoření virtuálního stroje pracujícího nad virtuálním strojem Javy. Takto puštěný Squeak je zatím přibližně desetkrát pomalejší. Ukázková verze se starší malou image je k dispozici na weather-dimensions.com. Kompletní projekt by měl být velmi brzy publikován.
Strongtalk
Další dárek dostal Squeak od společnosti Sun. Ta nedávno uvolnila pod licencí v BSD stylu Strongtalk. Strongtalk je Smalltalk s volitelnou statickou typovou kontrolou a provází jej pověst nejrychlejší existující implementace. Sun z něj čerpal při vytváření JVM. Dan to označil za pravděpodobně nejvýznamnější událost smalltalkovského světa za poslední roky a vypsal odměnu $5000 pro toho, kdo portuje Squeak na Strongtalkovskou VM do konce tohoto roku.
Změna licence
Poměrně závažný problém představuje licence Squeaku. Ta je sice uvolněnější než GPL a umožňuje i nasazení bez předání zdrojových kódů, zároveň však obsahuje i velmi problematické klauzule, které omezují Squeak třeba exportními zákony USA. Děti na Kubě tak Squeak používat legálně nemohou. Proto je veden v Debianu jako non-free, což mu ztěžuje vstup do řady dalších distribucí. Je to škoda, protože Squeak na rozdíl od suchého příkazového řádku virtuálních strojů jiných dynamických jazyků snadno zaujme na první pohled.
Alanovi a dalším se ovšem podařilo od Applu doslova vyškemrat změnu licence původního Squeaku 1.1 na APSL2, což je licence ve stylu BSD, pod níž byl vydán např. Darwin. K dispozici je na SqueakLand.org. To se samozřejmě komunita přijala s nadšením, ovšem vyvstal problém, jak s tímto dárkem naložit. Od verze 1.1 nezůstal kámen na kameni, takže nyní je potřeba zmapovat zdrojové kódy celého systému, kontaktovat všechny autory a získat jejich svolení ke změně licence nebo kód přepsat. Bude samozřejmě nutno udělat to po částech, a už se ozvaly i hlasy volající po tom se prakticky o těch deset let vrátit a vyjít znovu z originální verze.
Separace GUI
Tato problematika se dnešních nejpoužívanějších jazyků (bohužel) netýká. Za dobu existence Squeaku bylo učiněno několik pokusů o lepší modularizaci image. Mezi nimi vyčnívá projekt Spoon (dříve Fork), kterému se podařilo vytvořit velice malou image ovládanou vzdáleně přes síť z jiné image a rozšiřitelné pomocí tzv. imprintingu. Bohužel tato one-man show Craiga Latty je založena na hodně staré verzi Squeaku a její testování neusnadňují ani jeho modifikace virtuálního stroje. Teoreticky by mohla sloužit v budoucnu jako základ pro Squeak 4.0 a pozornosti se jí dostalo znovu při promýšlení postupu při změně licence. To by ovšem opět znamenalo částečně zahodit práci za několik let.
V posledních měsících se však ještě podařilo vytvořit jeden způsob, který umožňuje sestavovat malé image. Ten je založen na tzv. self-bootstrappingu. Některé implementace Smalltalku umožňují vytvářet novou image za pomocí zdrojových kódů (tzv. bootstrapping). U Squeaku je tato možnost ale prakticky nereálná. Image, se kterou Squeak pracuje, byla podle dostupných údajů takto vytvořena v roce 1976. Ano, některé squeakovské objekty (horkými kandidáty jsou např. true a false) jsou třicet let staré.
Self-bootstrapping toto obchází pomocí principiálně poměrně jednoduchého mechanismu. Nejdříve se vezmou všechny třídy v systému a vytvoří se jejich kopie, tzv. zrcadla. Tato zrcadla pak lze bez omezení a obav z poškození systému libovolně upravovat. Ve výsledku tak máte v jedné image vnořené zdrojové kódy image úplně jiné třeba i výrazně zredukované image. Pak už jen stačí provést proces vrácení zrcadel, kdy vezmete kód metod zrcadel, překompilujete s nimi existující metody, přebytečné metody zničíte a výslednou image pročistíte od zastaralých referencí. O zbytek se postará nenasytný garbage collector. Samozřejmě takto upravovaná image musí být ve všech fázích životaschopná a mít funkční kompilátor. Již se podařilo vytvořit poměrně malou image, která vychází přímo z nejnovějších verzí Squeaku a která z nich odstranila téměř vše včetně Morphicu, MVC, podpory sítě atd. Uživatel má k dispozici pouze jednoduchou textovou konzoli. V tomto směru je to krok zpět směrem k prostředím jako Python, Ruby, Lisp apod.
Velice snadno lze vygenerovat rozdílové zdrojové kódy původní a ořezané image. Pak již jen stačí tento rozdíl do hotové ořezané image znovu nahrát, provést inicializaci ve správném pořadí a ve výsledku se můžete dopracovat prakticky do původního stavu. V praxi jsou za tím samozřejmě hodiny a hodiny práce, ale dnes díky tomu jsme již schopni vytvořit malou image s jádrem systému a vytvořit z ní velkou fungující Morphicovskou image. To by ještě před pár měsíci bylo těžko představitelné a slibuje to značný posun vpřed.
Oddělení a vyčištění jádra sebou přinese i další pozitivní důsledky. Malé jádro se bude mnohem snáze transformovat na novou licenci, více se stabilizuje a snad dojde k lepšímu sjednocení současných odnoží Squeaku.
Komunita
Jedním z problémů dnešního Squeaku je komunita kolem něj, přesněji řečeno její velikost. Squeak je jednoduše obrovský projekt a trpí silným nedostatkem lidských zdrojů, lidí, kteří by byli schopni se přímo podílet na jeho vývoji. V poslední době se komunita pokusila reorganizovat, vytvořit týmy zodpovědné za jednotlivé části, ale i tak se stále nedá hovořit o ideálním stavu. Bude například velice těžké najít správce další verze, kteří by se tomuto úkolu mohli dostatečně věnovat. Squeak stále nemá vhodný režim vývoje, který by odstranil nezdravou závislost na několika málo obětavých jedincích. Smutné je, že ani ve finálních verzích se nedaří projít úspěšně necelými dvěma procenty SUnit testů, většinou vinou jejich neaktuálnosti.
Obliba Smalltalku podobně jako u ostatních dynamicky typovaných jazyků neustále roste. Jak bylo patrné letos v Praze na konferenci pořádané ESUG, význam Squeaku ve světě Smalltalku rok od roku stoupá a díky jeho oblibě v univerzitním prostředí se vývoj inovací soustředí právě kolem něj. Nezbývá než mu popřát, aby neztratil dech a s výzvami, které před ním stojí, se úspěšně vypořádal.