控制 C3 超类线性化算法
组合数学
2024-01-24 v1
摘要
C3 是一种被 Python 等多种广泛使用的编程语言所采用的算法,用于支持面向对象编程 (OOP) 中的多重继承:对于每个类,C3 根据用户提供的局部信息(直接超类的排序),递归地计算其所有超类构成的偏序集的一个线性扩充(方法解析顺序,MRO)。若局部信息不一致,该算法可能失败。对于庞大的类层级,如在 SageMath 计算系统中对抽象代数中的概念层级进行建模时所遇到的,手动维护一致的局部信息无法扩展并会导致不可预测的 C3 失败。本文报告了作者为分析和规避这一维护噩梦所做的工作。首先,我们通过广泛的计算机探索发现,存在不承认任何一致局部信息的偏序集;我们展示了其中最小的一个,包含 10 个元素。然后,我们提供并分析了一种算法,给定一个偏序集和一个线性扩充,该算法能自动为 C3 构建局部信息,并保证其永远不会失败,代价是略微放宽假设条件。该算法自 2013 年起已在 SageMath 的生产环境中使用。
引用
@article{arxiv.2401.12740,
title = {Controlling the C3 super class linearization algorithm},
author = {Florent Hivert and Nicolas M. Thiéry},
journal= {arXiv preprint arXiv:2401.12740},
year = {2024}
}
备注
15 pages