一个对象如何成为一个类lisp

jak*_*ter 0 oop inheritance metaprogramming common-lisp

我试着想出一个更好的名字,但我不能.此外,每个主题都涉及python,我不知道python

我知道dafult :meta-classstandar-class

standard-object是一个实例,standard-class并且每个类都是一个实例standard-class并且继承了所有内容,standard-object但是这怎么可能呢?同样如何standard-object成为一个对象和一个超类呢?它是如何工作的,为什么?

我不明白的是,一个即时课程怎么也可以成为一个班级?

Dan*_*son 6

考虑它的一种方法是忘记引导是一个问题,并想象对象系统"只是这样"然后看起来很自然:

  • 一切都是对象
  • 每个对象都是一个类的实例
  • 每个(标准)类都是.的子类 standard-object
  • 一个类是一个对象
  • 每个标准类都是一个对象,它是一个实例 standard-class
  • standard-class是一个标准类,它是一个对象,它是一个实例,standard-class其子类standard-object是一个类,它是一个对象,它是一个实例.standard-class

我试过并找不到好的图表.

另一种思考方式是关于自举.你怎么能让上述状态成为现实?

一种方法是你可以创建一个没有类存在的对象:

  1. 确定对象的内存布局
  2. 知道如何standard-class在内存中布置实例,分配将成为类的实例standard-class
  3. 使用正确的东西初始化该实例.将其类设置为自身.不要设置任何超类
  4. 照此分配一个实例,将成为standard-object(与层次,即其他地区class,之类的T,generic-function,method等)
  5. 可以将所有这些对象的类设置为 standard-class
  6. 连接类层次结构关系
  7. 创建用于分配实例和编译泛型函数等的通用函数和方法
  8. 欢迎使用您的新对象系统