Self语言,是一种基于原型的
面向对象程序设计语言,于
1986年由施乐帕洛阿尔托研究中心的David Ungar和Randy Smith给出了最初的设计。
在发展Self的过程中,Self的设计研究人员也探索了Self的程序设计。他们提出了
traits的概念,用
对象实现了名字(对象名或
方法名)的管理,用动态继承实现模式转换。
尽管Self系统一次
运行在一个
进程中,但Self系统实际上可以分成两个部分:Self
虚拟机和Self世界(Self world)。Self世界是一个Self
对象库,Self
程序就是Self世界里的对象,Self
虚拟机用来执行这些Self程序。Self
虚拟机还提供了一些可供调用的
原语,用来实现
算术运算、
对象复制、
输入输出等。
当Self
程序从终端、
文件或者
图形用户界面输入到系统中来时,Self系统把
源程序解析转化为Self
对象。Self对象包括
数据对象和
方法对象,方法对象的代码部分是用一种指令非常简单的
字节码(bytecode)表示的,字节码由
虚拟机来解释。对经常执行的
方法,
虚拟机将进一步把字节码转化为本机代码,这样可以提高运行效率。
Self语言的最初设计是由David Ungar和Randy Smith于
1986年在施乐帕洛阿托研究中心提出的,并在
1987年的
OOPSLA'87的论文SELF: The Power of Simplicity上给出了描述。
1987年初Craig Chambers, Elgin Lee 和 Martin Rinard在Smalltalk 上给出了Self的第一个实验性
解释器。
1987年夏Self
项目在Stanford大学正式开始,
1988年夏给出了第一个有效率的实现,并发布了1.0和1.1两个
版本。在第一个
版本中包括内存管理系统和
编译器。
1991年初Self
项目移至Sun Microsystems Laboratories Inc. ,并且在1992年发布了2.0版。在第二个
版本中采用了新的
编译技术,并引入了
多重继承。
1995年7月Self 4.0版发布。在这个版本中包括了一个全新的图形用户环境Morphic,提供了工具transporter用于保存
对象,改进了
虚拟机,改善了内存管理,在环境的层次上引入了
模块的概念,取消了语言层次上的可见性概念。
1995年之后Self的发展基本已经停滞,但在发展Self过程中探索出的一些技术在别的系统中得到了应用。在Self的实现中采用的各种编译优化技术直接导致了Java Hotspot虚拟机的产生;在 Smalltalk的一个实现
Squeak中采用了Self
图形用户界面Morphic的设计方案,放弃了标准 Smalltalk中采用的
MVC的方案。