經過短短六個月的開發, 發射 項目的新版本 LLVM 16.0,其中實施了大量更改和改進的版本。
對於那些不熟悉 LLVM 的人,你應該知道這個 是 GCC 兼容的編譯器 (編譯器、優化器和代碼生成器)將程序編譯成類似 RISC 的虛擬指令中間位碼(具有多級優化系統的低級虛擬機)。
生成的偽代碼可以在程序執行時由 JIT 編譯器轉換為機器指令。
LLVM 16.0的主要新功能
在這個呈現的新版本中,我們可以發現幾個重要的改進 在 16.0 中, 其中默認的 C++/ObjC++ 標準脫穎而出, 設置為 gnu++17 (以前是 gnu++14),其中 暗示默認支持帶有 GNU 擴展的 C++17 特性. LLVM 代碼中允許使用 C++17 標準中定義的元素。
另一個突出的變化是它已被添加 支持 Cortex-A715、Cortex-X3 和 Neoverse CPU AArch2 後端的 V8.3、Armv64 擴展和多版本功能。
La 平台兼容性 Armv2、Armv2A、Armv3 和 Armv3M 已停產 在 ARM 架構後端中,不能保證正確的代碼生成。 添加了為使用複數的指令生成代碼的功能,並添加了 架構支持 指令集 (ISA) AMX-FP16、CMPCXADD、AVX-IFMA、AVX-VNNI-INT8、AVX-NE-CONVERT 到 X86 後端。
除此之外, 增加了構建 LLVM 的要求, 此外,構建現在應該與 C++17 標準兼容,即構建至少需要 GCC 7.1、Clang 5.0、Apple Clang 10.0 或 Visual Studio 2019 16.7。
另一方面也凸顯 改進了 MIPS、PowerPC 和 RISC-V 架構的後端,以及支持將 LoongArch 架構的 64 位可執行文件調試到 LLDB 調試器,並改進了對 COFF 調試符號的處理。
其他變化 脫穎而出:
- 在 Libc++ 庫中,主要工作集中在實現對 C++20 和 C++23 標準新特性的支持。
- 通過並行地址重定位掃描和段初始化操作,LDD 鏈接器中的鏈接時間已顯著減少。 添加了對使用 ZSTD 算法的節壓縮的支持。
- 還突出顯示了使用 C++20 標準實現的高級功能。
- 捕獲 lambda 函數中的結構化鏈接。
- 表達式中的相等運算符。
- 能夠在某些情況下不指定 typename 關鍵字,
- 在括號之間添加初始化的允許性(“Aggr(val1,val2)”)。
- 實現了未來 C++2b 標準中定義的功能。
- char8_t 類型提供的支持,
- 擴展了允許在“\N{…}”中使用的字符範圍,
- 添加了在聲明為 constexpr 的函數中使用聲明為“static constexpr”的變量的功能。
- 未來 C2x C 標準中定義的已實現功能:
- 添加了對加載多個配置文件的支持(首先加載默認配置文件,然後是通過“–config=”標誌指定的配置文件,現在可以多次指定)。
- 更改了默認配置文件的加載順序:clang 嘗試首先加載文件- .cfg 如果找不到它,它會嘗試加載兩個文件.cfg 和.cfg.
- 添加了一個新的構建標誌“-fcoro-aligned-allocation”用於常規幀對齊分配。
- 添加了“-fmodule-output”標誌以啟用標準 C++ 模塊的單階段構建模型。
- 添加模式“-Rpass-analysis=stack-frame-layout”以診斷堆棧幀佈局問題。
- 添加了一個新的 __attribute__((target_version("cpu_features"))) 屬性並擴展了 __attribute__((target_clones("cpu_features1″,"cpu_features2",…))) 屬性的功能以選擇 CPU AArch64 提供的特定版本的功能.
- 增強的診斷工具:
- 添加了警告“-Wsingle-bit-bitfield-constant-conversion”以在將一個分配給一位帶符號的位域時捕獲隱式截斷。
- 未初始化的 constexpr 變量的擴展診斷。
- 添加了“-Wcast-function-type-strict”和“-Wincompatible-function-pointer-types-strict”警告以捕獲轉換函數類型的潛在問題。
終於 如果您有興趣了解更多信息, 您可以在中查看詳細信息 以下鏈接。