tag:linuxfr.org,2005:/users/mldonkeyLinuxFr.org : les contenus de Fabrice Le Fessant2012-08-20T12:41:39+02:00/favicon.pngtag:linuxfr.org,2005:News/332152012-08-11T14:03:11+02:002016-05-02T15:10:56+02:00OCaml 4.00.0 est sortiLicence CC By‑SA http://creativecommons.org/licenses/by-sa/3.0/deed.fr<div><p>La nouvelle version 4.00.0 du langage OCaml est disponible en ligne depuis le 26 juillet 2012. Aussi, la réunion des développeurs OCaml (OUD'2012) aura lieu cette années à Copenhague le 14 septembre. Venez nombreux !</p>
<p>Parmi les dernières nouveautés disponibles dans cette version 4.00.0 :</p>
<ul>
<li>l'introduction des types de données algébriques généralisés (Generalized Algebraic Data Types - GADTs), qui permettent de détecter encore plus de bugs dès la compilation ;</li>
<li>le générateur de code pour ARM a été complètement réécrit ;</li>
<li>les types des modules de première classe sont maintenant inférés quand cela est possible, et les modules peuvent eux-mêmes être extraits par filtrage ;</li>
<li>le compilateur est disponible sous forme de bibliothèque, et une nouvelle option -bin-annot permet de sauver l'arbre de syntaxe typé, ce qui devrait permettre l'apparition de nouveaux outils de développement plus évolués (refactoring, etc.) ;</li>
<li>optimisation des fonctions partielles ;</li>
<li>détection de code mort ou inutile (variables, open, champs, constructeurs, labels, etc.) ;</li>
<li>émission de directives CFI pour améliorer le debuggage sous GDB.</li>
</ul></div><ul><li>lien nᵒ 1 : <a title="http://caml.inria.fr/download.en.html" hreflang="fr" href="https://linuxfr.org/redirect/82988">Télécharger</a></li><li>lien nᵒ 2 : <a title="http://caml.inria.fr/pub/distrib/ocaml-4.00/" hreflang="fr" href="https://linuxfr.org/redirect/82989">Tous les fichiers</a></li><li>lien nᵒ 3 : <a title="http://caml.inria.fr/ocaml/release.en.html" hreflang="fr" href="https://linuxfr.org/redirect/82990">OCaml</a></li><li>lien nᵒ 4 : <a title="http://oud.ocaml.org/2012/" hreflang="fr" href="https://linuxfr.org/redirect/82991">OCaml Users & Developers (OUD'2012)</a></li><li>lien nᵒ 5 : <a title="http://caml.inria.fr/cgi-bin/viewvc.cgi/ocaml/release/4.00.0/Changes?view=markup" hreflang="fr" href="https://linuxfr.org/redirect/82992">Le ChangeLog complet</a></li><li>lien nᵒ 6 : <a title="http://icfpcontest2012.wordpress.com/" hreflang="fr" href="https://linuxfr.org/redirect/82993">ICFP Programming Contest 2012</a></li></ul><div><p>Pour ceux qui ne connaissent pas, OCaml est un langage à mi-chemin entre C et Python, avec des performances proches de C avec la concision de Python. Mais contrairement à ces deux langages, OCaml appartient à la famille des langages à typage très fort, ce qui permet de détecter la plupart des bugs à la compilation, raccourcissant encore plus le temps de développement ! Rien d'étonnant à ce qu'OCaml ait gagné à plusieurs reprises la ICFP Programming Contest, compétition très sélective de programmation sur trois jours organisée tous les ans.</p>
<p>OCaml permet aussi un mélange des styles impératifs, fonctionnels et objets. Par exemple, une fonction transformant un fichier en une liste de chaînes peut s'écrire :</p>
<pre><code class="ocaml"><span class="c">(* val lines_of_file : string -> string list *)</span>
<span class="k">let</span> <span class="n">lines_of_file</span> <span class="n">filename</span> <span class="o">=</span>
<span class="k">let</span> <span class="n">ic</span> <span class="o">=</span> <span class="n">open_in</span> <span class="n">filename</span> <span class="k">in</span>
<span class="k">let</span> <span class="n">lines</span> <span class="o">=</span> <span class="n">ref</span> <span class="bp">[]</span> <span class="k">in</span>
<span class="k">try</span>
<span class="k">while</span> <span class="bp">true</span> <span class="k">do</span>
<span class="n">lines</span> <span class="o">:=</span> <span class="o">(</span><span class="n">input_line</span> <span class="n">ic</span><span class="o">)</span> <span class="o">::</span> <span class="o">!</span><span class="n">lines</span>
<span class="k">done</span><span class="o">;</span>
<span class="k">assert</span> <span class="bp">false</span>
<span class="k">with</span> <span class="nc">End_of_file</span> <span class="o">-></span>
<span class="n">close_in</span> <span class="n">ic</span><span class="o">;</span>
<span class="nn">List</span><span class="p">.</span><span class="n">rev</span> <span class="o">!</span><span class="n">lines</span></code></pre>
<pre><code>On y voit à la fois l'utilisation des exceptions (try...with), une boucle (while...do...done), mais la même fonction aurait pu être écrite sous forme complètement récursive par un partisan de la programmation fonctionnelle !
</code></pre>
<p>Pour la prochaine version majeure, l'apparition des namespaces, de <a href="http://fr.wikipedia.org/wiki/Foncteur">foncteurs</a> multi-modules et la possibilité de profiler en utilisant le nouvel outil 'perf' sous Linux, sont sur les bancs, et on entend même parler de support des multicœurs dans les couloirs…</p></div><div><a href="https://linuxfr.org/news/ocaml-4-00-0-est-sorti.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/95149/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/news/ocaml-4-00-0-est-sorti#comments">ouvrir dans le navigateur</a>
</p>
Fabrice Le FessantLucas BonnetXavier TeyssierrootixBruno Michelhttps://linuxfr.org/nodes/95149/comments.atom