- virtual machine
- garbage collector
- reflection (introspection)
- dynamic object system (object can change the class, metaclasses)
- Integrated Development Environment
- for 30 years computers were too slow for virtual machines.
- the first smalltalk systems was too expensive for normal folk.
- smalltalk was too closed (not open) to another systems or languages.
- has no types. Some managers believe that typed languages can save them from ignorance.
- it is too mature for making big money with consulting, i.e., it is on the trailing curve of the hype bandwagon.
- jcw adds another - more technical - reason: deployment can be tricky...
Talking of syntax, here's a snippet from  - double-quoted strings are just comments:
7 "a number" $z "a character" 'colourless ideas sleep furiously' "a string" #(#tom #dick #harry) "an array of 3 components" #(# one 'should shower at least' 3 'times a week')# before a string turns it into a symbol (like quote in LISP); #(...) denotes what we'd call a list. RS can't help finding Tcl simpler, and better-looking...Lars H: Does the # work like / in Postscript? In that language, /tom is just a name whereas tom is a command. Anyhow I agree Tcl looks better. - RS: Yes, #tom is the symbol tom, 'tom' is a string constant, and tom either variable or method/keyword.Let see some sample program to show all main Smalltalk syntax and look and feel.
| myVar myVar2 | " Variable Definition" myVar := SampleClass new. "Create Instance of Class Sample Class. new is simple method call on object SampleClass not special operator Everything is object" myVar setSample: 1. "call method setSample: with one parameter" myVar setSample: 2 with: 3. "call method setSample:with: with two parameters" "method chaning java myVar.getAnotherObjekt().callThisObjectWith(23)" myVar getAnotherObjekt callThisObjectWith: 23. "Now Blocks" myVar isRead ifTrue: [Transcpript show: 'I am Ready'] ifFalse: [Transcript show: 'Not Ready'] "Or somethig like C operator ? : " myVar := myVar isRead ifTrue:  ifFalse: . "Collection" myVar := Array new. "Write Collection on stdout" myVar do: [:each | Transcript show: each printString]. "Blocks are also objects. That can take parameters. see also Ruby language" "Blocks can be used do define new control stuctures or something like handlers" myVar := [:par1 | Transcript show: par1]. "Evalute Block." myVar value: 2. "same as" [:par1 | Transcript show: par1] value: 2 "method cascading" myVar method1; method2; method3 "equal to" myVar method1. myVar method2. myVar method3Yes. It looks strange. It is not like Fortran, C, C++, Java or C#. It is also not like basic, perl, bash, tcl....
Shin The Gin (2007-01-4) - If you are addicted to the convenience of a common Smalltalk environment, give Tcltalk a try! You'll find workspaces and browsers and even logging of changes, all without object orientation.
RS: Could one say that Smalltalk's "blocks with parameters" correspond to Tcl's upcoming apply lambdas (starting from 8.5)?NEM: Yes and no. As I understand it, Smalltalk blocks are full lexical closures, so they are a bit more powerful than Tcl's lambdas. Smalltalk is actually quite a nice functional programming language as well as OO.
RJH - 15th May 2013.Forgive my confusion; but the original author appears to claim that 'garbage collection' originated in smalltalk. I was under the impression that smalltalk originated somewhere around the early 1970s and that garbage collection originated with Mr. McCarthy's LISP in the late 1950s...Have I misunderstood the history - or is the claim that smalltalk originated GC a little overenthusiastic?Thanks, R.