Live data from Hacker News

Squeak 6.1

squeak.org

61–70 of 154 posts

Re: Squeak 6.1

#61
post #13

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.

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/

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.

Re: Squeak 6.1

#62

I just downloaded on Windows 11. My antivirus (Symantec Endpoint Protection) did not like it and erased the executable. I reinstalled and got it working. Question? Does this work with Etoys? If so, how? I tried following various directions online without success. Thanks!

Help/Useful Expressions has some EToys instructions. The Squeakland images stopped getting upograded when Squeeak went 64-bit (I think). You can get a "halo" on any object, click the Inspector icon (the eye) and create an etoys script from there. Also, under Extras/Themes and Colors there is a Set Etoys Mode option. You can try that but, it didn't work last night. Lastly, files.squeak.org/etoys has a 6.0beta image you can download. Drop the image/changes into SqueakJS [1] (that is the only way to run a 32bit image).

[1]https://github.com/codefrau/SqueakJS

Re: Squeak 6.1

#63

Earlier quoted context omitted.

For me, Elixir misses the mark. If you're an unc with a background in Ruby or that era of webdev, I can see the appeal. It's a familiar set dressing. I don't have that background, I much prefer the syntactic structure of Erlang's psuedo-horn clauses. Both for similar familiarity reasons (I knew Prolog before I touched Erlang), as well as a general preference for the simplicity.

The similarity of Ruby and Elixir is only extremely superficial and betrays your lack of familiarity with the language.

I didn't imply otherwise, nor is the story different on the Erlang-Prolog axis (actually it's even more pronounced there.) I literally called it "set dressing". Where I think you go off the rails is that you're conflating surface-level things with irrelevance. Which isn't really true, especially in matters of taste.

I find this to be a very strange thing to get defensive about. It's not exactly a subtle part of Elixir's history. It was pretty well documented to be born out of the creator's dissatisfaction with concurrency in Ruby, and simultaneously, for a more Ruby-like language on the BEAM. That doesn't mean it's literally Ruby-on-the-BEAM (which was originally attempted, and didn't work out), however mistaking that as cause to dismiss the link between the two and the carry-over appeal for developers is an unsound overcorrection.

Re: Squeak 6.1

#64

Earlier quoted context omitted.

Lisp, Forth, Erlang, Smalltalk, and Rebol, so easily forgotten. All languages that multiply your insight into the nature of computer programming. A bit sad that many just stop at the first of these, and many more don’t even venture past their Pythons and Javascripts.

And Prolog and Assembly!

Assembly is very useful to learn, but does not bring as strong a paradigm shift, as it is similar to most other imperative, procedural languages.

Re: Squeak 6.1

#65
post #16

Earlier quoted context omitted.

For me, Smalltalk's "wow" moment was the concept of a persistently running image, with the developer's job being to mould and manipulate it into the shape s/he wants.

I wish this didn’t go out of fashion as much as it did. An environment that you perturb makes more sense in a lot of ways than a “tear it down and restart” model.

I think the gnarlier part is that it reveals how much (and how error prone) initialization code is. When objects start glued together in the right structure a lot becomes magically easier to deal with.

Re: Squeak 6.1

#66
post #2

Just like learning Lisp will make you rethink programming languages, and learning Erlang will make you understand the true power of concurrency: learning Smalltalk will make you understand what "object oriented" actually means. I haven't used Squeak since college but I'm glad it was part of the cirriculum. Btw, almost all of Javascript's good parts come from Smalltalk.

As a Ruby developer this video about Pharo smalltalk made me a smalltalk believer — not surprising because Ruby was heavily inspired by smalltalk. https://youtu.be/HOuZyOKa91o

Thanks for sharing. This piqued my interest.

Re: Squeak 6.1

#67
post #16

Earlier quoted context omitted.

For me, Smalltalk's "wow" moment was the concept of a persistently running image, with the developer's job being to mould and manipulate it into the shape s/he wants.

I wish this didn’t go out of fashion as much as it did. An environment that you perturb makes more sense in a lot of ways than a “tear it down and restart” model.

Imagine inheriting not your colleague’s code, but his entire machine. Then you discover this machine also is the production environment.

Re: Squeak 6.1

#68
post #13

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.

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/

@DonHopkins your comment is flagged dead.

Is it because of its length giving false signals ?

Re: Squeak 6.1

#69
post #16
post #2

Just like learning Lisp will make you rethink programming languages, and learning Erlang will make you understand the true power of concurrency: learning Smalltalk will make you understand what "object oriented" actually means. I haven't used Squeak since college but I'm glad it was part of the cirriculum. Btw, almost all of Javascript's good parts come from Smalltalk.

For me, Smalltalk's "wow" moment was the concept of a persistently running image, with the developer's job being to mould and manipulate it into the shape s/he wants.

Ive always "dreamed" of having something like the ST image but backed by persistent virtual memory, not simply RAM.

(Crudely) mmap the ST image to a 100GB file and just change pages. Let the OS flush the pages back and forth.

Maybe full boat, heap sweeping GCs would be Bad as it pages the entirety of the heap in and out. But we have (had) lots of RAM these days. We have generational GCs that leave idle stuff alone. Its no doubt impractical, but I think it would be neat to have the entirety of my historical email in the global "mailbox" array, and I can build indexes off it as I wished. But the mail isn't "on disk", it's all marshalled up as first class objects.

I don't know enough about it, no doubt it "won't work", but the idea of simply mapping the entire, large, ST VM heap to a persistent backing store, just be interesting I would think.

Dangerous too, as there is a demarcation between "running image" and "saved image". But, still think it could be interesting.

Re: Squeak 6.1

#70
post #68
post #13

Earlier quoted context omitted.

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/

@DonHopkins your comment is flagged dead. Is it because of its length giving false signals ?

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.

Post reply on HN