A few years later, I was working at another place (definitely not Parc!) and found a copy of the Smalltalk-76 manual that somebody had left on the Xerox [sic!] machine. I lost no time in copying it, and admiring the amazing thought that had had gone into the language's design.
2) I later worked for Incyte, who leased space next door from Parc around 2002. I smiled whenever I got a meeting invitation at Parc. :)
The great tragedy of our craft is that, despite exponential improvements in other areas of computing, IMO nothing since has really come close.
Anyway... My only real exposure to Smalltalk was via obj-c. That combination of simple languages was truly amazing in terms of its power/complexity ratio.
I'm not doing native iOS dev anymore, but from a distance, it's a little sad for me to see how much of radical departure Swift is from that simplicity...
"LISP" gets its name from "list processor".
"Smalltalk" gets its name from the the fact that the language came from the Learning Research Group at Xerox PARC -- the "small" was thus meant as an acknowledgement of the study that how children learn was crucial to the design of the Smalltalk system, and the "talk" relates to the fact that objects "talk" to one other by messaging.
The graphical debugger, dynamic code loading, bytecodes with microcoded CPU configured on boot, REPL with access to the whole OS, the way OS, libraries and applications blend together, all there across all those language stacks.
> As for hype: Another motive for "smalltalk" was the practice at the time of naming operating, and other, systems (which hardly did anything) after mighty indo-european gods, such as Thor, Zeus, Odin, etc. I figured that if Smalltalk ever did something neat, then people would be pleasantly surprised.
I also read a book from MIT press full of parallels between people asking/answering things to others like in Smalltalk an objets send messages to other objects.
The fascination I had with Smalltalk at first was that I felt suddenly that you could program software in a more humain way of thinking...
First time I got to use it was to put together a live demo for a bid we were working on for a new project. Must have been around 87/88, got a shiny new Dell 286 to run Smalltalk/V, took Dell several goes to find me a VGA card that would work properly on the system.
Last time I used it in anger was at JP Morgan in 2009.
Things like IntelliJ IDEA get you part way these days, but the whole live, interactive environment really was revelatory, only thing close I used was Interlisp on a XEROX 1108.
It's amazing how progress in software engineering has been held back by fashion and entrenched opinions, what people think is trendy and would look good on their CV.
True := False
The system immediately locked up. ln -sf /dev/zero /lib/x86_64-linux-gnu/libc.so.6
will have an analogous effect on an "alive" Unix image. I mean, a Unix machine. :-)Incidentally, in the latest Squeak,
True := False.
doesn't work -- the compiler complains that you can't assign into a read-only variable. So let's try this: Smalltalk at: #True put: False.
But now the metaprogramming system complains you're trying to modify a read-only binding! So we view source on ClassBinding>>value:, and see that a resumable exception is being used to guard the modification, so let's explicitly signal that we REALLY want to modify that binding: [Smalltalk at: #True put: False]
on: AttemptToWriteReadOnlyGlobal
do: [:ex | ex resume: true].
Finally! Now, evaluating "True" yields "False".But the image keeps running! Use of the literal class True seems to be rare enough that things are OK for at least several minutes after the change.
Doing this, however, definitely should immediately torpedo things:
true become: false.
... huh. It didn't work. It used to! Again, on this current Squeak version, we see a different behaviour. This time, it says "Cannot execute #elementsExchangeIdentityWith: on read-only object #(false)".So we'll have to try harder:
true becomeForward: false.
That doesn't work either! Same error as for #become:.Welp, I'm actually all out of ways to crash this modern image in analogous ways to the easy pitfalls of images of yesteryear...
Yikes!
Wouldn't such redefinition make more sense to be isolated in a newly spawned universe? That way the whole system would not collapse yet you could still play with such concepts.
Also after having checked various "modern" Smalltalk implementations I have to sadly say that none come close to the experience of the older ones. Maybe Cincom, but that is proprietary. So the whole language and idea is mostly dead.
"Maybe Cincom, but that is proprietary."
"So the whole language and idea is mostly dead."
made me chuckle.
I won't elaborate much further, we all know why UNIX succeeded and it wasn't exactly out of technical merits.
[1]Terse Squeak guide http://squeak.joyful.com/LanguageNotes
Or the book Pharo by example (https://books.pharo.org/updated-pharo-by-example/)
However, your learning curve will be much easier if you start with a tutorial/reference targeting the dialect you want to work with. Then go back to things like the Blue Book to understand where it all came from and analyze the differences if you're so inclined.
The Seaside web framework used to be a thing, but doesn't appear to be one any more.
My sense is that, as one of those languages that, while still reasonably popular, never really took off as an open source platform, the bulk of Smalltalk work is proprietary work that you don't really get to hear about. I'm hoping Pharo's good work turns that tide a bit; they've done a whole lot of work to address things that hindered the use of Smalltalk in open source projects.
Reportedly it's popular in finance. For example, JP Morgan somewhat famously built a major risk management system in Smalltalk. I've heard plenty of similar intimations, but, considering that, during my stint in the financial industry, I wasn't allowed to talk publicly about any technology that the company considered a competitive advantage (though we were encouraged to name-drop Java as much as we liked), I wouldn't hold my breath for a lot of specifics.
https://franz.com/products/allegro-common-lisp/acl_ide.lhtml
http://www.lispworks.com/products/lispworks.html
And if you happen to use a Mac, https://ccl.clozure.com/docs/ccl.html#the-clozure-cl-ide
As history info, going back to the Smalltalk days, Interlisp-D at Xerox
http://www.softwarepreservation.org/projects/LISP/interlisp_...
Check the paper "The Interlisp programming environment".
i think many of the features that made smalltalk look revolutionary in the eighties are probably common in most modern languages
i am personally not supper impressed with the live ide thing, it feels more like a gimmick than anything else
The closest popular language to it today is probably Ruby, which was directly inspired by it and is similarly dynamic, single-inheritance, class-based, and pervasively object-oriented.
I have given Smalltalk plenty of tries, and always ended giving up due to the lack of polish prevalent on all current implementations:
Pharo looks blurry on my Macbook and is crashing all the time.
Squeak is a bit more stable but feels and runs like a toy.
Cincom is a tad better and has a pretty nice UI designer that is best in class (I would be embarrassed to give a client the ugly non native user interfaces that I see people building in Pharo) but I had the community version (which is not even the latest version) also crash on me a few times and you cannot test it on macOS Catalina / Big Sur.
But without the live IDE thing, you lose many of the great things about Smalltalk.
I spend a lot of time on the Ruby Docs, looking up which methods an object has. "Traditional" IDEs give you type-ahead features, where they perform a code-analysis and then predict what you might want to type. But in Smalltalk I just ask the class how I should be using it and it tells me there and then, even if the class has been modified with methods added or removed or rewritten at run-time.
Autocomplete if good tool support is available everywhere, and some languages have very good dynamic introspection (usable in a repl)
Powershell, Julia, raku .. i think also Ruby and Python also have create introspection, that you can use dynamically in a repl
https://perl6advent.wordpress.com/2015/12/19/day-19-introspe...
So in summary, doesnt repl+introspection+auto completion give the same value
The language itself is surprisingly pleasant to program (even for a professional programmer). The real problem is the lack of data structures (like a dict), so some projects (unfortunately, many my 7yo comes up with) become extremely annoying to program.
Unfortunately, I've never found anything with an IDE that touches what you get in Smalltalk. I've always wanted someone to create an environment for Ruby, Python, or JavaScript that would give us the best of both worlds, depending on what you needed at the time. I remember attempts in the early 2000s, but nothing really touched it.
The only other language with an environment like Smalltalk that I've seen is Self, which is a prototype OOP language derived from Smalltalk, but that's even less popular.