Viele übliche Operationen sind Monoide . Haskell hat diese Beobachtung genutzt, um viele Funktionen höherer Ordnung allgemeiner zu gestalten ( Foldable
ein Beispiel).
Es gibt eine offensichtliche Möglichkeit, mit Monoiden die Leistung zu verbessern: Die Programmierer behaupten die Assoziativität der Operation, sodass Operationen parallelisiert werden können.
Ich bin gespannt, ob es noch andere Möglichkeiten gibt, wie ein Compiler den Code optimieren kann, da er weiß, dass es sich um ein Monoid handelt.
optimization
compilers
category-theory
Xodarap
quelle
quelle
Antworten:
Der Compiler kann die Exponentiation mit Monoiden optimieren. Lassen⊕ ein binärer Operator sein, der in konstanter Zeit so berechnet werden kann, dass ⊕ und a1,a2,...∈A bilden ein Monoid. Dann die Operation
was normalerweise dauertO(n) Die Zeit kann nur mit dem Quadrat- und Multiplikationsalgorithmus ausgewertet werden O(logn) Zeit, wenn der Compiler das weiß ⊕ gehorcht den monoiden Gesetzen.
quelle
Wenn Sie sich im Schritt der konstanten Faltung / konstanten Ausbreitung befinden, können Sie die Identität des Monoids immer dann ignorieren, wenn Sie andere nicht konstante Ausdrücke multiplizieren.
quelle