Smalltalk [L1 ] is a pure object environment and programming language. Read the link to learn more.
Smalltalk is the oldest mature pure object-oriented language. It is brilliant, simple, and has only a few keywords. It is similar to Tcl in that the control structures are not part of language.
Almost all good things known in new hype-languages come from Smalltalk. That is
Smalltalk has also well designed standard libraries (Collections, Process Control, I/O).
Squeak [L2 ] is a popular Smalltalk implementation with an active community, and several interesting features. If you want to play with Smalltalk, Squeak is a good start. - TP, whose first OO language was Smalltalk.
Why is not Smalltalk the first most popular object-oriented program language? The reasons could be:
XOTcl is an object-oriented extension for Tcl that has some characteristics from Smalltalk. It is also dynamic and has metaclasses and also have the same feeling. XOTclIDE provide Smalltalk-like IDE (Squeak, Version Control as in Envy)
Talking of syntax, here's a snippet from [L4 ] - 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')
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 method3