Estou lendo o "The Algorithm Design Manual", de Steven Skiena, e em uma de suas histórias de guerra na página 155, ele afirma:
A eficiência é um grande desafio no Mathematica, devido ao seu modelo aplicacional de computação (não suporta operações de gravação em tempo constante para matrizes) e a sobrecarga de interpretação (em oposição à compilação).
Já li o SICP, por isso estou familiarizado com a diferença entre as linguagens de ordem normal e de aplicativo (ou seja, que as linguagens de ordem normal atrasam a avaliação dos argumentos do procedimento até que sejam necessárias, enquanto as linguagens de ordem do aplicativo as avaliam assim que o procedimento é chamado). Mas a frase de Skiena acima parece vincular a idéia de linguagens de ordem aplicativa à idéia de gravações em matriz com tempo pior que constante. Não me lembro de Abelson e Sussman mencionando isso em seu texto, então isso foi uma surpresa.
Se verdadeiro, quais são as razões subjacentes às quais as linguagens de ordem do aplicativo não gravam em matrizes em tempo constante? Por que a ordem da avaliação importa na determinação do tempo de gravação da matriz?
Também estou curioso para saber qual é o desempenho de gravação do Big-O nesse caso, mas imagino que isso depende da implementação da linguagem, então vou pular essa pergunta, a menos que haja uma resposta definitiva.