Muitas operações comuns são monoides . Haskell aproveitou essa observação para tornar muitas funções de ordem superior mais genéricas ( Foldable
sendo um exemplo).
Existe uma maneira óbvia de usar monoides para melhorar o desempenho: os programadores estão afirmando a associatividade da operação e, portanto, as operações podem ser paralelizadas.
Estou curioso para saber se existem outras maneiras de um compilador otimizar o código, sabendo que estamos lidando com um monóide.
optimization
compilers
category-theory
Xodarap
fonte
fonte
Respostas:
O compilador pode otimizar a exponenciação com monoides. Deixei⊕ ser um operador binário calculável em tempo constante, de modo que ⊕ e uma1 1,uma2, . . . ∈ A formar um monóide. Então a operação
o que geralmente levaO ( n ) o tempo pode ser avaliado com o quadrado e o algoritmo de multiplicação em apenas O ( logn ) tempo, se o compilador sabe que ⊕ obedece às leis monóides.
fonte
Se você estiver na etapa de dobragem constante / propagação constante, sempre que tiver a identidade do monóide, poderá ignorá-lo se estiver multiplicando outras expressões não constantes.
fonte