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

Názory k článku
Squeak: návrat do budoucnosti (7)

Zbyněk Křivka
Zbyněk Křivka (neregistrovaný)
23. 3. 2004 13:10 Nový

dlouhé výpočty

celé vlákno

Jednou jsem potřeboval pro potřeby jednoho projektu z oblasti teoretické informatiky vygenerovat permutace velké kolekce prvků. Doba výpočtu byla v řádu dnů a na noc počítač vypínám, takže jsem opravdu ocenil možnost pozastavovat výpočet (Alt+tečka) a ukládat image.

Až na vstupní množinu ten kód vypadal nějak takhle:

| result |
result := Set new.
#(a b c d e f) permutationsDo: [:p | result add: p copy ].
^result size asString, ': ', result asString.

Mohl jsem sice použít třeba VMWare apod. nebo si přerušování výpočtu naprogramovat sám, ale...

OldFrog
OldFrog (neregistrovaný)
24. 3. 2004 14:03 Nový

GNU Smalltalk ma GUI

celé vlákno

Pro uplnost - GNU Smalltalk ma docela hezke, v praxi normalne pouzitelne GUI. Je zalozeno na 'blox-tk' balicku, coz je v podstate smalltalkska vazba na tcl/tk. Existuje take vazba na gtk, nicmene ta je zrejme teprve v pocatcich. Screenshot blox-tk oken lze videt napriklad zde: http://freshmeat.net/projects/gnusmalltalk/

OldFrog
OldFrog (neregistrovaný)
24. 3. 2004 22:11 Nový

Jak je to s vykricniky v *.st souborech?

celé vlákno

Jeste chci autorovi podekovat za serial. Podobny jsem marne hledal jiz delsi dobu. Vrtaji mi ted hlavou ty vykricniky v *.st souborech. Kde se lze docist proc a na zaklade jakych pravidel se ten kod takto rozdeluje a preklada po castech?

Diky a hodne zdaru do dalsich dilu. Tesim se, ze nas ceka nejaka hezka ukazkova aplikace, na ktere si probranou teorii vyzkousime :)

uživatel si přál zůstat v anonymitě
25. 3. 2004 9:23 Nový

Re: Jak je to s vykricniky v *.st souborech?

celé vlákno

Vykřičníky jsou dány gramatikou pro tyto soubory.
http://www.gnu.org/software/smalltalk/gst-manual/gst_8.html
http://www.delorie.com/gnu/docs/smalltalk/gst_97.html

Povšiměte si, že např. vytvoření třídy je volání zprávy, nicméně vytvoření metod pro větší přehlednost už klasické volání zprávy není. Při nahrávání zdrojového souboru je tak nutno průběžně měnit režim zpracování.

OldFrog
OldFrog (neregistrovaný)
25. 3. 2004 12:26 Nový

Re: Jak je to s vykricniky v *.st souborech?

celé vlákno

Ano, tohoto rozdilu v definici tridy a metody jsem si prave vsiml. Neprijde mi, ze by pouzity zpusob prave prispival k prehlednosti ci pochopitelnosti. Tim spise nekolik rezimu kompilatoru. Je prehlednost skutecny duvod?

Pavel Křivánek
Pavel Křivánek (neregistrovaný)
25. 3. 2004 17:23 Nový

Re: Jak je to s vykricniky v *.st souborech?

celé vlákno

Soubory *.st slouží jako zdrojové soubory, scriptovací soubory i jako kombinace zdrojových a scriptovacích souborů.

Pokud do nich napíšete nějaký kód, přeloží se a provede. Vykřičníky pak oddělují jednotlivé části. Např.:

| a |
a := 1.
Transcript show: a; cr.
!
| a |
Transcript show: a; cr.
a := 2.
Transcript show: a; cr.

Každá část oddělená vykřičníkem se kompiluje a provádí zvlášť. Proto se do Transcriptu vypíše 1, nil a 2.

Kompilátor musí vědět, zda to, co mu předhazujeme, je kód nějaké metody či sekvence příkazů k provedení.

OldFrog
OldFrog (neregistrovaný)
26. 3. 2004 11:57 Nový

Re: Jak je to s vykricniky v *.st souborech?

celé vlákno

"Kompilátor musí vědět, zda to, co mu předhazujeme, je kód nějaké metody či sekvence příkazů k provedení. "

1) Proc to musi vedet, kdyz vse je objekt a vse co lze ve smalltalku delat je posilat zpravu?

2) Proc se to dozvida zrovna pomoci vykricniku, tela metod by preci sla predavat kompilatoru jako bloky, treba

MojeTrida addMethod: #sampleMethod body: [ 'metoda' ].

Tim se slo vyhnout zcela vykricnikum. Pokud ne, v cem se mylim?

Pavel Křivánek
Pavel Křivánek (neregistrovaný)
26. 3. 2004 14:21 Nový

Re: Jak je to s vykricniky v *.st souborech?

celé vlákno

Problém bude v tom, že kompilace metody není jen otázkou příkazu typu MojeTrida addMethod: #sampleMethod body: [ 'metoda' ].

