• [^] # Re: Vive le fonctionnel

    Posté par (site web personnel) . En réponse à la dépêche Publication de la nouvelle norme Ada 2012. Évalué à 3.

    Ne pas confondre popularité et qualité. Loft Story est/était populaire et pourtant ça reste de la daube.

    Premier point : on peut faire de la programmation impérative avec Haskell. La différence avec Scala et Ocaml c'est que le compilateur sait quelles zones du code effectuent des effets de bord car ça apparaît dans les types. Exemple :

    import System.IO
    main = do
     putStr "Enter your name: "
     hFlush stdout
     s <- getLine
     putStrLn $ "Hello " ++ s
    
    

    Le type de la fonction main est "IO ()", le IO indiquant que la fonction fait des effets de bord. Le "do" indique que les lignes de code de la fonction doivent être exécutées séquentiellement. (Je simplifie un maximum. Ceux qui sont intéressés pourront lire que "do" est du sucre syntaxique pour tous les monads, ici l'IO monad).

    C'est une différence fondamentale : par défaut les effets de bord sont interdits. En Scala la question revient souvent d'intégrer un "effect system" pour détecter les fonctions pures des autres. Il est question d'ajouter des annotations de type @pure. Mais ça pose des problèmes, par exemple :
    - la bibliothèque standard repose sur celle de Java qui n'a pas ces annotations.
    - que faire pour les fonctions du genre List[A].map(f : A -> B) pour lesquelles le comportement et les optimisations ne sont pas les mêmes si f est pure ou non ?
    Bref c'est pas pour tout de suite…

    Pour finir une petite citation de Guy Steele qui cherchait à créer un successeur à Fortran dans le domaine du calcul haute performance à travers le projet Fortress :

    Although Fortress is originally designed as an object-oriented framework in which to build an array-style scientific programming language, […] as we've experimented with it and tried to get the parallelism going we found ourselves pushed more and more in the direction of using immutable data structures and a functional style of programming. […] If I'd known seven years ago what I know now, I would have started with Haskell and pushed it a tenth of the way toward Fortran instead of starting with Fortran and pushing it nine tenths of the way toward Haskell.

    Traduction rapide :

    Bien que Fortress soit conçu à l'origine comme un cadriciel (framework) orienté-objet au sein duquel on pourrait utiliser un langage de programmation orienté tableaux, […] plus nous expérimentions et essayions de mettre au point le support du parallélisme, plus nous nous sommes trouvés entraînés du côté des structures de données immuables et de la programmation fonctionnelle. […] Si j'avais su ce que je sais maintenant il y a 7 ans, j'aurais commencé avec Haskell et l'aurait modifié de 10% en direction de Fortran plutôt que de commencer avec Fortran et de le modifier de 90% en direction d'Haskell.

    http://www.haskell.org/pipermail/haskell-cafe/2011-January/088245.html