tag:linuxfr.org,2005:/users/nazcafanLinuxFr.org : les contenus de nazcafan2013-06-15T10:40:32+02:00/favicon.pngtag:linuxfr.org,2005:News/342992013-06-07T23:18:49+02:002013-06-07T23:18:49+02:00C++11 : sur le filLicence CC By‑SA http://creativecommons.org/licenses/by-sa/3.0/deed.fr<div><p>Dans la course effrénée que se livrent les compilateurs, GCC vient de gagner une manche en étant le premier à fournir une implémentation complète du <strong>langage</strong> C++11. Les développeurs ont profité de la <a href="http://article.gmane.org/gmane.comp.gcc.announce/69">sortie de la version de maintenance 4.8.1</a> pour implanter les deux fonctionnalités manquantes :</p>
<ul><li>les <code>rvalue-references</code> pour le pointeur <code>this</code></li>
<li>l'utilisation de <code>decltype</code> sur des expressions de type incomplet</li>
</ul><p><abbr title="Note des modérateurs">NdM</abbr> : <em>merci à nazcafan pour son journal.</em></p></div><ul><li>lien nᵒ 1 : <a title="http://linuxfr.org/users/nazcafan/journaux/c-11-sur-le-fil" hreflang="fr" href="https://linuxfr.org/redirect/86661">Journal à l'origine de la dépêche</a></li><li>lien nᵒ 2 : <a title="http://article.gmane.org/gmane.comp.gcc.announce/69" hreflang="en" href="https://linuxfr.org/redirect/86662">GCC 4.8.1 Released</a></li></ul><div><h4 id="toc_0">les <code>rvalue-references</code> pour le pointeur <code>this</code></h4>
<p>Celles-ci permettent (entre autres) de surcharger des fonctions membres quand <code>this</code> est une <code>rvalue</code> ; voici un exemple tiré de la <a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1821.htm">proposition originale</a> :</p>
<pre>
<code class="c++"><span class="k">class</span> <span class="nc">X</span> <span class="p">{</span>
<span class="n">std</span><span class="o">::</span><span class="n">vector</span><span class="o"><</span><span class="kt">char</span><span class="o">></span> <span class="n">data_</span><span class="p">;</span>
<span class="k">public</span><span class="o">:</span>
<span class="c1">// ...</span>
<span class="n">std</span><span class="o">::</span><span class="n">vector</span><span class="o"><</span><span class="kt">char</span><span class="o">></span> <span class="k">const</span> <span class="o">&</span> <span class="n">data</span><span class="p">()</span> <span class="k">const</span> <span class="o">&</span> <span class="p">{</span> <span class="k">return</span> <span class="n">data_</span><span class="p">;</span> <span class="p">}</span>
<span class="n">std</span><span class="o">::</span><span class="n">vector</span><span class="o"><</span><span class="kt">char</span><span class="o">></span> <span class="o">&&</span> <span class="n">data</span><span class="p">()</span> <span class="o">&&</span> <span class="p">{</span> <span class="k">return</span> <span class="n">data_</span><span class="p">;</span> <span class="p">}</span>
<span class="p">};</span>
<span class="n">X</span> <span class="n">f</span><span class="p">();</span>
<span class="c1">// ...</span>
<span class="n">X</span> <span class="n">x</span><span class="p">;</span>
<span class="n">std</span><span class="o">::</span><span class="n">vector</span><span class="o"><</span><span class="kt">char</span><span class="o">></span> <span class="n">a</span> <span class="o">=</span> <span class="n">x</span><span class="p">.</span><span class="n">data</span><span class="p">();</span> <span class="c1">// copie du vector</span>
<span class="n">std</span><span class="o">::</span><span class="n">vector</span><span class="o"><</span><span class="kt">char</span><span class="o">></span> <span class="n">b</span> <span class="o">=</span> <span class="n">f</span><span class="p">().</span><span class="n">data</span><span class="p">();</span> <span class="c1">// move du vector</span>
</code>
</pre><h4 id="toc_1">l'utilisation de <code>decltype</code> sur des expressions de type incomplet</h4>
<p>La limitation de <code>decltype</code> à des types complets posait des <a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2011/n3276.pdf">problèmes d'instanciation de template en cascade</a>. Ce changement a notamment bénéficié aux bibliothèques boost qui ont du coup <a href="http://www.boost.org/users/news/a_special_note_for_boost_1_52_0_and_higher.html">changé le comportement</a> de leur <code>result_of</code> pour s'aligner sur le comportement de <a href="http://en.cppreference.com/w/cpp/types/result_of"><code>std::result_of</code></a>.</p>
<p>L'annonce de cette sortie semble être destinée a couper l'herbe sous le pied de LLVM 3.3 dont la publication est imminente.</p>
<p>Toutefois, il s'agira tout-de-même d'une victoire en demi-teinte puisque la libstdc++ de GCC <a href="http://gcc.gnu.org/onlinedocs/libstdc++/manual/status.html#status.iso.200x">ne fournit toujours pas</a> certains composants de la bibliothèque standard, telles les expressions rationnelles. La <a href="http://libcxx.llvm.org/">libc++</a> du projet LLVM est déjà complète, ce qui devrait faire de LLVM 3.3 le premier compilateur à prendre en charge le standard C++11 dans sa totalité (langage + bibliothèque standard).</p></div><div><a href="https://linuxfr.org/news/cpp11-sur-le-fil.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/98593/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/news/cpp11-sur-le-fil#comments">ouvrir dans le navigateur</a>
</p>
nazcafanFlorent ZaraXavier Teyssierhttps://linuxfr.org/nodes/98593/comments.atomtag:linuxfr.org,2005:Diary/339802013-06-06T22:26:20+02:002013-06-07T18:18:15+02:00C++11 : sur le filLicence CC By‑SA http://creativecommons.org/licenses/by-sa/3.0/deed.fr<p>Dans la course effrénée que se livrent les compilateurs, GCC vient traîtreusement de gagner une manche en étant le premier à fournir une implémentation complète du <strong>langage</strong> C++11. Les développeurs ont profité de la <a href="http://article.gmane.org/gmane.comp.gcc.announce/69">sortie de la version de maintenance 4.8.1</a> pour implanter les deux fonctionnalités manquantes :</p>
<h4 id="toc_0">les <code>rvalue-references</code> pour le pointeur <code>this</code></h4>
<p>Celles-ci permettent (entre autres) de surcharger des fonctions membres quand <code>this</code> est une <code>rvalue</code> ; voici un exemple tiré de la <a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1821.htm">proposition originale</a> :</p>
<pre>
<code class="c++"><span class="k">class</span> <span class="nc">X</span> <span class="p">{</span>
<span class="n">std</span><span class="o">::</span><span class="n">vector</span><span class="o"><</span><span class="kt">char</span><span class="o">></span> <span class="n">data_</span><span class="p">;</span>
<span class="k">public</span><span class="o">:</span>
<span class="c1">// ...</span>
<span class="n">std</span><span class="o">::</span><span class="n">vector</span><span class="o"><</span><span class="kt">char</span><span class="o">></span> <span class="k">const</span> <span class="o">&</span> <span class="n">data</span><span class="p">()</span> <span class="k">const</span> <span class="o">&</span> <span class="p">{</span> <span class="k">return</span> <span class="n">data_</span><span class="p">;</span> <span class="p">}</span>
<span class="n">std</span><span class="o">::</span><span class="n">vector</span><span class="o"><</span><span class="kt">char</span><span class="o">></span> <span class="o">&&</span> <span class="n">data</span><span class="p">()</span> <span class="o">&&</span> <span class="p">{</span> <span class="k">return</span> <span class="n">data_</span><span class="p">;</span> <span class="p">}</span>
<span class="p">};</span>
<span class="n">X</span> <span class="n">f</span><span class="p">();</span>
<span class="c1">// ...</span>
<span class="n">X</span> <span class="n">x</span><span class="p">;</span>
<span class="n">std</span><span class="o">::</span><span class="n">vector</span><span class="o"><</span><span class="kt">char</span><span class="o">></span> <span class="n">a</span> <span class="o">=</span> <span class="n">x</span><span class="p">.</span><span class="n">data</span><span class="p">();</span> <span class="c1">// copie du vector</span>
<span class="n">std</span><span class="o">::</span><span class="n">vector</span><span class="o"><</span><span class="kt">char</span><span class="o">></span> <span class="n">b</span> <span class="o">=</span> <span class="n">f</span><span class="p">().</span><span class="n">data</span><span class="p">();</span> <span class="c1">// move du vector</span>
</code>
</pre><h4 id="toc_1">l'utilisation de <code>decltype</code> sur des expressions de type incomplet</h4>
<p>La limitation de <code>decltype</code> à des types complets posait des <a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2011/n3276.pdf">problèmes d'instanciation de template en cascade</a>. Ce changement a notamment bénéficié aux bibliothèques boost qui ont du coup <a href="http://www.boost.org/users/news/a_special_note_for_boost_1_52_0_and_higher.html">changé le comportement</a> de leur <code>result_of</code> pour s'aligner sur le comportement de <a href="http://en.cppreference.com/w/cpp/types/result_of"><code>std::result_of</code></a>.</p>
<p>L'annonce de cette sortie semble être destinée a couper l'herbe sous le pied de LLVM 3.3 dont la publication est imminente.</p>
<p>Toutefois, il s'agira tout-de-même d'une victoire en demi-teinte puisque la libstdc++ de GCC <a href="http://gcc.gnu.org/onlinedocs/libstdc++/manual/status.html#status.iso.200x">ne fournit toujours pas</a> certains composants de la bibliothèque standard, telles les expressions rationnelles. La <a href="http://libcxx.llvm.org/">libc++</a> du projet LLVM est déjà complète, ce qui devrait faire de LLVM 3.3 le premier compilateur à prendre en charge le standard C++11 dans sa totalité (langage + bibliothèque standard).</p><div><a href="https://linuxfr.org/users/nazcafan/journaux/c-11-sur-le-fil.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/98579/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/users/nazcafan/journaux/c-11-sur-le-fil#comments">ouvrir dans le navigateur</a>
</p>
nazcafanhttps://linuxfr.org/nodes/98579/comments.atomtag:linuxfr.org,2005:News/335802012-11-14T22:26:19+01:002012-11-14T22:26:19+01:00codeurs, traducteurs, cppreference a besoin de vous Licence CC By‑SA http://creativecommons.org/licenses/by-sa/3.0/deed.fr<div><p><a href="http://en.cppreference.com/w/">cppreference</a> est un wiki dont le but est de fournir une documentation exhaustive des bibliothèques standard C (89, 99, 11) et C++ (03 et 11). Le contenu est disponible sous licences libres CC-BY-SA et GFDL.</p>
<p>Depuis quelques mois, le site anglophone a changé de peau pour utiliser mediawiki, lui assurant une meilleure lisibilité, la possibilité d'utiliser des templates… Les contenus ont depuis régulièrement progressé en qualité, même si <a href="http://en.cppreference.com/w/Category:Todo_without_reason">certaines choses</a> restent à faire.</p>
<p>La dernière initiative a été de générer les contenus <a href="http://fr.cppreference.com/w/">français</a>, mandarin, italien, espagnol, portugais et russe depuis le contenu anglais en utilisant l'outil <em>google</em> <em>translate</em>. Évidemment, si certaines phrases sont correctement traduites, d'autres sont à peine compréhensibles et un effort important reste à fournir pour arriver à une documentation francophone de qualité, mais une base est déjà présente sur laquelle s'appuyer.</p>
<p>Envie de découvrir toutes les nouveautés de la bibliothèque standard C++11 (multithreading, regexp…) tout en rendant service à la communauté francophone ? Ne perdez pas cette opportunité ! Faites chauffer <s>gcc</s> clang++ et rendez-vous sur <a href="http://fr.cppreference.com">fr.cppreference.com</a></p></div><ul><li>lien nᵒ 1 : <a title="http://fr.cppreference.com" hreflang="fr" href="https://linuxfr.org/redirect/84205">cppreference - Francophone</a></li><li>lien nᵒ 2 : <a title="http://en.cppreference.com/w/Cppreference:MachineTranslations" hreflang="en" href="https://linuxfr.org/redirect/84206">Instructions pour la traduction</a></li><li>lien nᵒ 3 : <a title="http://en.cppreference.com/w/Cppreference:FAQ" hreflang="en" href="https://linuxfr.org/redirect/84207">Foire aux questions : TODO list</a></li></ul><div></div><div><a href="https://linuxfr.org/news/codeurs-traducteurs-cppreference-a-besoin-de-vous.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/96416/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/news/codeurs-traducteurs-cppreference-a-besoin-de-vous#comments">ouvrir dans le navigateur</a>
</p>
nazcafanbaud123Benoît Sibaudhttps://linuxfr.org/nodes/96416/comments.atomtag:linuxfr.org,2005:Diary/326282012-05-25T16:15:30+02:002012-05-25T16:15:30+02:00Conférence EURO-LLVM 2012 : Les vidéos sont là !Licence CC By‑SA http://creativecommons.org/licenses/by-sa/3.0/deed.fr<p>Pour ceux qui n'ont pas pu assister à la conférence Euro-LLVM 2012, les vidéos sont enfin arrivées et disponibles sur <a href="http://llvm.org/devmtg/2012-04-12/">la page de la conférence</a> !</p>
<p>Un résumé de chaque intervention est disponible sur <a href="http://linuxfr.org/news/llvm-3-1-et-conference-euro-llvm-2012#toc_11">la dépêche</a> sortie il y a quelques jours.</p>
<p>Perso, j'ai hâte d'être à ce soir pour regarder la vidéo « Refactoring C++ with Clang » du mec de Google.</p>
<p>Bon week-end à tous !</p>
<p>P.S. : C'est au format Quick Time (dû à Apple ?) ; je ne sais pas trop si c'est lu en natif par Firefox ou si il faut télécharger, (VLC doit bien pouvoir lire ça).</p><div><a href="https://linuxfr.org/users/nazcafan/journaux/conference-euro-llvm-2012-les-videos-sont-la.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/94254/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/users/nazcafan/journaux/conference-euro-llvm-2012-les-videos-sont-la#comments">ouvrir dans le navigateur</a>
</p>
nazcafanhttps://linuxfr.org/nodes/94254/comments.atomtag:linuxfr.org,2005:News/329492012-05-23T15:02:00+02:002012-05-24T08:49:48+02:00LLVM 3.1 et Conférence EURO-LLVM 2012Licence CC By‑SA http://creativecommons.org/licenses/by-sa/3.0/deed.fr<div><p><a href="http://fr.wikipedia.org/wiki/LLVM" title="Définition Wikipédia">LLVM</a> est une suite de compilation, c'est-à-dire un ensemble de bibliothèques et d'outils pour construire des compilateurs, des assembleurs, des éditeurs de liens, etc. Et quand on parle de LLVM, on parle forcément de Clang, le compilateur C/C++/ObjectiveC/ObjectiveC++ attitré du projet LLVM. Clang, par rapport à GCC, compile plus vite mais génère du code moins rapide, le vrai intérêt de Clang réside dans la <a href="http://clang.llvm.org/diagnostics.html">clarté des messages d'erreurs</a>.</p>
<p>La seconde partie de cette dépêche détaille les nouveautés de la version 3.1 de LLVM et Clang, sortie le 22 mai 2012 et propose un compte rendu de la toute première conférence Euro-LLVM (avril 2012).</p>
<p>LLVM et Clang 3.1 sont téléchargeables <a href="http://llvm.org/releases/3.1/llvm-3.1.src.tar.gz">ici</a> et <a href="http://llvm.org/releases/3.1/clang-3.1.src.tar.gz">là</a> respectivement (les utilisateurs de Debian Sid n'ont évidemment qu'à faire un <code>apt-get install llvm-3.1 clang</code>)</p>
<p>
<em>[NDA: un grand Merci à rewind qui a rédigé, entre autres, toute la couverture de la conf Euro-LLVM. Merci également à patrick_g, reno, Nÿco, baud123 et Sylvestre Ledru pour leurs corrections et leurs précisions.]</em>
</p></div><ul><li>lien nᵒ 1 : <a title="http://llvm.org/docs/ReleaseNotes.html" hreflang="en" href="https://linuxfr.org/redirect/81985">Notes de version de llvm 3.1</a></li><li>lien nᵒ 2 : <a title="http://clang.llvm.org/docs/ReleaseNotes.html" hreflang="en" href="https://linuxfr.org/redirect/81986">Notes de version le clang 3.1</a></li><li>lien nᵒ 3 : <a title="http://llvm.org/" hreflang="en" href="https://linuxfr.org/redirect/82065">The LLVM Compiler Infrastructure </a></li><li>lien nᵒ 4 : <a title="http://llvm.org/" hreflang="en" href="https://linuxfr.org/redirect/82142">Site Web de LLVM</a></li><li>lien nᵒ 5 : <a title="http://clang.llvm.org" hreflang="en" href="https://linuxfr.org/redirect/82143">Site Web de Clang</a></li></ul><div><h2 id="sommaire">Sommaire</h2>
<ul><li>
<a href="#toc_0">Clang</a>
<ul><li>
<a href="#toc_1">Nouveaux warnings</a>
<ul><li>
<a href="#toc_2">-Wdangling_else</a>
</li>
<li>
<a href="#toc_3">-Wstrncat-size</a>
</li>
</ul></li>
<li>
<a href="#toc_4">Amélioration de la prise en charge de C++11 :</a>
</li>
<li>
<a href="#toc_5">Prise en charge de C11</a>
</li>
</ul></li>
<li>
<a href="#toc_6">Nouvelles optimisations</a>
<ul><li>
<a href="#toc_7">Polly wants a cracker</a>
</li>
<li>
<a href="#toc_8">Déroulage de boucles dynamique</a>
</li>
<li>
<a href="#toc_9">Placement de blocs de base</a>
</li>
<li>
<a href="#toc_10">Back-end x86 et x86-64</a>
</li>
</ul></li>
<li>
<a href="#toc_11">Euro-LLVM 2012</a>
<ul><li>
<a href="#toc_12">Introduction</a>
</li>
<li>
<a href="#toc_13">Autovectorization with LLVM</a>
</li>
<li>
<a href="#toc_14">Refactoring C++ with Clang</a>
</li>
<li>
<a href="#toc_15">MCJIT</a>
</li>
<li>
<a href="#toc_16">Generating Serialisation Code with Clang</a>
</li>
<li>
<a href="#toc_17">Garantir que MC est correct même pour ARM</a>
</li>
<li>
<a href="#toc_18">lld - the LLVM Linker</a>
</li>
<li>
<a href="#toc_19">Reducing dynamic compilation latency</a>
</li>
<li>
<a href="#toc_20">Compilation de Linux par LLVM</a>
</li>
<li>
<a href="#toc_21">Tablegen Deep Dive</a>
</li>
<li>
<a href="#toc_22">Improving Performance of OpenCL on CPUs</a>
</li>
</ul></li>
<li>
<a href="#toc_23">Pendant ce temps, de l'autre côté de la manche</a>
</li>
<li>
<a href="#toc_24">Et pour l'avenir ?</a>
</li>
</ul><h2 id="toc_0">Clang</h2>
<p>Clang est le front-end officiel de LLVM pour les langages de la famille de C. Les premiers langages pour lesquels il a atteint un niveau de « production » sont C et Objective-C (on voit là l'influence de la marque à la pomme qui a sponsorisé ce projet).<br />
À partir de 2010, la prise en charge de C++ a progressé pour devenir excellente. La version 2.8 en <a href="http://linuxfr.org/news/llvm-28-%C3%A7a-avance">octobre 2010</a> a apporté la compatibilité avec le standard C++03. Depuis, les efforts ont continué et Clang est désormais à la pointe en ce qui concerne le tout nouveau C++11.<br />
Clang se démarque de gcc par la <a href="http://channel9.msdn.com/Events/GoingNative/GoingNative-2012/Clang-Defending-C-from-Murphy-s-Million-Monkeys">précision et la qualité de ses diagnostics</a>, mais aussi par sa modularité : il est possible de créer ses propres outils d'analyse de code grâce à la <a href="http://clang.llvm.org/doxygen/group__CINDEX.html">libclang</a>.</p>
<h3 id="toc_1">Nouveaux warnings</h3>
<p>Clang est réputé pour la qualité de ses diagnostics. Cette fois-ci, plusieurs nouveaux warnings ont été ajoutés permettant une analyse encore plus précise du code source. En particulier, on notera :</p>
<h4 id="toc_2">-Wdangling_else</h4>
<p>Lorsque deux <code>if</code> successifs sont suivis par une instruction <code>else</code> (<a href="http://en.wikipedia.org/wiki/Dangling_else">dangling else</a>), la syntaxe C/C++ prévoit que le <code>else</code> s'applique au <code>if</code> le plus imbriqué ; mais une mauvaise indentation peut induire en erreur le relecteur :</p>
<pre>
<code class="c++"> <span class="k">if</span> <span class="p">(</span><span class="n">foo</span><span class="p">)</span>
<span class="k">if</span> <span class="p">(</span><span class="n">bar</span><span class="p">)</span> <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="s">"case 1</span><span class="se">\n</span><span class="s">"</span><span class="p">;</span>
<span class="k">else</span>
<span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="s">"case 2</span><span class="se">\n</span><span class="s">"</span><span class="p">;</span>
</code>
</pre>
<p>clang++ avertit l'utilisateur en lui propose de lever l'ambiguïté :</p>
<pre>
<code class="">dangling.cpp:8:3: warning: add explicit braces to avoid dangling else
[-Wdangling-else]
else std::cout << "case 2\n";
^
</code>
</pre><h4 id="toc_3">-Wstrncat-size</h4>
<p>Les fonctions standard C <code>strcpy</code> et <code>strcat</code> permettent respectivement de copier et de concaténer des chaînes de caractères, mais ne permettent pas de s'armer contre des débordement de buffer provoqués par une trop grande chaîne source.<br />
Pour remédier à cela, la bibliothèque C propose également <code>strncpy</code> et <code>strncat</code>, prenant toutes deux un argument supplémentaire de type <code>size_t</code> qui spécifie la taille des données à copier.<br />
Hélas, trois fois hélas, si on peut la plupart du temps entrer la taille du buffer de destination pour <code>strncpy</code>, il en va autrement pour <code>strncat</code>. Il faut bien évidemment songer à retrancher la taille utilisée par les données déjà présentes.<br />
Un coup d'œil sur le code historique de votre entreprise vous convaincra pourtant que les codes du type :</p>
<pre>
<code class="c"> <span class="n">strncat</span><span class="p">(</span><span class="n">dest</span><span class="p">,</span> <span class="n">src</span><span class="p">,</span> <span class="k">sizeof</span><span class="p">(</span><span class="n">src</span><span class="p">));</span>
</code>
</pre>
<p>ou</p>
<pre>
<code class="c"> <span class="n">strncat</span><span class="p">(</span><span class="n">dest</span><span class="p">,</span> <span class="n">src</span><span class="p">,</span> <span class="k">sizeof</span><span class="p">(</span><span class="n">dest</span><span class="p">));</span>
</code>
</pre>
<p>sont relativement répandus.<br />
Clang repère ce type d'erreur et fidèle à son habitude, vous propose une solution :</p>
<pre>
<code class="text">strncat.c:8:22: warning: the value of the size argument in 'strncat' is too
large, might lead to a buffer overflow [-Wstrncat-size]
strncat(dest, src, sizeof(dest));
^~~~~~~~~~~~
strncat.c:8:22: note: change the argument to be the free space in the
destination buffer minus the terminating null byte
strncat(dest, src, sizeof(dest));
^~~~~~~~~~~~
sizeof(dest) - strlen(dest) - 1
1 warning generated.
</code>
</pre>
<p>Tout n'est pas parfait et force est de constater que clang reste muet quand le code précédent est remplacé par</p>
<pre>
<code class="c"><span class="n">strncat</span><span class="p">(</span><span class="n">dest</span><span class="p">,</span> <span class="n">src</span><span class="p">,</span> <span class="n">strlen</span><span class="p">(</span><span class="n">src</span><span class="p">));</span>
</code>
</pre><h3 id="toc_4">Amélioration de la prise en charge de C++11 :</h3>
<p>Les développeurs de clang ont encore amélioré la prise en charge de C++11. Les nouveautés les plus intéressantes sont :</p>
<ul><li>les listes d'initialisation :</li>
</ul><pre>
<code class="c++"><span class="n">std</span><span class="o">::</span><span class="n">vector</span><span class="o"><</span><span class="kt">int</span><span class="o">></span> <span class="n">v</span><span class="p">{</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="mi">4</span><span class="p">,</span> <span class="mi">5</span><span class="p">};</span>
</code>
</pre>
<ul><li>les lambda expressions :</li>
</ul><pre>
<code class="c++"> <span class="n">std</span><span class="o">::</span><span class="n">transform</span><span class="p">(</span><span class="n">v</span><span class="p">.</span><span class="n">begin</span><span class="p">(),</span> <span class="n">v</span><span class="p">.</span><span class="n">end</span><span class="p">(),</span> <span class="n">v</span><span class="p">.</span><span class="n">begin</span><span class="p">(),</span>
<span class="p">[](</span><span class="kt">int</span> <span class="n">x</span><span class="p">){</span><span class="k">return</span> <span class="mi">2</span> <span class="o">*</span> <span class="n">x</span> <span class="o">+</span><span class="mi">1</span><span class="p">;});</span>
</code>
</pre>
<ul><li>les types littéraux définis par l'utilisateur :</li>
</ul><p>Ces types peuvent avoir des utilisations intéressantes, comme par exemple la vérification statique de l'homogénéité du calcul scientifique. On peut dorénavant définir assez facilement un système d'unités et écrire des expressions du type:</p>
<pre>
<code class="c++"><span class="n">Speed</span> <span class="n">delorean</span> <span class="mf">157715.712</span><span class="n">_m</span> <span class="o">/</span> <span class="mf">3600.</span><span class="n">_s</span><span class="p">;</span><span class="c1">//valide</span>
<span class="n">Speed</span> <span class="n">caddie</span> <span class="mi">2</span><span class="n">_m</span><span class="p">;</span><span class="c1">//erreur de compilation</span>
</code>
</pre>
<p>Voir la <a href="http://channel9.msdn.com/Events/GoingNative/GoingNative-2012/Keynote-Bjarne-Stroustrup-Cpp11-Style">keynote de Bjarne Stroustrup</a> à la conférence « C++ Going Native 2012 » pour les détails de l'implémentation.</p>
<ul><li>Types atomiques</li>
</ul><p>Les types pour les <a href="http://fr.wikipedia.org/wiki/Atomicit%C3%A9_%28informatique%29">opérations atomiques</a>, essentielles en programmation concurrente, ont été implémentés dans clang. En conséquence, il semblerait que la <a href="http://libcxx.llvm.org/">libc++</a> ait désormais une implémentation virtuellement complète de C++11.</p>
<p>Fait marquant, pour la première fois, llvm propose une prise en charge <a href="http://clang.llvm.org/cxx_status.html">plus complète</a> que <a href="http://gcc.gnu.org/projects/cxx0x.html">gcc</a> du standard C++11. Clang est donc à l'heure actuelle ce qui se rapproche le plus d'un compilateur parfaitement compatible C++11. Les « exclusivités » de clang++ par rapport à gcc sont :</p>
<ul><li>surcharge des fonctions membres <a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1821.htm">pour les rvalues</a></li>
<li>mots clés <code>alignas</code> et <code>alignof</code> qui permettent de forcer un alignement encore plus strict que ce que fait C++ par défaut :</li>
</ul><pre>
<code class="c++"><span class="k">struct</span> <span class="n">S</span><span class="c1">//taille 4 sans "alignas", taille 8 avec</span>
<span class="p">{</span>
<span class="kt">short</span> <span class="n">s0</span><span class="p">;</span>
<span class="kt">short</span> <span class="n">alignas</span><span class="p">(</span><span class="kt">int</span><span class="p">)</span> <span class="n">s1</span><span class="p">;</span><span class="c1">//offset de 2 octets sans alignas, 4 octets avec</span>
<span class="p">};</span>
</code>
</pre>
<ul><li>l'en-tête <code><regex></code> pour <a href="http://en.cppreference.com/w/cpp/regex">la bibliothèque d'expressions rationelles</a> de la bibliothèque standard dans libc++.</li>
</ul><h3 id="toc_5">Prise en charge de C11</h3>
<p>Alors que le concurrent propriétaire <s>fait sa chochotte</s> <a href="http://herbsutter.com/2012/05/03/reader-qa-what-about-vc-and-c99/">préfère se concentrer sur le langage C++</a>, clang propose une prise en charge de la norme C99 <a href="http://clang.llvm.org/docs/UsersManual.html#c">quasi-exemplaire</a>. En outre, bien que <em>Le</em> standard C11 soit à peine publié, l'équipe de clang a déjà commencé à le prendre en charge. Pour cette version, les développeurs ont implémenté les structures anonymes décrites dans <a href="http://linuxfr.org/news/c11-nest-pas-encore-mort">la dépêche</a> sortie pour la publication du standard. Ceci s'ajoute aux mots-clés <code>alignas</code>, <code>generic</code> ainsi qu'aux <code>static_assert</code> déjà présents dans clang 3.0</p>
<h2 id="toc_6">Nouvelles optimisations</h2>
<h3 id="toc_7">Polly wants a cracker</h3>
<p>Pour la version 3.1, LLVM se dote officiellement d'un module d'<a href="http://en.wikipedia.org/wiki/Polytope_model">optimisation polyédrale</a>, au joli nom de <a href="http://polly.llvm.org/">Polly</a>. et développé par Tobias Grosser, actuellement doctorant à l'ENS. Ce garçon n'en est pas à son coup d'essai puisqu'il travaille également sur la <a href="http://gcc.gnu.org/wiki/Graphite">branche Graphite</a> qui a été incorporée dans la version 4.4 de GCC (voir <a href="http://linuxfr.org/news/sortie-de-la-version-44-du-compilateur-gcc">la dépêche de 2009</a> qui propose une description précise de ce type d'optimisation). Si les résultats sont à la hauteur, on peut s'attendre à des <a href="http://polly.llvm.org/performance.html">améliorations sensibles des performances</a> dans certains calculs matriciels.</p>
<h3 id="toc_8">Déroulage de boucles dynamique</h3>
<p>Une technique classique pour optimiser les boucles est de les dérouler pendant la compilation, au prix d'une plus grande quantité d'instructions. LLVM implémente maintenant le <a href="http://en.wikipedia.org/wiki/Loop_unwinding#Dynamic_unrolling">déroulage de boucles dynamique</a>, c'est-à-dire quand le nombre d'itérations n'est pas connu au moment de la compilation.</p>
<h3 id="toc_9">Placement de blocs de base</h3>
<p>LLVM 3.0 avait permis la prise en charge de <a href="http://llvm.org/docs/BranchWeightMetadata.html">méta-données sur les branches</a> qui permettaient d'attribuer des poids différents suivant les probabilités. Cela se traduit concrètement dans un code C par l'extension <code>__builtin_expect()</code> qu'<a href="http://gcc.gnu.org/onlinedocs/gcc/Other-Builtins.html">on retrouve également dans GCC</a>.</p>
<p>Dans LLVM 3.1, un algorithme de placement des blocs a été implémenté prenant en compte ces informations. Cela ouvre la voie à des <a href="http://llvm.org/docs/CommandGuide/llvm-prof.html">outils</a> similaires à <a href="http://fr.wikipedia.org/wiki/gprof" title="Définition Wikipédia">gprof</a> qui vont permettrent d'annoter le code statiquement pour permettre un meilleur agencement des blocs et donc de meilleures performances.</p>
<h3 id="toc_10">Back-end x86 et x86-64</h3>
<p>Pour la version 3.0, LLVM avait déjà proposé la prise en charge des nouvelles instructions <a href="http://en.wikipedia.org/wiki/Advanced_Vector_Extensions">Advanced Vector Extensions</a> (AVX), disponibles sur Intel Sandy/Ivy Bridge et sur les AMD Bulldozer. LLVM 3.1 améliore grandement cette prise en charge et <a href="http://www.phoronix.com/scan.php?page=article&item=linux_compilers_sandy&num=2">ajoute celle des instructions AVX2</a>, prévues sur les futurs processeurs <a href="http://en.wikipedia.org/wiki/Haswell_%28microarchitecture%29">Haswell</a> d'Intel.</p>
<h2 id="toc_11">Euro-LLVM 2012</h2>
<p>Les 12 et 13 avril dernier a eu lieu la <a href="http://llvm.org/devmtg/2012-04-12/">première conférence européenne dédiée à LLVM</a>. Organisée par ARM avec un soutien financier de Google et Qualcomm, de nombreux exposés ont été présentés ainsi que des ateliers pratiques autour de LLVM. Ces présentations permettent d'entrevoir le futur de LLVM ainsi que les avancées déjà intégrées pour certaines.</p>
<h3 id="toc_12">Introduction</h3>
<p>Le <a href="http://llvm.org/devmtg/2012-04-12/Slides/Lee_Smith.pdf">court exposé d'introduction</a> de Lee Smith (ARM) permet de savoir pourquoi son entreprise s'intéresse à LLVM (attention, appeaux à trolls). En fait, c'est surtout les défauts de GCC qui sont mis en avant : le code de LLVM, outre le fait qu'il soit «open source», est plus jeune donc plus facile à travailler ; LLVM a moins de contraintes techniques contrairement à GCC qui doit gérer des choix anciens ; LLVM est un meilleur framework pour fabriquer des outils d'analyse ou des <a href="http://fr.wikipedia.org/wiki/Langage_d%C3%A9di%C3%A9">langages dédiés</a>. Autres qualités de LLVM, plutôt techniques : il peut émettre du code pour des <a href="http://fr.wikipedia.org/wiki/Processeur_de_signal_num%C3%A9rique">processeurs spécialisés</a> (DSP) propriétaires, il est capable de générer du code JIT, il est capable de prendre en charge OpenCL. Enfin, sa licence est «non-virale».</p>
<h3 id="toc_13">Autovectorization with LLVM</h3>
<p>Hal Finkel du Argonne National Laboratory explique les progrès qui ont été accomplis dans l'<a href="http://llvm.org/devmtg/2012-04-12/Slides/Hal_Finkel.pdf">autovectorisation</a>. Il s'agit de transformer des couples d'instructions simples en une instruction plus complexe issue des diverses extensions disponibles (MMX, SSE*, AltiVex, NEON, etc). Comme LLVM gère depuis très longtemps dans sa représentation intermédiaire les <a href="http://llvm.org/docs/LangRef.html#t_vector">vecteurs de registres</a> ainsi que les opérations de base associées (addition, multiplication, etc), les différents backend qui génèrent du code machine peuvent déjà générer ces instructions. Le travail peut donc s'effectuer au niveau de la représentation intermédiaire et profiter à toutes les architectures.</p>
<p>Par exemple, si on a ces deux instructions simples :</p>
<pre>
<code class="">%A1 = fadd double %B1, %C1
%A2 = fadd double %B2, %C2
</code>
</pre>
<p>On peut les transformer en une seule instruction en utilisant un vecteur de registre :</p>
<pre>
<code class="">%A = fadd <2 x double> %B, %C
</code>
</pre><h3 id="toc_14">Refactoring C++ with Clang</h3>
<p>Manuel Klimek de Google montre qu'on peut rendre C++ très amusant à l'aide d'outils adaptés. Un travail a commencé pour fournir des briques de bases et des outils pour manipuler du code C++. Les outils envisagés sont très connus mais souvent imparfaits. Ainsi Google envisage de créer un formateur de code, <code>clang-format</code>, qui permettrait de reformater du code selon des règles prédéfinies. Là où <code>indent</code> ou <a href="http://astyle.sourceforge.net/astyle.html"><code>astyle</code></a> se contentent de correction stylistique, <code>clang-format</code> pourrait carrément, grâce à la puissance de LLVM, s'attaquer à la syntaxe, en modifiant par exemple la casse du nom d'une fonction, dans sa définition et partout où elle utilisée ! Autre outil, <code>clang-lint</code> permettrait de vérifier le code à la recherche d'erreurs classiques, mais également de les corriger interactivement à la volée ! Le travail sur les <a href="http://clang.llvm.org/docs/Tooling.html">bibliothèques de base</a> a déjà commencé tandis que les outils sont encore à construire, mais sont très prometteurs.</p>
<h3 id="toc_15">MCJIT</h3>
<p>Eli Bendersky d'Intel présente un <a href="http://llvm.org/devmtg/2012-04-12/Slides/Eli_Bendersky.pdf">débuggueur de code JIT</a> basé sur LLVM. À noter qu'il travaille dans l'équipe OpenCL d'Intel.</p>
<h3 id="toc_16">Generating Serialisation Code with Clang</h3>
<p>Wayne Palmer de Barclays Capital utilise Clang pour <a href="http://llvm.org/devmtg/2012-04-12/Slides/Wayne_Palmer.pdf">générer du code de sérialisation automatiquement</a>. Dans le cadre d'une bibliothèque d'analyse quantitative utilisée par sa banque pour calculer les risques, un travail a été mené pour pouvoir générer le code de sérialisation permettant de transmettre des structures à travers le réseau, plutôt que de l'écrire à la main. Ils ont remplacé une solution basée sur Doxygen (!!!) pour une solution basée sur LLVM. Le développeur peut ainsi annoter son code C++ pour déclarer si une classe doit avoir un code de sérialisation ou pas. La principale difficulté est alors de générer le code de sérialisation au bon endroit pour qu'il soit compilé une seule fois.</p>
<h3 id="toc_17">Garantir que MC est correct même pour ARM</h3>
<p>Richard Barton de ARM explique comment il a <a href="http://llvm.org/devmtg/2012-04-12/Slides/Richard_Barton.pdf">amélioré la génération de code ARM de LLVM</a>. La génération de code dans LLVM a lieu dans un <a href="http://blog.llvm.org/2010/04/intro-to-llvm-mc-project.html">framework appelé MC pour Machine Code</a>. Comme tout le reste dans LLVM, ce framework est très modulaire, ce qui lui permet de construire toute une série d'outils relativement simplement : assembler, désassembleur, etc. Ici, l'idée est de faire une vérification exhaustive de tous les <a href="http://fr.wikipedia.org/wiki/Langage_machine#Opcode">opcodes</a> de toutes les variantes de processeurs ARM en comparant les résultats de LLVM MC avec une implémentation de référence propriétaire de ARM. Cela représente près de 7 billions (7<sup>12</sup> ) de combinaisons possibles ! Heureusement, cet ensemble de test a été réduit pour pouvoir être exécuté en temps raisonnable. Les premiers résultats montrent qu'à peu près 10% de toutes les instructions du Cortex-A8 sont mal encodés par LLVM-MC. 14 patchs ont déjà été soumis et d'autres devraient suivre.</p>
<h3 id="toc_18">lld - the LLVM Linker</h3>
<p>Michael Spencer de Sony Computer Entertainment America présente <a href="http://llvm.org/devmtg/2012-04-12/Slides/Michael_Spencer.pdf">LLD</a>, un éditeur de lien basé sur LLVM. Le but de <a href="http://lld.llvm.org/">lld</a> est de remplacer les éditeurs de liens fournis avec le système (GNU ld ou GOLD pour Linux, ld64 pour MacOSX, link.exe pour Windows) en offrant un éditeur de lien performant, portable et surtout, qui permette de faire de l'édition de lien croisée de manière sûre. Le projet ne fait que démarrer.</p>
<h3 id="toc_19">Reducing dynamic compilation latency</h3>
<p>Igor Bohm de l'University of Edinburgh utilise un ou plusieurs <a href="http://llvm.org/devmtg/2012-04-12/Slides/Igor_Bohm.pdf">threads « auxiliaires » </a>qui réalisent une compilation JIT pour optimiser les performances d'une machine virtuelle.</p>
<h3 id="toc_20">Compilation de Linux par LLVM</h3>
<p>Mark Charlebois de QuIC présente les avancées de la <a href="http://llvm.org/devmtg/2012-04-12/Slides/Mark_Charlebois.pdf">compilation de Linux par LLVM</a>. Le principal problème est que Linux dépend beaucoup de GCC, que ce soit à travers certains comportements comme la réaction par rapport à des options de compilations présentes ou non, ou par rapport à ces options de compilations non présentes dans LLVM, ou encore par rapport à des extensions du langage comme les tableaux de taille variable dans des structures ou les fonctions imbriquées. Sans même parler des incompatibilités spécifiques à certaines architectures comme ARM. Heureusement, <a href="http://llvm.linuxfoundation.org/">tout cela est documenté</a> pour permettre un suivi, et des patchs sont soumis.</p>
<p>Rappelons que dans ce même effort, <a href="http://clang.debian.net/">Debian recompile régulièrement toute l'archive avec Clang</a>.</p>
<h3 id="toc_21">Tablegen Deep Dive</h3>
<p>Reed Kotler de MIPS présente un <a href="http://llvm.org/devmtg/2012-04-12/Slides/Reed_Kotler.pdf">outil interne de LLVM : Tablegen</a>. Cet outil, assez mal documenté, prend en entrée des fichiers de description et en ressort des morceaux de code. La syntaxe des fichiers de description est complètement générique, un peu à la manière d'XML. Pour la sortie, il est possible d'écrire des générateurs pour des tâches particulières. LLVM se sert massivement de Tablegen au niveau des générateurs de code pour documenter les registres, les instructions, les informations des architectures et de leurs variantes, etc. Ainsi, une même source d'information sert à générer diverses parties sans redondance inutile : assembleur, désassembleur, encodeur, décodeur. Cette présentation permet d'approcher un peu plus cet outil et est surtout l'occasion de <a href="http://code.google.com/p/alt-llvm-tablegen/">lancer un effort de documentation</a> pour permettre à Tablegen de vivre sa propre vie.</p>
<h3 id="toc_22">Improving Performance of OpenCL on CPUs</h3>
<p>Ralf Karrenberg et Sebastian Hack de Saarland University montrent comment <a href="http://llvm.org/devmtg/2012-04-12/Slides/Ralf_Karrenberg.pdf">utiliser LLVM pour exécuter les kernels</a> <a href="http://fr.wikipedia.org/wiki/OpenCL">OpenCL</a> sur des processeurs multicœurs actuels. Les performances sont au rendez-vous puisque l'implémentation actuelle surpasse les SDK d'Intel et d'AMD. Avec les autres avancées au niveau de l'autovectorisation, il sera bientôt possible d'avoir des kernels extrêmement performants.</p>
<h2 id="toc_23">Pendant ce temps, de l'autre côté de la manche</h2>
<p>Pour ceux que LLVM intéresse, voire passionne, ou simplement ceux qui veulent boire un verre en discutant d'arbres de syntaxe abstraits, l'Initiative de Recherche et Innovation sur le Logiciel Libre (<a href="http://www.irill.org/">IRILL</a>) organise l'évènement <em>LLVM Social</em> sur Paris. La prochaine session aura lieu ce samedi 26 mai. L'horaire et l'emplacement seront publiés incessamment sur le <a href="http://www.irill.org/">site d'IRILL</a>.</p>
<h2 id="toc_24">Et pour l'avenir ?</h2>
<p>Grâce à sa <s>licence permissive</s> modularité et sa modernité, LLVM a su générer une myriade de projets qui en font aujourd'hui un des acteurs les plus dynamiques dans le monde du développement libre.<br />
Plus de 12 ans après sa fondation, c'est aussi l'heure de la maturité pour cette suite de compilation : de plus en plus d'industriels de premier plan (Google, Apple …) utilisent LLVM en développement ou en production. Les derniers <a href="http://www.phoronix.com/scan.php?page=article&item=llvm3_gcc_open64&num=1">benchmarks</a> de Phoronix montrent que l'écart de performance entre le code généré par gcc et llvm se resserre progressivement.<br />
Parallèlement, le projet Free-BSD <a href="http://www.phoronix.com/scan.php?page=news_item&px=MTEwMjI">annonce</a> que clang deviendra le compilateur C/C++ par défaut pour la version 10 … coïncidence ?</p></div><div><a href="https://linuxfr.org/news/llvm-3-1-et-conference-euro-llvm-2012.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/94109/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/news/llvm-3-1-et-conference-euro-llvm-2012#comments">ouvrir dans le navigateur</a>
</p>
nazcafanrewindbaud123Sylvestre LedruNÿcoFlorent Zarapatrick_gBenoît Sibaudhttps://linuxfr.org/nodes/94109/comments.atomtag:linuxfr.org,2005:Diary/305762010-12-15T20:08:38+01:002010-12-15T20:08:38+01:00Microsoft propose un plugin h264 pour Firefox
Nouvelle offensive dans la guerre des formats vidéos sur le web ? Microsoft annonce sur le blog de sa communauté open source la sortie d'un plugin permettant de visualiser les vidéos au format h264 sur Firefox (évidemment exclusivement sous Windows).<br />
<br />
Techniquement, l'entrée de leur blog explique qu'il s'agit d'une extension pour leur plugin Firefox Windows Media Player (oui, ça fait un peu rustine, quand on le lit comme ça).<br />
<br />
On peut s'interroger sur la manœuvre derrière la sortie de ce plugin. Est-ce vraiment pour promouvoir l'intéropérabilité, comme le prétend le blog, ou bien y a-t-il une forte volonté de mettre en difficulté le format concurrent, WebM, promu par Google ?<br />
<br />
On peut concéder que lorsqu'un format tel que h264 est présent (nativement ?) dans un système d'exploitation, il est tentant de permettre au browser de l'utiliser, surtout si on paye des des royalties à MPEG-LA, pour son inclusion dans le système (à confirmer).<br />
<br />
Je me demande également à quel point ça fragilise le libre : le grand «perdant» est-il l'écosystème linux, qui peut difficilement s'offrir la prise en charge de h-264 pour des raisons légales ?<br />
<br />
En conclusion, si quelqu'un a la configuration pour faire tourner tout ça, je suis bien curieux de savoir si ça permet de voir les vidéos h264 de Youtube avec Firefox.<br />
<br />
L'entrée en question : <br />
<a href="http://port25.technet.com/archive/2010/12/15/html5-video-and-interoperability-firefox-add-on-provides-h-264-support-on-windows.aspx">http://port25.technet.com/archive/2010/12/15/html5-video-and(...)</a><div><a href="https://linuxfr.org/users/nazcafan/journaux/microsoft-propose-un-plugin-h264-pour-firefox.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/56834/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/users/nazcafan/journaux/microsoft-propose-un-plugin-h264-pour-firefox#comments">ouvrir dans le navigateur</a>
</p>
nazcafanhttps://linuxfr.org/nodes/56834/comments.atomtag:linuxfr.org,2005:News/257632009-07-24T20:00:15+02:002009-07-24T20:00:15+02:00Retard(s) pour la prochaine version de C++<div>C'est maintenant officiel, la très attendue nouvelle version de C++, officieusement appelée C++0x s'appelle maintenant C++1x. Des difficultés importantes ont été rencontrées par le comité de normalisation concernant l'utilisation des concepts, une façon présentée comme plus sûre d'utiliser des templates. Il a été finalement été décidé de retirer les concepts du prochain standard.
<br />
<br />
La nouvelle mouture de C++, devrait être publiée en 2010 ou 2011</div><ul><li>lien nᵒ 1 : <a title="http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2009/n2893.pdf" hreflang="en" href="https://linuxfr.org/redirect/63223">problèmes avec les concepts</a></li><li>lien nᵒ 2 : <a title="http://www.ddj.com/cpp/218600111" hreflang="en" href="https://linuxfr.org/redirect/63224">Stroustrup sur la solution adoptée</a></li><li>lien nᵒ 3 : <a title="http://en.wikipedia.org/wiki/C%2B%2B_Technical_Report_1" hreflang="en" href="https://linuxfr.org/redirect/63225">le TR1 sur la wikipedia anglaise</a></li><li>lien nᵒ 4 : <a title="http://en.wikipedia.org/wiki/C%2B%2B0x" hreflang="en" href="https://linuxfr.org/redirect/63226">C++1x sur la wikipedia anglaise</a></li><li>lien nᵒ 5 : <a title="http://en.wikipedia.org/wiki/Concepts_(C%2B%2B0x)" hreflang="en" href="https://linuxfr.org/redirect/63230">La page Wikipedia sur les concepts C++</a></li></ul><div>Les concepts, attendus par beaucoup de développeurs, devaient permettre, entre autres, de réduire l'importante verbosité des erreurs de compilation lors de l'utilisation de classes template (notamment les conteneurs de la bibliothèque standard C++). Auparavant, le compilateur devait remonter toute la couche d'appels dans l'implémentation du conteneur, qui devenait alors visible au développeur. Les concepts devaient alors permettre de lever l'erreur beaucoup plus tôt. Un exemple est donné sur le site de la branche «concepts» de C++ :
<br />
<br />
<a href="http://www.generic-programming.org/software/ConceptGCC/">http://www.generic-programming.org/software/ConceptGCC/</a>
<br />
<br />
Évidemment, les concepts, c'est beaucoup plus qu'un compilateur moins verbeux. Il s'agit aussi d'une garantie sur le type générique utilisé dans une classe template et les amateurs de programmation générique se frottaient déjà les mains.
<br />
<br />
Malheureusement, de sérieux problèmes se sont mis sur la route du comité de normalisation. Un problème technique, lié aux concepts implicites, pouvant gêner l'utilisateur, d'abord, et surtout le fait que les développements des principales implantations des concepts (notamment gcc) sont au point mort.
<br />
<br />
Plusieurs décisions étaient envisageables, comme attendre encore 5 ans avant d'avoir un nouveau standard, ou bien sortir les concepts tels quels (et prendre le risque qu'ils passent à la trappe, comme le mot clé "export" du C++98). Il a été finalement décidé de les retirer pour ne pas impacter les autres changements tant attendus.
<br />
<br />
C++1x est actuellement partiellement pris en charge par plusieurs compilateurs. Du côté du « core language », on peut suivre l'évolution de la prise en charge par gcc sur la page suivante :
<br />
<a href="http://gcc.gnu.org/projects/cxx0x.html">http://gcc.gnu.org/projects/cxx0x.html</a>
<br />
<br />
Les aventureux pourront tester les nouveautés en ajoutant l'option «-std=c++0x» à l'invocation du compilateur.
<br />
<br />
La Nemesis de gcc, Visual Studio, n'est pas en reste et propose elle aussi une prise en charge, probablement présentée dans le lien suivant (video silverlight que je n'ai pas pu lire) :
<br />
<a href="http://www.microsoft.com/france/vision/mstechdays09/Webcast.aspx?EID=da289bd7-d4f1-4604-b564-7529a3267a1b">http://www.microsoft.com/france/vision/mstechdays09/Webcast.(...)</a>
<br />
Chez intel, un début de prise en charge :
<br />
<a href="http://www.intel.com/software/products/compilers/docs/clin/main_cls/copts/ccpp_options/option_std.htm">http://www.intel.com/software/products/compilers/docs/clin/m(...)</a>
<br />
<br />
Au niveau de la prise en charge des nouveautés de la bibliothèque standard, (TR1) on peut noter les avancées de gcc ici :
<br />
<a href="http://gcc.gnu.org/onlinedocs/libstdc++/manual/bk01pt01ch01.html#manual.intro.status.standard.tr1">http://gcc.gnu.org/onlinedocs/libstdc++/manual/bk01pt01ch01.(...)</a>
<br />
<br />
Il est tout à fait possible d'utiliser les classes de TR1 avec le standard C++ actuel en préfixant l'inclusion des headers par TR1. Les classes seront alors dans l'espace de nommage std::tr1. L'utilisation de l'option «-std=c++0x» permet de s'affranchir de ces formalités.
<br />
<br />
Dinkumware, fournisseur officiel de la bibliothèque standard C++ à la sauce visual, revendique quant à lui une prise en charge complète du TR1 :
<br />
<a href="http://www.dinkumware.com/tr1_compare.aspx">http://www.dinkumware.com/tr1_compare.aspx</a>
<br />
<br />
Les concepts mis à part, la prise en charge du nouveau standard par les principaux compilateurs est donc en bonne voie, ce qui est un atout majeur pour l'adoption de C++1x.</div><div><a href="https://linuxfr.org/news/retards-pour-la-prochaine-version-de-c.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/24809/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/news/retards-pour-la-prochaine-version-de-c#comments">ouvrir dans le navigateur</a>
</p>
nazcafanhttps://linuxfr.org/nodes/24809/comments.atomtag:linuxfr.org,2005:Diary/273612008-10-18T15:58:33+02:002008-10-18T15:58:33+02:00firefox 3.1 beta 1, du mieux ?
Bonjour, j'ai testé un petit peu le première beta de Firefox 3.1. Alors voici un mini-compte-rendu d'expérience à chaud :<br />
<br />
Déjà une grande avancée, le scroll est un peu plus léger que sur FF 3.0 avec le CSS par défaut de DLFP et la DLFP bar (cf ce <a href="https://linuxfr.org/~nazcafan/26694.html">journal précédent </a>). Sur mon Athlon XP 2200+, ça rame beaucoup moins (mais ce n'est pas encore aussi rapide que dans FF 2.0).<br />
<br />
Une des grandes nouveautés est le moteur Java-script (répondant au doux nom de Tracemonkey) qui vante des performances deux fois supérieures au précédent moteur. Il faut l'activer à la main dans about:config (c'est le champ javascript.options.jit.content). Bon alors pour ça, ce serait assez sympa que des lecteurs m'indiquent des sites où je pourrais constater une différence, au niveau de l'"expérience de butinage" (Dieu que ce terme est laid) : un bon gros site blindé d'Ajax, que sais-je ? <br />
<br />
Au niveau du support (sans flash, ni rien) de la balise vidéo de html 5, Vous pouvez tester ça sur <a href="http://tinyvid.tv/show/1cj41wsd2j0y2">ce site</a> [1]. Alors effectivement, OUI ça marche, mais bon, pour l'instant, le lecteur qui s'affiche comporte uniquement deux boutons : play-pause et un bouton volume qui n'a pas marché sur une Fedora 7 (pas moyen de naviguer ni de relancer la vidéo sans recharger la page ). Les développeurs web pourront me dire si l'interface du lecteur est fournie par le navigateur ou définie par le site web (c'est très flou, pour moi, ça). Dans le premier cas, il reste un peu de travail avant de penser concurrencer Adobe Flash sur le terrain de la vidéo sur le web.<br />
<br />
Un des points qui m'ont marqué est la gestion des fontes, qui bavent à mort sous Fedora 7 comparé à FF 3.0 (notamment les fontes en gras dans gmail). Sur la Debian testing, ça ne bave pas, mais j'ai remarqué que le <a href="http://en.wikipedia.org/wiki/Subpixel_rendering">rendu subpixellique</a> était désactivé. Gageons que ces défauts mineurs disparaîtront avec la version finale ou lors de l'intégration dans les distributions.<br />
<br />
Au niveau des "petits plus", le ctrl+tab qui affiche un aperçu des trois onglets : précédent+courant+suivant. Soyons francs : je n'aime pas Pourquoi ? parce qu'il n'y a pas moyen de se repérer dans l'ensemble des onglets. Quand on a beaucoup d'ongets, on est vite perdu, alors qu'avant, je pouvais savoir combien deCtrl+tab il me restait à faire avant d'arriver à l'onglet que je cherchais. Maintenant, je suis obligé de regarder l'aperçu à chaque appui de la touche . Ça doit dépendre des habitudes des utilisateurs, mais je pense que je le désactiverai si c'est possible.<br />
<br />
Il y a évidemment plein d'autres améliorations (notamment un moyen de différencier les propositions venant de l'historique de celles du marque pages sur la barre d'adresses). Vous pouvez lire la liste <a href="http://www.mozilla.com/en-US/firefox/3.1b1/releasenotes/">ici</a>. Enfin, si vous vous sentez l'âme d'un beta-testeur, c'est <a href="http://www.mozilla.com/en-US/firefox/all-beta.html">par là</a>.<br />
<br />
<br />
<br />
<br />
[1] C'est du hors sujet, mais je recommande chaudement d'y visionner la <a href="http://tinyvid.tv/show/1cj41wsd2j0y2">"bande annonce" de shining</a> (diponible aussi sur <a href="http://uk.youtube.com/watch?v=sfout_rgPSA">youtube</a> ) que je trouve énorme (il m'a fallu 5 minutes pour percuter ce que j'avais vu)<div><a href="https://linuxfr.org/users/nazcafan/journaux/firefox-31-beta-1-du-mieux.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/53720/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/users/nazcafan/journaux/firefox-31-beta-1-du-mieux#comments">ouvrir dans le navigateur</a>
</p>
nazcafanhttps://linuxfr.org/nodes/53720/comments.atomtag:linuxfr.org,2005:Diary/270742008-08-20T23:58:46+02:002008-08-20T23:58:46+02:00Sortie de pidgin 2.5.0
Et oui, pendant que certains s'adonnent au farniente à la plage, de courageux programmeurs continuent de coder pour vous, malgré la chaleur accablante !!<br />
<br />
Certains attendaient avec impatience la sortie de cette nouvelle mouture de pidgin, votre client de messagerie instantanée préféré . <br />
<br />
En effet, entre autres améliorations, il y a (enfin) le support de la dernière version du protocole propriétaire (boouuh !! ) msn.<br />
L'intérêt pour l'utilisateur n'ayant pas réussi à convertir ses amis non-libristes à jabber est la prise en charge des messages hors ligne et du texte d'état.<br />
<br />
Ceci était en développement depuis plusieurs années mais avait été remis aux calendes à plusieurs reprises, cf le blog de John Bailey, un des développeurs : <br />
<br />
<a href="http://theflamingbanker.blogspot.com/2008/07/state-of-msn-plugin-address.html">http://theflamingbanker.blogspot.com/2008/07/state-of-msn-pl(...)</a><br />
<br />
Le meilleure distribution du monde étant actuellement en freeze, à vos compilos ! vous pouvez télécharger les sources ici :<br />
<br />
<a href="http://www.pidgin.im/download/source/">http://www.pidgin.im/download/source/</a><br />
<br />
Pour le changelog complet, c'est par là :<br />
<br />
<a href="http://developer.pidgin.im/wiki/ChangeLog">http://developer.pidgin.im/wiki/ChangeLog</a><div><a href="https://linuxfr.org/users/nazcafan/journaux/sortie-de-pidgin-250.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/53442/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/users/nazcafan/journaux/sortie-de-pidgin-250#comments">ouvrir dans le navigateur</a>
</p>
nazcafanhttps://linuxfr.org/nodes/53442/comments.atomtag:linuxfr.org,2005:Diary/267612008-06-09T13:32:21+02:002008-06-09T13:32:21+02:00Signal Spam, peut-on leur faire confiance ? Cher journal,<br />
<br />
Agacé de plus en plus devant la recrudescence de Spams dans ma langue natale, souvent vantant les mérites de compagnies ayant clairement pignon sur rue dans mon propre pays, c'est avec satisfaction que j'ai vu arriver sur la toile, il y a environ un an, l<br />
a plate forme "signal-spam", (lancement relayé par quelques médias, comme le monde ).<br />
<br />
Ce site permettrait de contribuer à la lutte anti-spam en les signalant et éventuellement en intentant des actions en justice ou/et en rappelant à l'ordre certaines compagnies peu soucieuses de certaines lois sur le spam.<br />
<br />
Déjà, comme on me l'a fait remarquer, la liste des partenaires est assez importante (microsoft, la poste, la banque de France, ...). Elle présente des grands nomps de l'informatique des institutions, la gendarmerie et compagnie ..).<br />
<br />
Oui, mais voilà, ça va faire presque un an que le site a été mis en ligne et pour l'instant, pas l'ombre d'un résultat concret sur la lutte anti-pourriel annoncé par ledit site web (à part le renforcement du partenariat avec Microsoft).<br />
<br />
Par ailleurs, le site annonce dans la FAQ qu'en se loggant, on peut voir à quoi on servi les <span>dénonciations</span> signalements :<br />
<br />
<cite><br />
Une fois inscrit, vous pouvez suivre sur votre espace privé en ligne les signalements que vous avez effectués.<br />
<br />
Vous pouvez ainsi connaître le traitement réalisé par Signal Spam et la contribution de vos signalements à la lutte contre le spam. <br />
</cite><br />
<br />
Bon, ben après m'être inscrit (je vais peut-être le regretter) j'ai été sur leur super plate forme pour voir de quoi il en retournait et, en gros, sur les quelques spams que j'avais dénoncés, j'ai eu droit à un laconique "traité". C'est loin de ce à quoi je m'attendais...<br />
<br />
Maintenant, autre point qui me semble étrange, un article a été publié, il y a un an déjà, incitant l'internaute à la prudence :<br />
<br />
<a href="http://www.generation-nt.com/commenter/signal-spam-courrier-indesirable-actualite-42410.html">http://www.generation-nt.com/commenter/signal-spam-courrier-(...)</a><br />
<br />
Cet article explique notamment que le directeur de l'association, Dominique Roux, est aussi (entre autres, cf <a href="http://fr.wikipedia.org/wiki/Dominique_Roux ">wikipedia</a>) fondateur de la société 1000mercis, spécialisée dans l'envoi massif d'e-mails publicitaires ...<br />
<br />
Alors, théorie du complot et paranoia totale de ma part ou alors doutes justifiés ? Une boîte spécialisée dans les spams aurait-elle réalisé l'exploit de blouser la gendarmerie nationale, la CNIL, MS et Mahatma Ghandi en créant une assoce de toutes pièces pour récolter des adresses ou alors tout au contraire, c'est une compagnie spécialisée dans les envois publicitaires qui veut favoriser la bonne conduite et montrer qu'on peut être "bon élève" en matière d'envoi massif d'e-mails.<br />
<br />
En tout cas, tout complément d'informations serait le bienvenu.<br />
<br />
<br />
P.S. En attendant, pour en avoir le cœur net, j'ai décidé d'appeler la gendarmerie pour qu'ils me confirment leur partenariat avec signal-spam (la personne responsable est occupée, je rappelerai en début d'après-midi).<div><a href="https://linuxfr.org/users/nazcafan/journaux/signal-spam-peut-on-leur-faire-confiance.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/53140/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/users/nazcafan/journaux/signal-spam-peut-on-leur-faire-confiance#comments">ouvrir dans le navigateur</a>
</p>
nazcafanhttps://linuxfr.org/nodes/53140/comments.atomtag:linuxfr.org,2005:Diary/266942008-05-27T20:22:04+02:002008-05-27T20:22:04+02:00Scroller quand t'es loggué
Cher journal, depuis quelque temps déjà, je teste firefox 3 beta puis RC, plus rapide pour afficher les pages plus réactif, plus qu'il est mieux, quoi !<br />
<br />
Et c'est vrai qu'il affiche plus vite et que quand tu scrolles (la petite roulette de la souris) il est souvent plus fluide (on me dit en coulisse que les CSS sont mieux gérés...). <br />
<br />
Néanmoins, j'ai noté un site sur lequel le FF3, eh bien il est encore pas mal dans les choux quand tu scrolles. Il s'agit de dlfp, sur les commentaires des journaux, dépèches et autres, <b>mais uniquement quand je suis loggué</b>. <br />
Quand je ne suis pas loggué, ça va bien, c'est super fluide et le moulage est un plaisir sans bornes. <br />
Bon, pour le coup, j'ai aussi essayé avec FF2, eh bien ça rame aussi (peut être un poil plus, en fait).<br />
<br />
Vous qui utilisez d'autres machines, OS butineurs libres et non libres, ça rame aussi, chez vous, le scroll quand vous êtes loggués ?<br />
<br />
pour info (faut comparer ce qui est comparable), sur ma machine, cpuinfo donne 4 Xeons à 3Ghz, mais c'est peut être un quadricore ou quelque chose dans ce goût.<br />
<br />
Ah oui, j'utilise le CSS par défaut, peut être que d'autres CSS sont moins "lourds" à afficher ? J'essaierai à l'occasion<div><a href="https://linuxfr.org/users/nazcafan/journaux/scroller-quand-tes-loggu%C3%A9.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/53074/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/users/nazcafan/journaux/scroller-quand-tes-loggu%C3%A9#comments">ouvrir dans le navigateur</a>
</p>
nazcafanhttps://linuxfr.org/nodes/53074/comments.atomtag:linuxfr.org,2005:Diary/255302007-10-23T16:58:48+02:002007-10-23T16:58:48+02:00Travaux Publics dt VideolanBonjour à tous,<br />
<br />
Aujourd'hui, j'ai remarqué au cours de travaux sur l'autoroute la floraison d'objets coniques qui sont clairement un plagiat du logo de VLC. <br />
Pourtant le copyright du logo est formel, il doit être utilisé uniquement dans un contexte de référence au projet VLC :<br />
<br />
<a href="http://wiki.videolan.org/Frequently_Asked_Questions#May_I_use_the_VideoLAN_logo.3F">http://wiki.videolan.org/Frequently_Asked_Questions#May_I_us(...)</a><br />
<br />
Qu'en est-il de la position du projet VLC ? Une action en justice contre les travaux publics de l'État est-elle envisageable ?<br />
<br />
Bonne journée<div><a href="https://linuxfr.org/users/nazcafan/journaux/travaux-publics-dt-videolan.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/51932/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/users/nazcafan/journaux/travaux-publics-dt-videolan#comments">ouvrir dans le navigateur</a>
</p>
nazcafanhttps://linuxfr.org/nodes/51932/comments.atomtag:linuxfr.org,2005:Diary/225652006-09-04T13:04:52+02:002006-09-04T13:04:52+02:00Nous vérifions que vous n'êtes pas un bot ...Cher journal, <br />
<br />
Je me suis aperçu aujourd'hui en voulant plusser un commentaire marrant sur la compilation répartie et la distribution gentoo, que dorénavant il fallait recopier des mots cabalistiques pour pouvoir valider un plussage ou un moinsage.<br />
J'en déduis deux choses<br />
<br />
1°) Il y a des gens suffisamment tarés pour avoir écrit des scripts automatiques de plussage et moinsage, liés j'imagine à des comptes fantômes. Ma confiance en mon prochain vient d'en prendre un coup.<br />
<br />
2°) C'est quand même un peu laborieux de devoir recopier des trucs pareils pour un simple plussage sur un commentaire.<br />
<br />
J'en appelle à tous les lecteurs de dlfp qui auraient une idée pour pouvoir contrôler la botitude d'un plussage sans toutefois causer un désagrément (certes mineur, mais présent toutefois) qu'est la recopie de séries de lettres et nombres aléatoires.<br />
<br />
Bonne rentrée à tous<div><a href="https://linuxfr.org/users/nazcafan/journaux/nous-v%C3%A9rifions-que-vous-n%C3%AAtes-pas-un-bot.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/49025/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/users/nazcafan/journaux/nous-v%C3%A9rifions-que-vous-n%C3%AAtes-pas-un-bot#comments">ouvrir dans le navigateur</a>
</p>
nazcafanhttps://linuxfr.org/nodes/49025/comments.atom