3 ms·
Morphic started on Self actually, maybe start there? I am unaware how it evolved since then, especially given the differences between Self and Smalltalk. http
by pjmlp 3mo ago
Morphic started on Self actually, maybe start there?
I am unaware how it evolved since then, especially given the differences between Self and Smalltalk.
https://handbook.selflanguage.org/2017.1/morphic.html https://handbook.selflanguage.org/2017.1/morphic.html
https://sin-ack.github.io/posts/morphic-intro/ https://sin-ack.github.io/posts/morphic-intro/
- DonHopkins 3mo agoAfter Self, the short lineage is Self (~1992, Smith & Maloney) -> Squeak port (Maloney & Ingalls, Etoys/Scratch 1) -> two independent JavaScript reimplementations, plus Squeak-in-the-browser via SqueakJS. I dug into this same question a decade ago and posted a longer treatment -- my email exchange with Alan Kay on MVC vs Morphic vs watchers, plus replies on Self's "soup of objects" UI. Good philosophical complement to the architectural links below: https://news.ycombinator.com/item?id=8841428 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 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: https://try.squeak.org/ https://try.squeak.org/ Squeak 6.1 release notes (Objectland, tree morph overhaul): https://squeak.org/release_notes/6.1/ 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 https://github.com/LivelyKernel/LivelyKernel/tree/master/core/lively/morphic https://github.com/LivelyKernel/LivelyKernel/tree/master/cor... http://youtu.be/QTJRwKOFddc http://youtu.be/QTJRwKOFddc 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/src/morphic.js https://github.com/jmoenig/Snap/blob/master/docs/morphic.txt https://github.com/jmoenig/Snap/blob/master/docs/morphic.txt https://github.com/jmoenig/morphic.js https://github.com/jmoenig/morphic.js https://wiki.squeak.org/squeak/6550 https://wiki.squeak.org/squeak/6550 https://en.wikipedia.org/wiki/Morphic_(software) 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.
- srean 3mo ago@DonHopkins your comment is flagged dead. Is it because of its length giving false signals ?
- DonHopkins 3mo agoAfter Self, the short lineage is Self (~1992, Smith & Maloney) -> Squeak port (Maloney & Ingalls, Etoys/Scratch 1) -> two independent JavaScript reimplementations, plus Squeak-in-the-browser via SqueakJS. I dug into this same question a decade ago and posted a longer treatment -- my email exchange with Alan Kay on MVC vs Morphic vs watchers, plus replies on Self's "soup of objects" UI. Good philosophical complement to the architectural links below: https://news.ycombinator.com/item?id=8841428 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 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: https://try.squeak.org/ https://try.squeak.org/ Squeak 6.1 release notes (Objectland, tree morph overhaul): https://squeak.org/release_notes/6.1/ 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 https://github.com/LivelyKernel/LivelyKernel/tree/master/core/lively/morphic https://github.com/LivelyKernel/LivelyKernel/tree/master/cor... http://youtu.be/QTJRwKOFddc http://youtu.be/QTJRwKOFddc 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/src/morphic.js https://github.com/jmoenig/Snap/blob/master/docs/morphic.txt https://github.com/jmoenig/Snap/blob/master/docs/morphic.txt https://github.com/jmoenig/morphic.js https://github.com/jmoenig/morphic.js https://wiki.squeak.org/squeak/6550 https://wiki.squeak.org/squeak/6550 https://en.wikipedia.org/wiki/Morphic_(software) 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.