O Design Inteligente e as Falhas do std::adjacent_difference do C++
Este artigo investiga a filosofia de design do algoritmo `std::adjacent_difference` na biblioteca padrão do C++. Este algoritmo calcula as diferenças entre elementos adjacentes de uma sequência de entrada, copiando o primeiro elemento para a saída. Embora este design garanta simetria com `std::partial_sum`, espelhando a diferenciação e integração no cálculo, ele também limita sua genericidade, pois a diferença entre elementos de um tipo arbitrário pode ter um tipo diferente. O artigo traça ainda paralelos com derivadas e integrais no cálculo, explicando a razão de ser do algoritmo e contrastando-o com a função `deltas` mais flexível do Q. A conclusão é que, embora a intenção original de Stepanov fosse sólida, o algoritmo carece de genericidade; o `pairwise_transform` do C++23 oferece uma alternativa mais flexível.
Leia mais