It had significant influence on the development of the personal computer. Projects at Apple (Lisa/Mac) and Microsoft (Windows) were influenced by the Smalltalk GUI and Smalltalk was also the basis for Objective C, the language behind the NeXT/MacOS/iOS UI frameworks - now on the way to be supplanted by Swift.
More details, as usual, on Wikipedia: https://en.wikipedia.org/wiki/Smalltalk
Seeing also Pascal, Modula, Forth, Prolog... The 70's were an innovative era for programming languages. https://en.wikipedia.org/wiki/Timeline_of_programming_langua...
So the first thing a machine would do on boot would be to load the right microcode into the CPU, and then those bytecodes were effectively the Assembly language for the CPU.
They were also the genesis of the first JIT compilers, and the OpenJDK Hotspot traces back its heritage to StrongTalk JIT compiler.
I'm curious was it used as a standalone OO language outside of GUI development as well or was its primary focus for building graphical UIs?
One example is NXTalk, a Smalltalk system (with its own VM implementation that differs from Smalltalk-80) developed in Robert Hirschfeld's research group (hi Michael! :)) at HPI. NXTalk runs on second generation (ARM7-based) Lego Mindstorms robots in 64kB RAM and 256kB Flash:
https://www.hpi.uni-potsdam.de/hirschfeld/projects/nxtalk/in...
There's also a related discussion about Smalltalk use cases at c2.com: https://wiki.c2.com/?WhatsBeenDoneInSmalltalk
> 3 factorial + 4 factorial > between: 10 and: 100
which means:
> 3 receives the message "factorial" and answers 6 > 4 receives the message "factorial" and answers 24 > 6 receives the message "+" with 24 as the argument and answers 30 > 30 receives the message "between:and:" with 10 and 100 as arguments and answers true
Really? How different our interpretations can be, that is incredibly opaque too me. Even reading your explanation I do not understand it.
Horses for courses, I guess
3 factorial + 4 factorial between: 10 and: 100
And the point about it reading like English is that because the syntax relies heavily on their fancy precedence rules you can make complex expressions without needing parentheses I think. It looks like the compiler magically knows what is meant by the expression, but the reality is that you need to be very aware of the grammar to be able to write it. It does look pretty in my opinion, but definitely opaque to someone not aware of the rules. Is 3 factorial plus 4 factorial between 10 and 100? ((3 factorial) + (4 factorial)) between: 10 and: 100.
Otherwise it's just left to right processing: 3 + 4 * 10.
Becomes 70 as a consequence of these rules, the parser is pretty simple.Want to add a method? You send the class a message and pass it a block with the method contents. Want define a class? You send the parent class the subclass message. Want an if statement? You evaluate a Boolean in a block and send it the ifTrue or ifFalse messages.
It means that sometimes it reads a bit strange, but there's a purity to it I love. Plus if you don't like it you can just define your own methods - for example I once did an (unfinished) library for GNU Smalltalk that gave it a more traditional if statement and loop constructs.