All Statements About Smalltalk Are False

It is very hard to say true things about Smalltalk because it is reflective. You can change the compiler, change classes, and change methods. For example, every metaclass has a single instance, which is a class. Except that you can hack a bunch of classes to have the same metaclass. People have added MultipleInheritance, StaticTyping, ExceptionHandling, logic programming, and constraints to Smalltalk. So, how can you say that ANYTHING about Smalltalk is false? (This is sort of like NomicGame: you can't make any statements about it either, for the same reason.)

What's an example of changing the Smalltalk compiler?

In VisualWorks Smalltalk, any change you like in packages System-Compiler-Support, System-Compiler-Public Access, or Kernel-Methods, for example.

That's why we love SmalltalkLanguage!

If you include hacking the compiler, it becomes true of every language. I can hack my own CeeLanguage compiler if I want. As it happens, my Smalltalk is DolphinSmalltalk, and its compiler is not written in Smalltalk and the source is not available for hacking.

Arguably by "Smalltalk" we should mean the SmalltalkStandard?, which also does not include a hackable compiler. It also says that redefining certain methods (including common control constructs like #ifTrue:) gives undefined behaviour, so if you do that you no longer are programming in standard Smalltalk.

Under these constraints, Smalltalk is less malleable than, say, CommonLisp, although more so than JavaLanguage.

Bitmapped displays and mice predate the SmalltalkLanguage; they were used in DougEngelbart's NLS System, which was first shown in 1968 in TheMotherOfAllDemos. Smalltalk was the first system to integrate all these concepts in a unified whole. That is not traditionally seen as a language issue, but Smalltalk blurs the distinction between "language" and "not language". Is arithmetic part of the language? In Smalltalk it is just another set of classes. What about control structures for iteration and alternation? Just part of the class library. So, why isn't ModelViewController considered part of the Smalltalk-80 language, too? But it isn't.

Smalltalk is not just a language - sure there is a 'Smalltalk' Language (BackusNaurForm etc.) but a chunk of what is essentially part of the language is defined in the class library. There is an ANSI standard for Smalltalk that most of the vendors aspire to and largely confirm to, but not always. This standard, defining basic language and class constructs, has given the community greater ability to create cross-dialect frameworks, which is good. But an essential aspect of Smalltalk is its environment, both its development environment, which most people consciously see and understand its significance, and--VERY important--its runtime environment. And here the concepts of Virtual Machine, platform portability, virtual image, etc. all play a significant part. Think of it as a Software Delivery Platform written in a specific ProgrammingLanguage which happens to have the same name as the Platform itself. -- JasonAyers

Related: LibraryAndPrimitivesBlurring

All statements about Smalltalk are false, including this one. -- Epimenides


EditText of this page (last edited January 18, 2009) or FindPage with title or text search