知识卡片

把一切都变成对象——连"类"和"正在执行的代码"本身都不例外

专业/工作

内容

大多数面向对象语言里,整数这类基础类型是”原生类型”,不能被子类化、不能像普通对象一样被查询和扩展。Smalltalk把这条边界彻底打破:整数是对象、类本身是对象、方法是对象、甚至”正在执行的这个方法调用”这个执行上下文本身也是对象。这种彻底的一致性带来的不是性能优势,而是概念上的可预测性和反射能力:既然类也是对象,那么”根据一个名字动态查找并实例化一个类”就只是给一个字典对象发消息这么简单的操作,而不需要一套专门的反射API。这和[[把一切都表示成同一种缓冲区让任何命令输出都能成为输入]]的思路是一致的——当”东西种类越少、规则越统一”,系统能自然组合出的能力就越多,边界情况也就越少。

参考来源

《架构之美》第14章《重读经典》