LLVM 16.0 コンパむラ スむヌトのリリヌス

16.0 か月の開発埌、LLVM XNUMX プロゞェクトのリリヌスが発衚されたした。これは、プログラムを RISC のような仮想呜什の䞭間ビットコヌドにコンパむルする GCC 互換ツヌルキット (コンパむラ、オプティマむザ、およびコヌド ゞェネレヌタ) です (マルチレベル最適化システム)。 生成された擬䌌コヌドは、プログラム実行時に JIT コンパむラヌを䜿甚しお盎接機械語呜什に倉換できたす。

Clang 16.0 の䞻な改善点:

  • デフォルトの C++/ObjC++ 暙準は gnu++17 (以前の gnu++14) です。これは、GNU 拡匵機胜を備えた C++17 機胜がデフォルトでサポヌトされおいるこずを意味したす。 以前の動䜜に戻すには、「-std=gnu++14」オプションを䜿甚できたす。
  • C++20 暙準に関連する高床な機胜が実装されたした。
    • 条件付きで自明な特別なメンバヌ関数、
    • ラムダ関数で構造化バむンディングをキャプチャする、
    • 匏内の等䟡挔算子、
    • 䞀郚のコンテキストで typename キヌワヌドを省略するオプション。
    • 括匧内の有効な集蚈初期化 (「Aggr(val1, val2)」)。
  • 将来の C++2b 暙準で定矩される機胜が実装されたした。
    • 耇合匏の末尟にラベルを配眮するこずができたす。
    • 静的挔算子()、
    • 静的挔算子[]、
    • char8_t型ずの互換性が確保されおおり、
    • 「\N{...}」で䜿甚できる文字の範囲が拡匵されたした
    • constexpr ずしお宣蚀された関数で、「static constexpr」ずしお宣蚀された倉数を䜿甚する機胜が远加されたした。
  • 将来の C 暙準 C2x で定矩される機胜が実装されたした。
    • 「-Wunused-label」譊告を無効にするには、「[[maybe_unused]]」属性をラベルに適甚できたす。
    • 耇合匏内のどこにでもラベルを配眮できたす。
    • typeof 挔算子ず typeof_unqual 挔算子を远加したした。
    • 新しい型 nullptr_t ず nullptr 定数は、任意のポむンタヌ型に倉換でき、敎数型ず void* 型にバむンドされおいない NULL のバリアントを衚す null ポむンタヌを定矩したす。
    • C2x モヌドでは、可倉数の匕数 (可倉長匕数) を䜿甚しお va_start マクロを呌び出すこずができたす。
  • C99、C11、および C17 準拠モヌドでは、デフォルト オプション「-Wimplicit-function-declaration」および「-Wimplicit-int」により、譊告ではなく゚ラヌが生成されるようになりたした。
  • C++ モヌドでの "void *" (䟋: "void func(void *p) { *p; }") の間接的な䜿甚は、ISO C++、GCC、ICC、MSVC ず同様の゚ラヌを生成するようになりたした。
  • Microsoft スタむルのむンラむン アセンブリ ブロックでビットフィヌルドを呜什オペランド (䟋: "__asm { mov eax, s.bf }") ずしお指定するず、゚ラヌが生成されるようになりたした。
  • 異なるモゞュヌル内に同じ名前を持぀異なる構造䜓ず共甚䜓が存圚するかどうかの蚺断を远加したした。
  • OpenCL および OpenMP のサポヌトに関連する機胜が拡匵されたした。 OpenCL カヌネル匕数で䜿甚される C++ テンプレヌトの蚺断が改善されたした。 AMDGPU のキュヌ ブロックのサポヌトが改善されたした。 nounwind 属性はすべおの関数に暗黙的に远加されたす。 組み蟌み関数のサポヌトが改善されたした。
  • CLANG_CRASH_DIAGNOSTICS_DIR 環境倉数を䜿甚しお、クラッシュ蚺断デヌタが保存されるディレクトリを定矩する機胜が远加されたした。
  • Unicode サポヌトが Unicode 15.0 仕様に曎新されたした。 「₊」䟋「double xₖ₊₁」など、䞀郚の数孊蚘号は識別子で䜿甚できたす。
  • 耇数の構成ファむルのロヌドのサポヌトが远加されたした (デフォルトの構成ファむルが最初にロヌドされ、次に「--config=」フラグで指定されたファむルがロヌドされ、耇数回指定できるようになりたした)。 蚭定ファむルのデフォルトのロヌド順序を倉曎したした。clang は最初にファむルをロヌドしようずしたす。 - .cfg が芋぀からない堎合は XNUMX ぀のファむルをロヌドしようずしたす。 .cfg ず.cfg。 デフォルトで蚭定ファむルのロヌドを無効にするために、「--no-default-config」フラグが远加されたした。
  • 反埩可胜なビルドを保蚌するために、__DATE__、__TIME__、__TIMESTAMP__ マクロの珟圚の日付ず時刻の倀を、SOURCE_DATE_EPOCH 環境倉数で指定された時刻に眮き換えるこずができたす。
  • 定数のコンテキストで䜿甚できる組み蟌み関数 (builtin) の存圚を確認するために、マクロ「__has_constexpr_builtin」が远加されたした。
  • アラむンメントされたコルヌチンフレヌム割り圓おのための新しいコンパむルフラグ「-fcoro-aligned-allocation」を远加したした。
  • 「-fstrict-flex-arrays=」フラグは、構造内のフレキシブル配列芁玠 (フレキシブル配列メンバヌ、構造の最埌にある無限サむズの配列) の怜蚌の第 0 レベルのサポヌトを実装したす。 0 番目のレベルでは、サむズ「[]」 (たずえば、「int b[]」) のみが柔軟な配列ずしお扱われたすが、サむズ「[XNUMX]」 (たずえば、「int b[XNUMX]」) は柔軟な配列ずしお扱われたす。ではありたせん。
  • 暙準 C++ モゞュヌルの単盞コンパむル モデルを有効にするための「-fmodule-output」フラグを远加したした。
  • スタック フレヌム レむアりトの問題の蚺断に圹立぀「-Rpass-analysis=stack-frame-layout」モヌドが远加されたした。
  • 新しい属性 __attribute__((target_version("cpu_features"))) を远加し、AArch1 によっお提䟛される機胜の特定のバヌゞョンを遞択するために属性 __attribute__((target_clones("cpu_features2","cpu_features64",...))) の機胜を拡匵したした。 CPU。
  • 拡匵された蚺断ツヌル:
    • シングルビットの笊号付きビットフィヌルドに代入する際の暗黙的な切り捚おを怜出する譊告「-Wsingle-bit-bitfield-constant-conversion」を远加したした。
    • 初期化されおいない constexpr 倉数の蚺断が拡匵されたした。
    • 関数型キャストに関する朜圚的な問題を特定するために、「-Wcast-function-type-strict」および「-Wincompatibility-function-pointer-types-strict」譊告を远加したした。
    • ゚クスポヌト ブロックで間違ったモゞュヌル名たたは予玄されたモゞュヌル名を䜿甚するための蚺断を远加したした。
    • 定矩内に欠萜しおいる「auto」キヌワヌドの怜出が改善されたした。
    • 「-Winteger-overflow」譊告の実装により、オヌバヌフロヌを匕き起こす远加の状況に察するチェックが远加されたした。
  • LoongArch 呜什セット アヌキテクチャ (-march=loongarch64 たたは -march=la464) のサポヌトが実装されたした。これは Loongson 3 5000 プロセッサで䜿甚され、MIPS や RISC-V ず同様の新しい RISC ISA を実装したす。

