No livro de Andrew W. Appel, Modern Compiler Implementation in ML , ele diz no capítulo 17 que a teoria da Computabilidade mostra que sempre será possível inventar novas transformações de otimização e prossegue para provar que um compilador totalmente otimizado resolverá o problema de parada: Um programa Q que não produz saída e nunca pára pode ser facilmente substituído por sua representação ideal, Opt (Q) , sendo "L: goto L". Portanto, um compilador totalmente otimizado pode resolver o problema de parada.
Portanto, minha pergunta é a seguinte: Existe um compilador totalmente otimizado para finalizar programas? Meus únicos pensamentos são os seguintes: Mesmo que um programa seja garantido para terminar, ele ainda pode ser arbitrariamente complexo e, para qualquer compilador de otimização concreto, C, talvez seja possível construir um programa que tome C como entrada e, de alguma forma, produza um programa pior. algum tipo de caixa de canto.
Além disso, quais são as implicações de nos restringir ao encerramento de programas?
fonte
Respostas:
Presumo que você esteja interessado em otimização do tempo de execução. Como escrevi em meu comentário, isso não especifica suficientemente o objetivo: uma otimização reduz o tempo de execução de qualquer entrada, cada entrada, todas as entradas de pior caso ou até em média ?
Vou mostrar que todos eles são impossíveis. A prova se estende para otimizar a duração do programa.
Lembre-se de que o seguinte problema não é computável:
Observe ainda que, dada uma gramática livre de contexto , podemos codificar, digamos, o algoritmo CYK dessa gramática; denote esse algoritmo por . Observamos que termina para todas as entradas (de ).G C Y KG C Y KG Σ∗
Agora suponha que exista um otimizador que, dado um algoritmo sempre terminador , produza um algoritmo equivalente a resultado que seja ideal em relação ao tempo de execução. Claramente,Optar UMA
e assim construímos uma decisão para um problema incontestável, contradizendo a suposição.
fonte