Dans le livre d'Andrew W. Appel, Modern Compiler Implementation in ML , il dit au chapitre 17 que la théorie de la calculabilité montre qu'il sera toujours possible d'inventer de nouvelles transformations d'optimisation et procède pour prouver qu'un compilateur entièrement optimisé résoudra le problème d'arrêt: un programme Q qui ne produit aucune sortie et ne s'arrête jamais peut facilement être remplacé par sa représentation optimale, Opt (Q) , étant "L: goto L". Un compilateur entièrement optimisé peut donc résoudre le problème d'arrêt.
Ma question est donc la suivante: existe- t-il un compilateur entièrement optimisé pour terminer les programmes? Mes seules pensées sont les suivantes: même si un programme est garanti de se terminer, il peut toujours être arbitrairement complexe, et pour tout compilateur d'optimisation concret, C, on pourrait peut-être construire un programme qui prend C en entrée et produit en quelque sorte un programme pire que une sorte de cas d'angle.
En outre, quelles sont les implications de se limiter à mettre fin aux programmes?
la source
Réponses:
Je suppose que vous êtes intéressé par l'optimisation de l'exécution. Comme je l'ai écrit dans mon commentaire, cela ne précise pas suffisamment l'objectif: une optimisation réduit-elle le temps d'exécution sur n'importe quelle entrée, chaque entrée, toutes les entrées du pire des cas ou même en moyenne ?
Je montrerai que tous sont impossibles. La preuve s'étend à l'optimisation de la durée du programme.
Rappelez-vous que le problème suivant n'est pas calculable:
Notez en outre que, étant donné une grammaire sans contexte , nous pouvons coder en dur, disons, l'algorithme CYK pour cette grammaire; désigner cet algorithme en C Y K G . On observe que C Y K G se termine pour toutes les entrées (à partir de Σ ∗ ).g C Y Kg C Y Kg Σ∗
Supposons maintenant qu'il existe un optimiseur qui, étant donné un algorithme A toujours terminé , génère un algorithme équivalent au résultat qui est optimal par rapport à l'exécution. Clairement,Opter UNE
et nous avons donc construit un décideur pour un problème non calculable, contredisant l'hypothèse.
la source