Hey, I wrote it, you make the workspace, deal? ;) Happy New Year, btw.
- Bert - On 31.12.2013, at 12:37, karl ramberg <karlramb...@gmail.com> wrote: > Make a Welcome Workspace with this info :-) > > Cheers, > Karl > > > On Tue, Dec 31, 2013 at 11:27 AM, Bert Freudenberg <b...@freudenbergs.de> > wrote: > On 31.12.2013, at 08:53, David Holiday <neubu...@rohan.sdsu.edu> wrote: > > > Is there a way to browse the ecosystem of objects in a Smalltalk image? > > Yes, multiple ones in fact. This is a major reason working in Smalltalk feels > more immediate than in other environments. > > > I'm not talking about the class browser, what I'm looking for is a way to > > see what objects have actually been instantiated and what their state is. > > The basic tool for this is called an Inspector. Whenever you have an > expression, like "3 + 4", you press cmd-i to "inspect it", which opens an > inspector on the result. This works in any text area. Try for example > inspecting "self" in a class browser, and you will inspect the underlying > class object (which the browser shows a high-level view of). > > In the Inspector you see the objects referenced by this object (via instance > variables or indexed fields) in the left panel. Select any of them and choose > "inspect" from the context menu (or press cmd-i again). This way you can > inspect all the objects in the system. > > A more modern tool than the Inspector (which was around 40 years ago already) > is the Object Explorer. It presents you a tree view of an object and its > "children", which again are the instance variables and indexed fields of the > object. Open it with cmd-shift-i (or "explore" in the context menu). > > You can also do the reverse. If you choose "objects pointing to this value" > you get an inspector showing all the objects that directly point to this > object. Similarly there is a "reverse explorer", which you can open by > selecting "explore pointers". > > There are two roots to all the objects in the system: > > Smalltalk specialObjectsArray > > which basically holds everything the Virtual Machine needs to know about, and > in turn almost every object in the whole image, and > > thisContext > > which is the current execution context, holding onto temporary objects. When > a garbage collection is performed, any object not reachable form either of > these two roots is removed from memory. > > An "interesting" global object to explore is > > Project current > > which holds your current workspace, in particular > > Project current world > > , the root of all morphs in the world. And of course > > Smalltalk > > itself is the dictionary that holds all global objects, including all classes > (unless they are defined in a non-global environment). > > There is also a low-level way to enumerate all objects in memory. "self > someObject" will return the very first object in memory (which happens to be > the nil object), and "anObject nextObject" will return the next one: > > | object count | > count := 0. > object := self someObject. > [0 == object] > whileFalse: [count := count + 1. > object := object nextObject]. > count > > Interestingly, this also finds objects that are due to be garbage-collected. > For example, if you accidentally closed a text window, there is a good chance > its contents will still be in memory, and can be retrieved using an > expression like > > ByteString allInstances last: 10 > > This makes use of the someInstance/nextInstance methods, which are similar to > someObject/nextObject, but restricted to instances of one class only. > > Hope you have fun poking around in the world of objects :) > > - Bert - > > > _______________________________________________ > Beginners mailing list > Beginners@lists.squeakfoundation.org > http://lists.squeakfoundation.org/mailman/listinfo/beginners > > _______________________________________________ > Beginners mailing list > Beginners@lists.squeakfoundation.org > http://lists.squeakfoundation.org/mailman/listinfo/beginners
_______________________________________________ Beginners mailing list Beginners@lists.squeakfoundation.org http://lists.squeakfoundation.org/mailman/listinfo/beginners