Controlling the C3 Super Class Linearization Algorithm for Large Hierarchies of Classes - Laboratoire Interdisciplinaire des Sciences du Numérique Accéder directement au contenu
Article Dans Une Revue Order Année : 2022

Controlling the C3 Super Class Linearization Algorithm for Large Hierarchies of Classes

Résumé

C3 is an algorithm used by several widely used programming languages such as Python to support multiple inheritance in object oriented programming (OOP): for each class, C3 computes recursively a linear extension of the poset of all its super classes (the Method Resolution Order, MRO) from user-provided local information (an ordering of the direct super classes). This algorithm can fail if the local information is not consistent. For large hierarchies of classes, as encountered when modeling hierarchies of concepts from abstract algebra in the SageMath computational system, maintaining consistent local information by hand does not scale and leads to unpredictable C3 failures. This paper reports on the authors' work to analyze and circumvent this maintenance nightmare. First, we discovered through extensive computer exploration that there exists posets admitting no consistent local information; we exhibit the smallest one which has 10 elements. Then, we provide and analyze an algorithm that, given a poset and a linear extension, automatically builds local information for C3 in such a way that guarantees that it will never fail, at the price of a slight relaxation of the hypotheses. This algorithm has been used in production in SageMath since 2013.

Dates et versions

hal-04414603 , version 1 (24-01-2024)

Licence

Paternité - Partage selon les Conditions Initiales

Identifiants

Citer

Florent Hivert, Nicolas M. Thiéry. Controlling the C3 Super Class Linearization Algorithm for Large Hierarchies of Classes. Order, 2022, ⟨10.1007/s11083-022-09607-5⟩. ⟨hal-04414603⟩
14 Consultations
0 Téléchargements

Altmetric

Partager

Gmail Facebook X LinkedIn More