I admit that all this is not 100% tested, but since Closer-MOP is not yet updated, I believe I have the freedom to push the MOP stuff a bit further. My goal is to make closer-ecl.lisp a two-line file, as in SBCL, and provide a complete set of patches for that.
The boot process in ECL is changed. It is simpler and now hopefully also easier to maintain, following this line:
- The class hierarchy is stored in a separate file: all classes together with their interdependencies and slot definitions.
- All classes are created together in boot.lsp
- All direct and effective slot definitions are now instances. Formerly they were lists at boot time and had to be fixed.
- All slot accessors are created shortly after boot.lsp, directly as methods. No need for a second pass redefining accessors, which are all generic functions, but this phase has yet to be optimized.
- slot-value and friends now include specializations for standard/funcallable/structure classes. This relies on the restriction that users who want to override slot-value-using-classes must do it with their own metaclasses.
The idea is that ECL now has all classes almost from the very beginning and there is no need for a "fixup" phase. All slot accessors are also now generic functions, except for slot-definition-* This is a minor technicality that I expect to fix soon. I also expect that further optimizations be possible.
This set of patches also solves the problem by which certain slot accessors would be replaced with direct calls to their standard-class specializations.