Disons que nous avons un programme comme celui-ci:aide-transparence référentielle pré-calcul des valeurs dans haskell
list = [1..10000000]
main = print $ sum list
Je veux que cela soit compilé tel que l'exécutable qu'afficher 50000005000000, sans prendre autant de temps et effort.
Fondamentalement, toute expression qui sera sûrement calculée (peut-être l'analyse de rigidité peut aider ici) peut être précalculée lors de la compilation (par exemple nous utilisons-transparence référentielle dire qu'il n'a pas vraiment d'importance quand on calcule la valeur).
En bref: « doit être calculée » + référentielle transparence = peut être pré-calculé
Ce serait comme l'exécution du programme jusqu'à ce que nous avons touché quelque chose qui dépend de l'entrée (le noyau de le programme, ce qui est commun à toutes les entrées, sera pré-calculé)
Existe-t-il un mécanisme existant pour le faire actuellement (dans Haskell ou dans une autre langue)? [S'il vous plaît ne pointez pas quelque chose comme des modèles en C++ car il n'a pas de transparence référentielle en premier lieu.]
Si non, quel est le problème de ce problème? [Quels sont les problèmes techniques (et théoriques) qui l'accompagnent?]
ce n'était pas un cas d'utilisation :), de toute façon pouvez-vous taper du code car je ne suis pas familier avec LLVM et aimerais voir jusqu'où je peux l'étirer pour le pré-calcul – Karan
@Karan C'est fait. –
pouvez-vous expliquer brièvement pourquoi ghc est capable d'optimiser pour les vecteurs ici et non pour les listes? (et si llvm est la raison de cette magie, pouvons-nous emprunter ce genre de logique de là à ghc?) – Karan