Thank you everyone for your alacritous responses!
I'm finding one of the challenges in learning Smalltalk is not the syntax of the code, nor the general paradigm by which the code is implemented, but understanding the tools well enough to make things happen. I'm an experienced programmer and I'm finding that I'm having to completely rethink the way I go about my work when diddling around with this language. That's not in and of itself a bad thing - just saying I'm thankful for this mailing list :-)
David Holiday ------------------------------------------------- San Diego State University neuburge@rohan.sdsu.edu
On Jan 1, 2014, at 4:00 AM, beginners-request@lists.squeakfoundation.org wrote:
Send Beginners mailing list submissions to beginners@lists.squeakfoundation.org
To subscribe or unsubscribe via the World Wide Web, visit http://lists.squeakfoundation.org/mailman/listinfo/beginners or, via email, send a message with subject or body 'help' to beginners-request@lists.squeakfoundation.org
You can reach the person managing the list at beginners-owner@lists.squeakfoundation.org
When replying, please edit your Subject line so it is more specific than "Re: Contents of Beginners digest..."
Today's Topics:
- Re: object instance browser? (Herbert K?nig)
- Re: object instance browser? (Chris Muller)
- Re: object instance browser? (karl ramberg)
Message: 1 Date: Tue, 31 Dec 2013 14:50:55 +0100 From: Herbert K?nig herbertkoenig@gmx.net Subject: Re: [Newbies] object instance browser? To: beginners@lists.squeakfoundation.org Message-ID: 52C2CBBF.6050801@gmx.net Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Merci vielmals.
Am 31.12.2013 11:27, schrieb Bert Freudenberg:
Yes, multiple ones in fact. This is a major reason working in Smalltalk feels more immediate than in other environments.
...... Great explanation scrubbed
Message: 2 Date: Tue, 31 Dec 2013 13:02:51 -0600 From: Chris Muller asqueaker@gmail.com Subject: Re: [Newbies] object instance browser? To: "A friendly place to get answers to even the most basic questions about Squeak." beginners@lists.squeakfoundation.org Message-ID: CANzdToH+hPyJqeBqSdWLwROi5w_SbdAu_G9oWm3BgRkTqa=z9w@mail.gmail.com Content-Type: text/plain; charset=UTF-8
Great post, I learned some new things.
On Tue, Dec 31, 2013 at 4:27 AM, Bert Freudenberg bert@freudenbergs.de wrote:
On 31.12.2013, at 08:53, David Holiday neuburge@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
Message: 3 Date: Wed, 1 Jan 2014 02:23:04 +0100 From: karl ramberg karlramberg@gmail.com Subject: Re: [Newbies] object instance browser? To: "A friendly place to get answers to even the most basic questions about Squeak." beginners@lists.squeakfoundation.org Cc: David Holiday neuburge@rohan.sdsu.edu Message-ID: CAGzzWLgJCGf1AkddemfwwvsRtfaHoHO5R+mRPu5eR4ZQy+iFfw@mail.gmail.com Content-Type: text/plain; charset="iso-8859-1"
I do it :-)
Happy new year!
Cheers, Karl
On Tue, Dec 31, 2013 at 12:40 PM, Bert Freudenberg bert@freudenbergs.dewrote:
Hey, I wrote it, you make the workspace, deal? ;)
Happy New Year, btw.
- Bert -
On 31.12.2013, at 12:37, karl ramberg karlramberg@gmail.com wrote:
Make a Welcome Workspace with this info :-)
Cheers, Karl
On Tue, Dec 31, 2013 at 11:27 AM, Bert Freudenberg bert@freudenbergs.dewrote:
On 31.12.2013, at 08:53, David Holiday neuburge@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