It is in the history of the programming language Smalltalk, that it was meant to usher in a new era of computing.
This era would be built on several basic principles. The first one is that you would have no real separation between source code in some text editor, and the running program—a prophecy that has yet to come to pass. All the rest of us rely on shooting a misbehaving program in the head and birthing a similar child with slightly altered DNA to replace it... Smalltalk expects you to have a conversation with the program as it runs: the whole programming language is instrumented with reflection, and every module is hot reloadable. There is literally a method, Object.become, “OK computer, take all of the references anyone has pointing to that other object and point them to me, I will be taking over for it.” Bold.
A second conceit is that the new way to be a programmer, the new metaphor, is not one of traditional authoritarianism—think in particular of remote procedure calls. But the new metaphor will be biological: a module will peek around its environment, maintain a “homeostasis” of inner state consistency, the system as a whole will be tolerant of intra-module logical inconsistency, while the individual cells will just die if they cannot maintain consistent state, cells live, cells die, cells organize into larger tissues and organelles and organs in order to find their greater purpose.
A third great principle is fractal architecture, the idea that the parts should contain the essence of the whole. So in functional programming you might build a computer program out of parts that are not computer programs. But Smalltalk wants to say, no: every computer program in this language will be constructed out of units that are fully fledged computers in their own right, running one or many computer programs. And so there is no need for all of these computers to be on the exact same host machine, of course they can be because a computer can pretend to be multiple computers by task scheduling, but it is not necessary.
Related to that, there is a vast skepticism towards locking and atomicity. Implement virtual time, or leverage the full power of the actor model... Those are preferable.
This era would be built on several basic principles. The first one is that you would have no real separation between source code in some text editor, and the running program—a prophecy that has yet to come to pass. All the rest of us rely on shooting a misbehaving program in the head and birthing a similar child with slightly altered DNA to replace it... Smalltalk expects you to have a conversation with the program as it runs: the whole programming language is instrumented with reflection, and every module is hot reloadable. There is literally a method, Object.become, “OK computer, take all of the references anyone has pointing to that other object and point them to me, I will be taking over for it.” Bold.
A second conceit is that the new way to be a programmer, the new metaphor, is not one of traditional authoritarianism—think in particular of remote procedure calls. But the new metaphor will be biological: a module will peek around its environment, maintain a “homeostasis” of inner state consistency, the system as a whole will be tolerant of intra-module logical inconsistency, while the individual cells will just die if they cannot maintain consistent state, cells live, cells die, cells organize into larger tissues and organelles and organs in order to find their greater purpose.
A third great principle is fractal architecture, the idea that the parts should contain the essence of the whole. So in functional programming you might build a computer program out of parts that are not computer programs. But Smalltalk wants to say, no: every computer program in this language will be constructed out of units that are fully fledged computers in their own right, running one or many computer programs. And so there is no need for all of these computers to be on the exact same host machine, of course they can be because a computer can pretend to be multiple computers by task scheduling, but it is not necessary.
Related to that, there is a vast skepticism towards locking and atomicity. Implement virtual time, or leverage the full power of the actor model... Those are preferable.