"Všimněte si jednoho zásadního rysu Smalltalku. Pro ladění programu se nepoužívá žádný speciální režim. Z tohoto úhlu ohledu Smalltalk ladění vlastně vůbec nezná. Vše řeší svými vlastními prostředky a nerozlišuje mezi během programu, jeho vytvářením a laděním."
Kdosi to prirovnal k tomu, jako kdyz se necha cely linux s X a KDE nechat jet v debuggeru. Kdykoliv dojde k potizim, lze to hned prozkoumat a opravit. V linuxu/X/KDE prakticky nepredstavitelne....
Mezi zprávami tříd a metatříd není rozdíl.
V tomto případě použijte zprávu tallySends:. Dostanete z ní mimojiné:
**Tree**
1 Array class(ArrayedCollection class)>>new
což vám řekne, že byla zavolána zpráva new, která je implemetnovaná v metatřídě třídy ArrayedCollection a vypadá takto:
new
^ self new: 0
Hlouběji se (kvůli optimalizacím) nezanoří ani debugger.
a jak se potom to new provadi? Celkem zajimave by bylo popsat postup od napsani Array new:10 v transcriptu. Co se vytvori, co to zavola atd... Cetl jsem treba, ze new je definovane v Behaviour, ale kde se vytvari ten, vubec nevim: zdrojaku moc, debuger nepomohl.
Klidne pockam na dalsi dily, jenom abyste s tim pocitali ;-)
Našel jste si docela matoucí příklad. Musíte si uvědomit, že se nejedná o metodu třídy (nebude ji vykonávat instance), ale o metodu metřídy, kterou vykonává TŘÍDA.
Předkem třídy Class je třída Behavior, ve které je implementována metoda new: vykonávající primitivu <primitive: 71>.
To, že se debugger nazanoří až na samé dno, je zpusobeno optimalizacemi interpretu, k nimž se přistupuje, protože pole (a tedy i řetězce, symboly atd.) tvoří několik desítek procent objektů z celé image.