• [^] # Re: Il serait peut-être temps d'utiliser des langages modernes

    Posté par (site web personnel) . En réponse au journal Si si, le C++ peut parfois être plus rapide que le C. Évalué à 2.

    Concernant la spécialisation et l'inlining, tout dépend du contexte en réalité. Imaginons une fonction max de type 'a -> 'a -> 'a (puisque l'opérateur (>) est polymorphe). Puisqu'en OCaml un fichier est considéré comme une unité de la compilation ou plutôt un module, même dans le cas où le seul cas d'utilisation serait avec des entiers, comme tu le soulignes, le code généré d'OCaml ne sera pas très performant (pas de spé. et pas d'inlining). Pourquoi ? Tout simplement parce que le module a été défini avec un max polymorphe - et nous pouvons imaginer une tout autre utilisation de cette fonction dans un autre module avec des float.

    Dans une autre situation avec la même fonction mais dont sa définition est local (restant donc interne au module), OCaml peut se permettre (dans le cas de l'utilisation de la fonction avec des int uniquement) de faire une spécialisation est de l'inlining. Mais le premier cas peut toujours être optimisé en forçant le typage de max avec des int.

    Je pense que, comme le dit gasche à juste titre, ce n'est qu'une question de temps et d'approbation des différentes optimisations en évitant que celles-ci changent sémantiquement le code. Haskell a opté pour une utilisation de LLVM-IR (un projet OCaml utilise aussi LLVM, ça doit être dans GitHub). Je sais pas si c'est un choix judicieux (Haskell a été pas mal intrusif sur LLVM-IR selon moi) mais de toute façon, j'ai un PC i7 avec 16 Go de RAM :D !