upvote
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://sin-ack.github.io/posts/morphic-intro/

reply
@DonHopkins your comment is flagged dead.

Is it because of its length giving false signals ?

reply
After 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

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:

https://try.squeak.org/

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...

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/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.

reply
I had vouched for your comment but it did not have any effect. Please email Dang, it seems to be a false positive of some sort.

Love your long comments.

> Oh I've posted much longer than that (see the one I linked) without getting flagged

Those were simpler times

reply
I vouched as well, but it's [flagged][dead] not just [dead] which is usually the result of user moderation, not the mods or auto moderation (which typically will just render as [dead] in either case). Which was odd because it was [flagged][dead] by the time it was 4 minutes old (maybe earlier, that's just when I saw it).
reply
I am just hoping and praying somebody will post something about Bakelite. Hold my beer!

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. ;)

reply
After 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

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:

https://try.squeak.org/

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...

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/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.

reply
Can 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

reply
deleted
reply
deleted
reply