I am unaware how it evolved since then, especially given the differences between Self and Smalltalk.
Is it because of its length giving false signals ?
https://news.ycombinator.com/item?id=8841428
Self Morphic is not a classical class hierarchy. The handbook describes parallel traits objects (shared behavior) and prototypes (structure), with instances delegating via parent* slots and "copy-down" differential prototypes. Bottom-up: morph copy, tweak, factor shared behavior into a traits object. Worth reading section 7.3 alongside pjmlp's links.
https://handbook.selflanguage.org/2017.1/morphic.html
The Squeak port is single-inheritance Smalltalk classes -- closer to what most people mean by "OOP UI toolkit." Etoys is Morphic. Full Squeak Morphic in a browser, no install:
Squeak 6.1 release notes (Objectland, tree morph overhaul):
https://squeak.org/release_notes/6.1/
In JavaScript there are two Morphic implementations people often conflate. Same family, not the same code.
Dan Ingalls's Lively Kernel / Lively Web (~2008, Sun) is the full live system: modular core/lively/morphic/ (Halos, Serialization, Scrubbing, Connectors, constraints), plus IDE, parts bin, world persistence. JSConf 2012 demo:
https://github.com/LivelyKernel/LivelyKernel
https://github.com/LivelyKernel/LivelyKernel/tree/master/cor...
Jens Monig's morphic.js (~2010, BYOB4/Snap!) is a separate codebase: single-file Canvas kernel (~13k lines), World/Hand/stepping/dirty rects, template peel-off, ScrollFrame inertial pan. Jens names Ingalls's LK as the gold standard but says it is not a direct port -- though fullCopy() was ported almost literally from Squeak, comments included. Snap bundled it from day one (2013-03-16). Standalone extract:
https://github.com/jmoenig/Snap/blob/master/src/morphic.js
https://github.com/jmoenig/Snap/blob/master/docs/morphic.txt
https://github.com/jmoenig/morphic.js
https://wiki.squeak.org/squeak/6550
https://en.wikipedia.org/wiki/Morphic_(software)
On multiple inheritance: neither JS port uses it, and Self Morphic didn't really either. LK cheats with an explicit Trait composition layer (Object.subclass plus Trait(...) mixins). Snap cheats with Squeak-style copying (fullCopy, isTemplate peel-off). The live feel comes from copyable morph trees and shared behavior, not MI.
If you want one more readable architecture tour beyond sin-ack's intro, the Self handbook chapter 7 is still the root document; everything else is commentary on it.
Love your long comments.
> Oh I've posted much longer than that (see the one I linked) without getting flagged
Those were simpler times
Oh shit, I just missed a Bakelite discussion 17 days ago!
https://news.ycombinator.com/item?id=49026992
But there's a comment from 9 days ago that's still replyable. ;)
https://news.ycombinator.com/item?id=8841428
Self Morphic is not a classical class hierarchy. The handbook describes parallel traits objects (shared behavior) and prototypes (structure), with instances delegating via parent* slots and "copy-down" differential prototypes. Bottom-up: morph copy, tweak, factor shared behavior into a traits object. Worth reading section 7.3 alongside pjmlp's links.
https://handbook.selflanguage.org/2017.1/morphic.html
The Squeak port is single-inheritance Smalltalk classes -- closer to what most people mean by "OOP UI toolkit." Etoys is Morphic. Full Squeak Morphic in a browser, no install:
Squeak 6.1 release notes (Objectland, tree morph overhaul):
https://squeak.org/release_notes/6.1/
In JavaScript there are two Morphic implementations people often conflate. Same family, not the same code.
Dan Ingalls's Lively Kernel / Lively Web (~2008, Sun) is the full live system: modular core/lively/morphic/ (Halos, Serialization, Scrubbing, Connectors, constraints), plus IDE, parts bin, world persistence. JSConf 2012 demo:
https://github.com/LivelyKernel/LivelyKernel
https://github.com/LivelyKernel/LivelyKernel/tree/master/cor...
Jens Monig's morphic.js (~2010, BYOB4/Snap!) is a separate codebase: single-file Canvas kernel (~13k lines), World/Hand/stepping/dirty rects, template peel-off, ScrollFrame inertial pan. Jens names Ingalls's LK as the gold standard but says it is not a direct port -- though fullCopy() was ported almost literally from Squeak, comments included. Snap bundled it from day one (2013-03-16). Standalone extract:
https://github.com/jmoenig/Snap/blob/master/src/morphic.js
https://github.com/jmoenig/Snap/blob/master/docs/morphic.txt
https://github.com/jmoenig/morphic.js
https://wiki.squeak.org/squeak/6550
https://en.wikipedia.org/wiki/Morphic_(software)
On multiple inheritance: neither JS port uses it, and Self Morphic didn't really either. LK cheats with an explicit Trait composition layer (Object.subclass plus Trait(...) mixins). Snap cheats with Squeak-style copying (fullCopy, isTemplate peel-off). The live feel comes from copyable morph trees and shared behavior, not MI.
If you want one more readable architecture tour beyond sin-ack's intro, the Self handbook chapter 7 is still the root document; everything else is commentary on it.
Seriously, reading Unicode enhanced code in a 45 degree tilted editor window, while zooming in and out just for kicks (all of this can be done by manipulating the morph with its halo's menu) just to see how crisp everything is - thats FUN!
Also, try taking apart the standard system browser (4 panes + editor), rearrange everything as per your tastes (by drag & drop), and ... everything still works