公式リリースLLVM 3.3

Clang / LLVMの開発を厳密に監視していない人のために、バージョン3.3がリリースされたことをお知らせします。 LLVMは飛躍的に成長を続けており、前述のように、新しいリリースはすべてのC ++ 11機能をサポートする最初のものであり、多数の新しいターゲットのサポートを追加し、LLVMインフラストラクチャに基づいたいくつかの興味深いツールが登場しました。 オプティマイザーも開発を続けています-デフォルトで-O3で動作するオートベクトライザーが登場し、既存の最適化を改善するために多くのことが行われました。 詳細に興味のある方-猫へようこそ。



C ++ 11のサポートから始めましょう。 たとえば、std :: regexなどの重要な機能のライブラリサポートを含む完全なサポートが宣言されています。 トランクでのC ++ 11の作業の完了は4月にLLVMブログで発表され、現在、フロントエンドの開発者はC ++ 1yと呼ばれる次の標準のドラフトのサポートに忙しく取り組んでいます。 彼らは、C ++ 11のリリース後にいくつかの迷惑な欠陥があったと言います。BjörnStraustrupは、すべての機能が少なくとも1つのコンパイラーで実装されるまで新しい標準をリリースしないと述べました。 したがって、残っているのは、clang開発者の活動を歓迎することだけです。



既存のプロジェクトで今すぐC ++ 11を使用する準備ができている人のために、特別なC ++ 11移行ツールが提供されています。 このユーティリティを使用すると、古いループを範囲ベースのforループに自動的に変換し、ポインターをゼロで初期化する代わりにnullptrの使用を調整し、必要に応じて変数宣言の型をautoに変更し、仮想関数宣言にオーバーライドを追加できます。 このツールはIntelの従業員が開発したものであり、AppleやGoogleとともにLLVMにより多くの投資を始めていることを喜ばしく思います。



Clangのオープン性と拡張性によって可能になったもう1つの興味深いツールはclang-formatです 。 指定されたスタイルに従ってソースコードをフォーマットできますが、Clangのさまざまなコンポーネントを使用して、完全に再フォーマットするのに十分なコードの構文構造に関する情報を受け取るという点で類似点とは異なります(ほとんど例外があります:コードの論理ブロックを分割する空白行を残し、コメントエンティティへのコメントのバインドを維持できます。 同時に、clang-formatはClangパーサーを完全には使用しないため、正しいC ++コードに類似したソースのフラグメントに使用できます。 また、Cの時代に比較的単純なアプローチで対応できた場合、C ++の構文構造が豊富であり、コンテキストに依存しているため、このようなツールのコードをかなり深く理解する必要があります。 詳細に興味がある場合は、会議のビデオをご覧になることをお勧めします。開発者の1人がこのツールについて話します: 会議資料 、「clang-format-C ++の自動フォーマット」を探してください。 ちなみに、VimとEmacsのプラグインも利用でき、その場でテキストをフォーマットできます。



オプティマイザーも追加されました。 主な技術革新は、ループ自動ベクトル化機能で、デフォルトでは-O3で有効になっています。 ご存知のように、Appleは1年ほど前に、自動ベクトル化ツールの作成を積極的に推進し始めました。今、これらの取り組みの最初の成果を見ることができます。 プロジェクトのステータスを客観的に評価することは、市場で入手可能な最高のx86オートベクタイザー(Intel Compilerで実装)であっても、長年の開発やGCCとの競争においても初心者には有利ではありませんが、比較的単純なソリューションでもユーザーに提供できることに注意してください顕著な利点。 結局のところ、ご存知のとおり、結果の80%が作業の20%を達成しています。 そして、インテルへの愛情で彼らを私に蹴り込ませないでください。多くの人がこの評価に同意すると思います。



最適化の小さな改善点をリストしても意味がありません。 スカラーの最適化に関して、ClangはGCCとIntel Compilerの両方と議論する準備ができており、時にはこれらの最適化バイソンに勝ると言います。 LTO(リンク時間の最適化)も非常に良い感じがしますが、結果は良好ですが、アーキテクトの1人は、まだ解決する必要がある根本的な問題があることを認めています。 このような大胆な発言に興味をそそられたので、同会議で同志チャンドラーの基調講演「LLVMでの最適化-数字、ケーススタディ、および将来の展望」をご覧になることをお勧めします。



リリースノートでは、Clangの強みの1つが驚くほど迂回されました-卓越した精度と診断の詳細は、彼らも引き続き取り組んでいます(率直に言って、このような競合他社を背景に、GCC開発者は恥ずかしく、この方向でもうまくいきました)。 動的コード検証ツールのファミリー、いわゆるサニタイザーも追加されています-Address-およびThread-に加えて、 MemorySanitizerが追加されました。 静的コードチェックを使用する人にとっても良いニュースです。ClangStatic Analyzerは、いくつかの新しいタイプのチェックをサポートし、C ++コンストラクターとデストラクターの境界を越えて歩くことができます。



新しいリリースには、新しいターゲットのサポートが含まれています。最も注目すべきは、AArch64とAMD R600 GPUです。 リストにはIBMのz / Architecture S390もあります。そのようなアーキテクチャのサポートは、すでにコンパイラの成熟度のアプリケーションです。 誰かが大幅に改善されたPowerPCバックエンドとMIPSサポートに興味があるかもしれません。



公式リリースノートはここから入手できます 。さまざまなプラットフォーム用のコンパイラはこちらからダウンロードできます



All Articles