• # et Objective Caml ?

    Posté par (site web personnel) . En réponse au journal Scala : un langage de prog sympa. Évalué à 0.

    Il essaye de concilier programmation fonctionnelle et OO. Il est statiquement typé, et on y trouve pas mal de concepts sympas :

    Ocaml :-)

    - tout est objet, à la Smalltalk

    le tout objet n'est pas la priorité d'OCaml, car son point fort est de pouvoir avoir un style:
    * fonctionnel
    * impératif
    * objet
    suivant les besoins :-)

    - il gère la généricité (bon aujourd'hui ça peut paraître classique, c'est vrai)

    Hmm, je suis pas sûr que OCaml fasse ça, mais il y a sûrement d'autres moyens d'y arriver s'il ne le fait pas.

    - les traits, sorte de classes sans état interne, qui permette d'"imiter" l'héritage multiple

    Je n'ai pas compris le principe de ce que tu décrit ? tu peux préciser ?

    - le type d'une variable peut être inféré (localement), ce qui permet de ne pas préciser le type d'une variable à certains endroits

    Dans OCaml, on ne précise jamais le type d'une variable, par contre, une fois le type défini par le langage (le compilateur ou interpréteur), il ne peut plus changer.

    - il possède le moyen de préciser la variance des arguments d'une fonction. Par exemple, un truc qui m'a vraiment étonné, sur les types génériques, on peut préciser que List[String] est un sous-type de List[Object], mais que pour insérer un objet à cette liste, l'argument est contravariant, menant à transformer List[String] en List[Object] si on y ajoute un objet qui n'est pas une sous-classe de String (je pense qu'il prend alors l'ancêtre commun des deux types, j'ai mis Object pour être général)

    Si c'est bien de l'invariance, OCaml :-) (le tant bizarroïde ;;)

    De plus, OCaml fonctionne en trois modes:
    * interprété, fonctionne comme tous les langages interprétés, avec un interpréteur ;-)
    * semi-compilé (bytecode), comme java, dans une machine virtuelle caml
    * compilé en natif, dans ce cas, OCaml gagne pratiquement la palme du code compilé le plus rapide (juste en-dessous du C avec le meilleur compilateur/optimiseur qui soit, MS C/C++ 7 - oui je sais, ça fait mal pour nous adorateurs de gcc)

    C'est un langage fonctionnel (ou les fonctions sont des éléments de première classe - aka peut être passé en argument et être le résultat d'une expression), venant de la famille des langages de type lamba calcul (comme ML, bien qu'il ne retienne pas du tout la syntaxe), et de surcroît, c'est français (INRIA).

    A part peut-être une syntaxe un peu plus proche des langages objet 'communs' (comme Ruby par exemple), je ne vois pas l'intérêt de ce langage, ce qui ne veut pas dire que je blâme les inventeur de Scala :-)