Portál AbcLinuxu, 16. května 2024 15:46

SqueakOnJava

13.7.2007 22:57 | Přečteno: 1064× | Výběrový blog

Je to už nějaký čas, kdy Dan Ingalls zveřejnil demonstrační verzi svého malého projeku SqueakOnJava, což je implementace smalltalkovského virtuálního stroje v Javě. Bohužel od té doby se nedostal ke zveřejnění zdrojových kódů.

Protože se nezdá, že by k jejich zveřejnění mělo brzy dojít, zkusil jsem využít jedné z pozitivních vlastností Javy, kterou zdědila po Smalltalku - čitelný dekompilovaný kód. Binární třídy jsem tedy prohnal programem jad.

Původně jsem měl za to, že Dan vytvořil translator Smalltalku na Javu a nechal kód interpretu vygenerovat podobně, jako se to dělá pro jazyk C. Alespoň se jsem tak odvozoval od nijak oslňující rychlosti výsledného virtuálního stroje. SqueakOnJava je ale zcela samostatná implementace od nuly. Narozdíl od JPythonu, JRuby apod. nepoužívá překlad přímo do bytekódu Javy, ale smalltalkovský bytekód jednoduše interpretuje.

Samotný výstup z jadu není sice dokonalý (neumí si dobře poradit např. se zanořenými třídami či návěstími), ale úprav skutečně mnoho nepotřebuje. Celý tento virtuální stroj má cca 5500 řádků dobře čitelného kódu. Současná implementace má ještě řadu nedostatků. Neumí ukládat image, má problémy se čtením image s jiným endianem, implementuje minimum primitiv apod. Ovšem k puštění a provozování malé MVC image postačuje.

Krom toho, že to jednoho zarytého smalltalkera přinutilo zase jednou pustit Netbeans, to zatím k ničemu užitečnému asi dobré není, ale minimálně pro případ, kdy potřebujete provozovat Smalltalk někde, kde nelze nainstalovat nativní virtuální stroj, to může být v budoucnu dobrý pomocník.

Download: SqueakOnJava.zip

       

Hodnocení: 90 %

        špatnédobré        

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

Komentáře

Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře. , Tisk

Vložit další komentář

14.7.2007 11:44 Lukáš Zapletal | skóre: 42 | blog: lzapův svět | Olomouc
Rozbalit Rozbalit vše Re: SqueakOnJava
Odpovědět | Sbalit | Link | Blokovat | Admin
Možnost dekompilace není vlastností Javy, ale vlastností s JDK dodávaného překladače javac. Dá se jednoduše zajistit, abyste z bytekódu nepřečetl zpětně nic, pouze samotné instrukce.
Later --- Lukáš Zapletal
alblaho avatar 14.7.2007 22:22 alblaho | skóre: 17 | blog: alblog
Rozbalit Rozbalit vše Re: SqueakOnJava
Ne, bytecode jde zpět na javu relativně dobře (oproti překladu z assembleru do céčka). Začíná to tím, že každá třída je uložena v extra souboru. Veřejná rozhraní jsou čitelná, pač jsou přístupná přes i reflexi. Takže jediné, co nejde dohledat jsou názvy lokálních proměnných.

Tedy pokud se nepoužije obfuskátor, ale jeho použití bych od zastánce ST nečekal :-)
14.7.2007 13:22 Pavel Křivánek | skóre: 29 | blog: Kvičet nezávaznou konverzaci
Rozbalit Rozbalit vše Re: SqueakOnJava
Odpovědět | Sbalit | Link | Blokovat | Admin

nejnovější Ingallsův vynález ;-)

http://www.youtube.com/watch?v=Rj4moeKDGY4

I'm sure it crashed in the most type-safe way possible.
alblaho avatar 14.7.2007 22:26 alblaho | skóre: 17 | blog: alblog
Rozbalit Rozbalit vše Re: SqueakOnJava
Odpovědět | Sbalit | Link | Blokovat | Admin
JRuby nepřekládá do java bytecode. Ruby totiž ani žádný bytecode nemám, originální interpreter interpretuje AST.

JPython (Jython?) si myslím je taky jen reimplementace CPythonu v Javě.
15.7.2007 01:05 Ladicek | skóre: 28 | blog: variace | Havlíčkův brod
Rozbalit Rozbalit vše Re: SqueakOnJava
JRuby nepřekládá do java bytecode.
Zatím. Ale chtějí to, bohopytelně z výkonových důvodů.
Ještě na tom nejsem tak špatně, abych četl Viewegha.
alblaho avatar 15.7.2007 19:00 alblaho | skóre: 17 | blog: alblog
Rozbalit Rozbalit vše Re: SqueakOnJava
Existuje nějaký akademický překladač Ruby do CIL, ale je to dost zběsilé. Znamená to generovat hromadu CIL tříd pro kde co, moc se mi to nelíbilo.

Založit nové vláknoNahoru

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.