9 ms·
Squeak 6.1
- avaer 2mo agoJust 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.
- addaon 2mo ago> almost all of Javascript's good parts come from Smalltalk Is this underselling the role of Self in JS’s prototype-based object system, or saying that a prototype-based object system is not one of the good parts?
- sscaryterry 2mo agoPrototypical inheritance has caused so many, many vulnerabilities...
- smj-edison 2mo agoHow so? Never heard this perspective. Is it substantially more than reflection?
- sscaryterry 2mo agohttps://developer.mozilla.org/en-US/docs/Web/Security/Attacks/Prototype_pollution https://developer.mozilla.org/en-US/docs/Web/Security/Attack...
- ramesh31 2mo ago>Btw, almost all of Javascript's good parts come from Smalltalk. Like what, exactly? I'm genuinely curious. There is no root object or message passing in JS, and the OO aspects are only incidentally bolted on (classes don't actually exist, prototypal inheritance was an afterthought), named params are newer sugar, and polymorphism is a struggle due to all of the above. I've always thought of JS as what Crockford himself said: "a Lisp in C's clothing".
- tl 2mo agoIgnore the syntax for a moment. Minus Javascript, HTML + CSS is a green screen terminal with better fonts and image support. Message passing (fetch, XMLHttpRequest, polling, streaming, etc...) is how you build something that feels like a real tool out a system where the sandbox gets in the way of everything you want to hold locally.
- deleted 2mo ago[deleted]
- tvink 2mo agoA big influence for modern js is chained enumeration, like forEach
- Smalltalker-80 2mo agoI agree, but JS has evolved so far, that when using TypeScript, you can mostly ignore the underlying mismatch.
- kitd 2mo agoFor 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.
- packetlost 2mo agoThere are Lisps with similar semantics. It faded (further) out of popularity for a number of reasons, but it still has its niche.
- Quitschquat 2mo agoWhich Lisps were those? I'm kinda interested in this space.
- mike_ivanov 2mo agoAll Common Lisps can do that, though it is not a part of the standard. See e.g. (sb-ext:save-lisp-and-die)
- packetlost 2mo agoCL and Janet both come to mind as supporting image-based deployment.
- jlokier 2mo agoIt's not widely known, but GNU Emacs works like this. When you launch the Emacs editor, you're loading an Emacs Lisp image that was populated at build time by running Lisp code, with the resident Lisp definitions "dumped" to make an image file. The image file used to actually be the `emacs` executable you'd run, using a clever but non-portable mechanism called `unexec` to make an executable. But as of version 27.1 (in 2020), the image file is separate from the executable for portability reasons.
- vincent-manis 2mo agoThere are a number of image-based Scheme systems. Chibi Scheme and Chez Scheme come to mind. In both, you can save an image and reload it at a later time, though for very good reasons, most people start each session with a fresh copy of the default image.
- uncircle 2mo agoLisp, 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.
- tvink 2mo agoWouldn't you just do elixir now? It's like erlang but even wilder. I think smalltalk and erlang are so interesting because they model the idea of small computers so differently. Lisp just feels like the purest way to understand what the units of a programming language really is.
- ux266478 2mo agoFor 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.
- uncircle 2mo agoThe similarity of Ruby and Elixir is only extremely superficial and betrays your lack of familiarity with the language.
- deleted 2mo ago[deleted]
- ux266478 2mo agoI 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.
- WillAdams 2mo agoI would give a lot for a version of Squeak which could instantiate standard GUI controls and easily compile to a stand-alone binary or HTML page w/ included JavaScript.
- Qem 2mo agoThis looks like Gilad Bracha's Newspeak: https://en.wikipedia.org/wiki/Newspeak_(programming_language) https://en.wikipedia.org/wiki/Newspeak_(programming_language...
- Smalltalker-80 2mo agoSmallJS (https://small-js.org https://small-js.org) does what you want mostly. In the sense that a standalone desktop app can be made with NW.js.
- pasc1878 2mo agoFor the HTML/JS side see https://amber-lang.net https://amber-lang.net but not updated for a few years
- mpweiher 2mo agoObjective-Smalltalk with Interscript. https://objective.st https://objective.st It ain't a version of Squeak, though.
- throwatdem12311 2mo agoAs 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 https://youtu.be/HOuZyOKa91o
- Fervicus 2mo agoThanks for sharing. This piqued my interest.
- bowsamic 2mo agoThe main thing you’ll learn is that actually the static and inflexible abstractions of an operating system do a lot to protect the system integrity and prevent everything from blowing up. Many smalltalk VMs rely on recovery features for a reason
- codesnik 2mo agorecovery features? how do they work? and what smalltalk runtime do you have in mind? I still have a very vague understanding on how changes could be applied to a production running images, or if there is one and preferable way to do that.
- igouy 2mo agoFor example: https://drcuis.github.io/TheCuisBook/The-Change-Log.html https://drcuis.github.io/TheCuisBook/The-Change-Log.html
- rahoulb 2mo agoI didn't understand programming at all until I read about (not even tried) Smalltalk. And it's because of Smalltalk I write Ruby today. My favourite thing about it is the lack of "reserved words" - just a handful of punctuation marks. It's incredibly pure - almost all of the syntax is "send this message to this object".
- gosukiwi 2mo agoI learned about Smalltalk from Ruby, because DHH recommended a book about Smalltalk back in the day. I really enjoy Smalltalk-style OOP, but at the same time it can be so different to Java enterprise OOP with all its patterns. Nowadays I write a lot of TypeScript and prefer having a type system (especially for agentic coding), but Ruby is one of my favorite languages to write myself :)
- lilbigdoot 2mo agoI thought JS had a lot of Scheme inspiration?
- Jtsummers 2mo agoScheme and Self were both major influences, along with Java's syntax (by fiat). https://dl.acm.org/doi/10.1145/3386327 https://dl.acm.org/doi/10.1145/3386327
- sebastianconcpt 2mo agoAnd some months ago I was flirting with the idea of "Smalltalk and Erlang had a baby" and have Smalltalk syntax to an actor environment ran by a Erlang VM style. Plus some insanely cool ideas about a causal debugger for distributed bugs. The problem is that as beautiful as programing in that sound, we're not even coding anymore, AIs will take the fun of it. Although, thinking long term and for understendabilitymaxxin and reliabilitymaxxin it might still be worth having something like that. Since Smalltalk can be so close to english and Erlang VM so reliable, humans and LLMs should thrive on it.
- gliall_err 2mo agoMetalworking, lathes, precision tooling, are all way more valuable skills and tools today than they ever were before the industrial revolution. I suspect that over time a good grasp of fundamentals and great tooling will only get more valuable in software as well as automation expands, in whichever form. Automation expands the demand for skills. It can never diminish it. Required variety indicates that complexity doesn't go away with automation, and at some level someone will have to understand and make decisions about complex issues. You can't automate all the way down. Or, put another way, everything is already automated all the way down. The expansion of automation as we perceive it is merely the growth of complexity over new dimensions. Or put a third way: automation means two different things: constraint and liberty. The confusion arising from not discerning which one is in force makes it seems like one can grow unbounded. Liberty requires constraint and vice versa.
- jonjacky 2mo agoI was flirting with the idea ... Plus some insanely cool ideas ... The problem is that as beautiful as programing in that sound, we're not even coding anymore, AIs will take the fun of it. We've come to this. The mere existence of AI is discouraging people from pursuing creative ideas. This is a catastrophe! It's not just taking the fun out of life, it's destroying alternative futures we might have built. There is this advice for dealing with tyrants and would-be tyrants: "Do not obey in advance." In your case that means pursuing and implementing your exciting ideas. ... it might still be worth having something like that. Yes! Good luck with it!
- kar1181 2mo agoIf you think of it as message oriented it makes so much more sense.
- vanderZwan 2mo ago> Btw, almost all of Javascript's good parts come from Smalltalk. That's E and Self erasure.
- CobrastanJorji 2mo agoGeorgia Tech in the Mark Guzdial days?
- Jtsummers 2mo agoThat was going to be my guess, too. Looking through some syllabi over the years it looks like they used Scala for it for a while and Python, more recently.
- mrexroad 2mo agoI was about to make the same comment. Squeak and Scheme were mind expanding points of curriculum for me. I still remember writing a Ga Tech themed version of The Sims in Squeak. I felt omnipotent being able to inspect or modify any object while debugging the game mechanics engine I’d written; that was a fun project.
- brap 2mo agoI also had Squeak in my curriculum! From what I remember it had a unique object hierarchy or something like
- atemerev 2mo agoAnd after all these years, still no fixes for high-DPI displays. The UI is still pixely and slow. Perhaps I should take Fable and try myself, this was the only bug I cared about and it is not solved after 10 years at least.
- sswezey 2mo agoSame, I've been tracking this and Pharo for high-DPI fixes. Pharo is working on a new graphics stack that is intended to address this as well, but until then no high-DPI support.
- mparrett 2mo agoI see some movement on high-DPI in the latest release. What are the current gaps? I'm not familiar with the project, just curious. > Improves high-DPI support for buttons, scroll panes, sliders, menus, multi-selection lists, trees, drop-shadows, the scratch pad, the keyboard exerciser, and others. https://squeak.org/release_notes/6.1/#:~:text=and%20dialog%20windows.-,Improves%20high%2DDPI%20support,-for%20buttons%2C%20scroll https://squeak.org/release_notes/6.1/#:~:text=and%20dialog%2...
- sswezey 2mo agoI opened the Squeak image on my Mac, and everything looks good that I checked.
- sczi 2mo agoDoes Glamorous Toolkit work for you? It's pharo with a different rust based GUI stack, and some batteries included for making custom inspector views and such. I don't have a high DPI display so I'm not completely confident, but my understanding is that their rust based GUI works fine with high DPI.
- AdmiralAsshat 2mo agoThe UI has been a huge impediment in my getting into Squeak development. Every couple years I decide I will try it again, and then see that very little has changed. It's a shame. Smalltalk/Squeak/Pharo was supposed to be the future, but it feels like an IDE stuck in the 90's.
- davexunit 2mo agoWhat 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.
- hns86vq0nb 2mo ago[dead]
- brabel 2mo agoHow does this compare to Glamorous Toolkit[1]? [1] https://gtoolkit.com/ https://gtoolkit.com/
- ioasuncvinvaer 2mo agoIt's not about AI
- brabel 2mo agoAre you joking? GTK is not about AI either (though yeah they put LLMs in it if you want), it's another Smalltalk environment.
- flowardnut 2mo agoi mean look at the site linked. It's beating you over the head with AI immediately
- brabel 2mo agoThey did turn the AI marketing dial way up on the landing page, but you should give the project a chance if you haven't seen it - it's by far the most modern Smalltalk browser and super fun to use. I only stopped using it on my random data explorations and for-fun coding sessions because it was quite heavy in RAM usage and I wanted something lighter (settled on good old emacs).
- efficax 2mo agoGlamorous Toolkit is built on Pharo, which I think is a fork of Squeak or shares lineage with it.
- scotty79 2mo agoWhat do you use it for?
- brabel 2mo ago
- Decabytes 2mo agoone thing I love about Smalltalk is being able to inspect the code as it's running. Especially from the GUI. You can just be like Oh I wonder where the code for this button is from, inspect it, and it takes you right to the code. It's a shame we can't have this level of introspection without negative performance implications.
- eitland 2mo agoWe could in Java Swing (and Visual basic, but lets not talk about that) as well. Well, not runtime, but we could design applications and just right click on the objects in the IDE and go directly to the click (or double click or right click) handlers. Then again, not having to disable this for runtime is a feature if you ask me. Yes, current web applications are prettier and easier to upgrade but we lost a lot on the way wrt developer experience and ux.
- broswell 2mo agoI 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!
- goodthink 2mo agoHelp/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 https://github.com/codefrau/SqueakJS
- KitN 2mo ago[flagged]
- taolson 2mo agoCongrats to the Squeak 6.1 team! I was an early contributor to Squeak from when Alan Kay's group was at Apple (I see that SameGame, the first game implemented in Morphic is still in the image), and still enjoy following the progress of Squeak and all of its spinoffs.
- mannycalavera42 2mo agoMore stories please! :)
- mikeegg1 2mo agoI remember enjoying Smalltalk.
- tailrecursion 2mo agoSmalltalk's been enormously influential and successful... There is however a better way of understanding objects. Namely, "objects" are [defined to be] processes, "messages" are asynchronous, and Smalltalk's message invocations are indirect function calls. I know what you're thinking: "But no OO PL works like that. You won't understand anything that way." That's true: this suggested reframing won't help you understand any popular OO language, because they use indirect function calls instead of asynchronous message passing. The indirect function calls of Smalltalk don't transform the semantics of programming. It's still data structures and algorithms. You can, if you adopt Kay's ideas wholesale, write programs where individual letters in a text typeset themselves (as Kay describes). I'm arguing that that model of programming is more accurately articulated in an async message passing frame. Smalltalk's function calls do have an important benefit, which is polysemy. I'm stealing that word and not using it quite right. The benefit is you can define ideas that are not algorithmic. You can for instance define many methods for LOOKUP(key,table) that works for many data structures, and now you've defined not a recipe, but an idea that transcends recipes. Any recipe R that uses LOOKUP automatically works with all the data structures that LOOKUP works with, even though R itself may be a specific recipe for a specific data structure of its own. That's a tremendous benefit, and it's worth using OO features to take advantage. But even so you're still living in an algorithms and data structures world. Polysemy is a linguistic feature and does not cause a mechanical or paradigmatic change. Asynchronous messaging however does change how algorithms are designed, in much the way that Alan Kay anticipated, and also in a way that models real world entities in direct fashion. But everyone understands this part already. So how is this a "better" way of thinking about objects? 1) It emphasizes the advantage of polysemy, which in my experience OO pedagogy tends to overlook, even though most everyone utilizes OO partly for that purpose; 2) It explains why OO programs remain organized as algorithms and data structures; and 3) it welcomes combining "object" techniques with A & DS techniques in the same program or function or even the same line of code. They are completely compatible, in the sense that the language or library or database is not "OO" or "non-OO".
- andrekandre 2mo ago> Any recipe R that uses LOOKUP automatically works with all the data structures that LOOKUP works with, even though R itself may be a specific recipe for a specific data structure of its own. this seems similar to protocol extensions + associated types as used in swift maybe? https://docs.swift.org/swift-book/documentation/the-swift-programming-language/protocols/ https://docs.swift.org/swift-book/documentation/the-swift-pr...
- tzs 2mo agoI've been tempted to learn this so I could port my Pips solver to it, solely because PipSqueak would be a good name.
- mark_l_watson 2mo agoI used to love using Squeak but moved to Pharo to get better high resolution display support. I should try the Squeak 6.1 release.
- pkphilip 2mo agoCan someone give me some advice on what to use as a beginner? Pharo? Squeak? Common Lisp? I just want to understand how this whole thing works and see how I can use it.