[squeak-dev] SimpleMorphic

David T. Lewis lewis at mail.msen.com
Fri Mar 4 23:41:16 UTC 2011

On Wed, Nov 10, 2010 at 02:46:54PM -0300, Juan Vuletich wrote:
> Hi Folks,
> A few days ago I released SimpleMorphic for Pharo. SimpleMorphic is the 
> Morphic implementation in Cuis. It is much smaller and simpler than the 
> one in Pharo (and in Squeak). Please see 
> http://lists.gforge.inria.fr/pipermail/pharo-project/2010-November/035302.html 
> . A link to the code (for Pharo 1.2) is included.
> While this release of the code is for Pharo, it shouldn't be a big deal 
> to make it run on Squeak. My hope is that the Pharo community studies it 
> in detail, adopts it, and eventually remove the old Morphic. For Squeak, 
> maybe the same happens. Or perhaps there would be 2 Morphic UIs for 
> Squeak: FullMorphic+Etoys and SimpleMorphic... So, what do you think?

Many thanks to Juan for creating SimpleMorphic, and thanks also to ESUG
for supporting his work to make SimpleMorphic available to the community.

To load SimpleMorphic into a fully updated trunk image, install the
following from the Squeak inbox:


After loading these three files, you can open a new SimpleMorphic project
from the menu bar or from the world menu. Not everything works yet, but
there is enough in place to open browsers, workspaces, etc and generally
get a feel for how it works.


This is based on the original distribution for Pharo:

I attempted to preserve the SimpleMorphic package with as few changes as
possible, and ended up with a SimpleMorphic package and an SMx support
package, where all of the Squeak-specific changes are in SMx. The Project
and ToolBuilder classes are modified copies of the Morphic versions, with
no attempt to refactor or clean up unnecessary code (this can be done later,
as the intent is to make SimpleMorphic available in a form as close as
possible to the original distribution).

All of the development MCZ files are on my hard disk, and I can copy
them either to SqueakSource or to squeak.org if there is an interest
(not sure what to do with this, suggestions welcome).

The SimpleMorphic and SMx packages are entirely self-contained, and
can be loaded and unloaded without affecting the normal Morphic or MVC

	(MCPackage named: 'SMx') unload.
	(MCPackage named: 'SimpleMorphic') unload.


> I also sent this comment to the Pharo mail list recently, trying to make 
> clear why SimpleMorphic is useful:
> "Size of 4 core classes (Morph, MorphExtension, PasteUpMorph and 
> WorldState)
> Pharo / Squeak / Cuis
> totalIvars:  39 / 46 / 26
> totalClassVars: 15 / 10 / 5
> totalInstMethods: 1170 / 1764 / 663
> totalClassMethods: 55 / 71 / 16
> Size of the whole Morph hierarchy
> Pharo / Squeak / Cuis
> totalClasses: 197 / 331 / 58
> totalIvars:  649 / 1063 / 257
> totalClassVars: 54 / 138 / 28
> totalInstMethods: 6651 / 9186 / 2115
> totalClassMethods: 303 / 858 / 127
> SimpleMorphic is much smaller. Core classes are simpler and easier to 
> understand, fix and extend. The most important part is that this is not 
> blind removal of unused code. A lot of the functionality has been 
> redesigned to make it simpler, and the removal was done with great care 
> to result in a consistent system. This work started in 2004, so we're 
> talking of about 6 years of careful work. All this means that 
> SimpleMorphic does not support all the features that Pharo or Squeak 
> might support. Please use the browsers and other tools in Cuis to check 
> what it indeed can do.
> Talking about complexity, let's take for example, morph layout. This is 
> started with #doLayoutIn: in Pharo and #doLayoutIfNeeded in SimpleMorphic.
> In Pharo, this method calls #adjustLayoutBounds: (19), #layout:in: 
> (149), #layoutProportionallyIn: (10), 
> #computeCellArrangement:in:horizontal:target: (87), 
> #computeGlobalCellArrangement:in:horizontal:wrap:spacing: (31), 
> #computeCellSizes:in:horizontal: (30), 
> #computeExtraSpacing:in:horizontal:target: (136), #layoutLeftToRight:in: 
> (91), #layoutTopToBottom:in: (91), #placeCells:in:horizontal:target: 
> (70). The numbers in parenthesis are the sum of the lines of code of the 
> implementors. Total lines of code for layout (taking only these most 
> important methods) is 714. I doubt there are many people who really 
> understand all of this code.
> In SimpleMorphic (Cuis), this calls #layoutSubmorphsIn: (10), 
> #applyLayoutFrameIn: (11), #layout:in: (24). Total lines of code is 45. 
> I believe any smalltalker could understand these in just minutes."
> Cheers,
> Juan Vuletich

More information about the Squeak-dev mailing list