7 ms·
What are the best books/papers/blog posts to learn about Morphic's architecture? I'm not a user of any Smalltalk implementation but I'd like to learn more as th
by davexunit 2mo ago
What are the best books/papers/blog posts to learn about Morphic's architecture? I'm not a user of any Smalltalk implementation but I'd like to learn more as the Smalltalk approach to UI is very interesting.
- pjmlp 2mo agoMorphic 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 2mo 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 2mo ago@DonHopkins your comment is flagged dead. Is it because of its length giving false signals ?
- DonHopkins 2mo 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.
- deleted 2mo ago[deleted]
- deleted 2mo ago[deleted]
- isr 2mo agoCan I suggest you take a look at Cuis Smalltalk (a simplified fork from squeak), and any of the talks given by Juan Vuletich (main author of cuis). In Cuis, Juan took morphic back to basics and updated it heavily. Now submorphs use relative geometry (not absolute), and everything is hardware accelerated vector graphics - EVEN THE FONTS. 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
- dolmen 2mo agohttps://cuis.st/ https://cuis.st/