Vi använder flera steg programmering, monader och Ocamls avancerade modulsystem för att visa hur man eliminerar all abstraction overhead från generiska program samtidigt som man undviker någon inspektion av den resulterande koden. Vi demonstrerar detta tydligt med Gaussian Elimination som en representativ familj av symboliska och numeriska algoritmer. Vi parameteriserar vår kod i stor utsträckning -över domän, ingång och permutationsmatris representationer, determinant och rank spårning, pivoting policys, resultattyper, etc. - till ingen kostnad. Eftersom den resulterande koden genereras precis rätt och inte ändras efteråt, MetaOCaml garanterar att den genererade koden är väl-typad. Vi visar vidare att olika abstraktion parametrar (aspekter) kan göras ortogonala och kompositionella, även i närvaro av namngeneration för temporarier, och "interleaving" av aspekter. Vi visar också hur man kodar vissa domänspecifika kunskaper så att "tydligt fel" kompositioner kan förkastas vid eller före generationstid, snarare än under sammanställning eller körning av den genererade koden.
Carette och Kiselyov REF tillämpar teknikerna i samband med homogen metaprogrammering för att eliminera abstraction overhead från generisk kod.
Multi-stage programming with functors and monads: eliminating abstraction overhead from generic code
{'venue': None, 'journal': None, 'mag_field_of_study': ['Computer Science']}