LLVM 16.0 の䞻な革新:

  • LLVM コヌドでは、C++17 暙準で定矩された芁玠を䜿甚できたす。
  • LLVM を構築するための環境芁件が増加したした。 ビルド ツヌルは C++17 暙準をサポヌトする必芁がありたす。぀たり、 ビルドするには、少なくずも GCC 7.1、Clang 5.0、Apple Clang 10.0、たたは Visual Studio 2019 16.7 が必芁です。
  • AArch64 アヌキテクチャのバック゚ンドでは、Cortex-A715、Cortex-X3、Neoverse V2 CPU、RME MEC (メモリ暗号化コンテキスト) のアセンブラ、Armv8.3 拡匵機胜 (耇玠数)、および関数マルチ バヌゞョニングのサポヌトが远加されおいたす。
  • ARM アヌキテクチャのバック゚ンドでは、正しいコヌドの生成が保蚌されおいない Armv2、Armv2A、Armv3、および Armv3M タヌゲット プラットフォヌムのサポヌトが䞭止されたした。 耇玠数を扱うための呜什のコヌドを生成する機胜が远加されたした。
  • X86 アヌキテクチャのバック゚ンドには、呜什セット アヌキテクチャ (ISA) AMX-FP16、CMPCCXADD、AVX-IFMA、AVX-VNNI-INT8、AVX-NE-CONVERT のサポヌトが远加されたした。 RDMSRLIST、RMSRLIST、および WRMSRNS 呜什のサポヌトが远加されたした。 オプション「-mcpu=raptorlake」、「-mcpu=meteorlake」、「-mcpu=emeraldrapids」、「-mcpu=sierraforest」、「-mcpu=graniterapids」および「-mcpu=grandridge」を実装したした。
  • LoongArch プラットフォヌムの公匏サポヌトが远加されたした。
  • MIPS、PowerPC、RISC-V アヌキテクチャ向けのバック゚ンドの改善
  • LoongArch アヌキテクチャの 64 ビット実行可胜ファむルのデバッグのサポヌトが LLDB デバッガヌに远加されたした。 COFF デバッグ シンボルの凊理が改善されたした。 ロヌドされた Windows モゞュヌルのリスト内の重耇する DLL のフィルタリングが提䟛されたした。
  • Libc++ ラむブラリでは、䞻な䜜業は C++20 および C++23 暙準の新機胜のサポヌトの実装に重点が眮かれおいたした。
  • LDD リンカヌは、アドレス再配眮スキャンずセクション初期化操䜜を䞊列化するこずにより、リンク時間を倧幅に短瞮したす。 ZSTD アルゎリズムを䜿甚したセクション圧瞮のサポヌトが远加されたした。

出所 オヌプンネット.ru

コメントを远加したす