Při kompilaci metody ještě sehrávají úlohu speciální objekty zajišťující odchytávání chyb kompilátoru apod.

Nicméně i tak si lze představit, že by to tímto způsobem bylo možné udělat. Pak je třeba vzít ještě v potaz fakt, že úplně stejný formát má celý soubor *.sources. Pokud by u každé metody byl uveden přímo přikaz pro její vytvoření, obsahovaly by tyto zdrojové soubory spoustu zbytečných informací navíc a oddělování pár vykřičníky je přece jenom úspornější.

Masca
Masca (neregistrovaný)
25. 3. 2004 17:28 Nový

Re: Jak je to s vykricniky v *.st souborech?

celé vlákno

Oni st soubory nejsou ani primarne urceny k prohlizeni a editaci kodu, na to je (mnohem prehledejsi) browser. Jsou vicemene jen na prenos kodu.
Trochu odbocka - skripty pro Smalltalk/X jsou sice take podobneho formatu, ale vetsinou v nich neni takovy vykricnikovy zmatek, tam se vykricnikem jen oddeluji bloky kodu (tj. znamena doIt).

OldFrog
OldFrog (neregistrovaný)
26. 3. 2004 23:00 Nový

Re: Jak je to s vykricniky v *.st souborech?

celé vlákno

V tom pripade mi neni zcela jasny rozdil mezi zdrojovym a skriptovacim souborem. Na vykricnicich se mi vpodstate nelibi, ze se castecne vymykaji tomu, co bylo doposud o smalltalku receno. Narusuji transparentnost a homogenitu puvodni predstavy, ze programovani ve smalltalku je pouze a jen zasilani zprav nejakym jiz existujicim objektum. Ukazuje se, ze pridani metody neni klasicka zprava. S vytvorenim metody se poji nejaka "magicka operace" (tou je zrejme zminene prepnuti kompilatoru do jineho modu).

Pavel Křivánek
Pavel Křivánek (neregistrovaný)
27. 3. 2004 10:15 Nový

Re: Jak je to s vykricniky v *.st souborech?

celé vlákno

Nemyslím si, že by *.st soubory narušovaly transparentnost jazyka. Samozřejmě nemáte jinou možnost, než vytvářet metody pomocí volání zprávy. Nicméně pokud ve zdrojovém souboru uvedete pouze text metody s tím, že u ní specifikujete navíc pouze kategorii, třídu, čas a iniciály autora, pak to bude určitě lepší, než když do zdrojáku napíšete přímo příkaz pro její vytvoření, protože dáte tomu, kdo bude zdrojový soubor číst, příležitost, aby si sám specifikoval překladač a odchytávače zpráv. Navíc byste si jen komplikovali práci, pokud byste si chtěli zdrojový soubor procházet v browseru bez toho, abyste jej nafajlovaly do image. Vykřičníky nejsou jedinou možností, jak toho docílit. Některé Smalltalky například umožňují přenos zdrojových textů v xml. Ani když programujete v browseru, nemají metody formát volání zprávy, jako je tomu u tříd.

OldFrog
OldFrog (neregistrovaný)
29. 3. 2004 9:43 Nový

Re: Jak je to s vykricniky v *.st souborech?

celé vlákno

Dekuji za odpoved. Pokud Vas moje dotazy jeste neunavuji, ptam se tedy, v cem se lisi definice tridy od definice metody? Kdyz je pro kazdou pouzit odlisny zpusob zapisu? Prekladaji se vlastne tridy nebo jenom metody nebo oboje? Kdyz mluvite o volbe prekladace jen u metod...

Pavel Křivánek
Pavel Křivánek (neregistrovaný)
29. 3. 2004 20:18 Nový

Re: Jak je to s vykricniky v *.st souborech?

celé vlákno

Vytvoření třídy je naprosto odlišná operace. V podstatě jde o tvorbu nového objektu. Vytvoření metody je sice také tvorba nového objektu (instance třídy CompiledMethod), ovšem je nejdříve třeba vygenerovat odpovídající bytekód pomocí kompilátoru.

Když necháváte provést nějaký výraz (např. ve Workspace nebo třeba fileinujete definici třídy), je za běhu přeložen do bytekódu kompilátorem a vykonán.

Když necháváte vytvořit nějakou metodu, uděláte to výrazem, který je také přeložen do bytekódu a vykonán, ovšem uvnitř tohoto vykonávaného výrazu musíte vytvářet další instanci kompilátoru, který musí nějakým způsobem hlásit chyby apod. Proto je ve vytváření tříd a metod rozdíl.

Vaše dotazy samozřejmě vítám.

OldFrog
OldFrog (neregistrovaný)
30. 3. 2004 8:42 Nový

Re: Jak je to s vykricniky v *.st souborech?

celé vlákno

O tomto rozdilu mezi tvorbou metody a tvorbou tridy jsem nevedel, nyni se mi to zda cele pochopitelnejsi. Diky za Vasi vstricnost, jdu se presunout nad dalsi dil serialu ;-)

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