Self 是1980年代末由施乐帕克与斯坦福大学研发的面向对象语言,以基于原型(而非类)的对象模型闻名。它在即时编译等虚拟机技术上的突破,深刻影响了 Java 与 JavaScript 引擎。

| 设计者 | 昂加尔、史密斯 |
| 诞生年份 | 1987年 |
| 对象模型 | 基于原型 |
| 类型系统 | 动态 |
| 技术影响 | Java HotSpot、JavaScript |
Self 是一种基于原型的、纯面向对象的动态编程语言,由大卫·昂加尔(David Ungar)和兰德尔·史密斯(Randall Smith)于1986年在施乐帕克研究中心开始设计,后在斯坦福大学和 Sun 公司继续发展。它是 Smalltalk 的思想延续,却用原型取代了类,成为原型式面向对象的开创者之一。
在 Self 中没有类的概念,一切皆对象,新对象通过复制(克隆)已有对象并修改而来。对象由一组带名字的槽(slot)组成,槽既可存放数据也可存放方法,继承通过指向父对象的槽实现。这种统一而灵活的模型极大简化了语言的概念,也带来了独特的表达能力。为让如此动态的语言跑得够快,Self 团队发明了包括自适应即时编译、多态内联缓存在内的一系列虚拟机优化技术。
Self 本身多用于研究,但其技术遗产极为深远。为 Self 开发的自适应即时编译与垃圾回收技术,被昂加尔团队带入 Sun 公司,直接催生了高性能的 Java HotSpot 虚拟机。JavaScript 的原型继承模型也明显受到 Self 的启发。因此,尽管 Self 从未成为主流应用语言,它在现代动态语言运行时和面向对象设计史上占据关键地位。
问:Self 和 JavaScript 有什么联系?答:JavaScript 的原型式继承直接受 Self 启发,两者都不用类而靠对象克隆或原型链实现继承。
问:Self 对 Java 有贡献吗?答:有。Self 团队发明的自适应即时编译等虚拟机技术被带入 Sun,成为 Java HotSpot 虚拟机高性能的技术基础。

| 设计者 | 昂加尔、史密斯 |
| 诞生年份 | 1987年 |
| 对象模型 | 基于原型 |
| 类型系统 | 动态 |
| 技术影响 | Java HotSpot、JavaScript |
登录 后参与讨论
暂无讨论,来发表第一条评论吧