Rilis paket kompiler LLVM 16.0

Setelah enam bulan pengembangan, rilis proyek LLVM 16.0 disajikan - perangkat yang kompatibel dengan GCC (kompiler, pengoptimal, dan pembuat kode) yang mengkompilasi program ke dalam bitcode perantara dari instruksi virtual mirip RISC (mesin virtual tingkat rendah dengan sistem optimasi multi-level). Pseudocode yang dihasilkan dapat diubah menggunakan kompiler JIT menjadi instruksi mesin secara langsung pada saat eksekusi program.

Peningkatan besar di Dentang 16.0:

  • Standar C++/ObjC++ default adalah gnu++17 (sebelumnya gnu++14), yang berarti fitur C++17 dengan ekstensi GNU didukung secara default. Untuk mengembalikan perilaku sebelumnya, Anda dapat menggunakan opsi "-std=gnu++14".
  • Mengimplementasikan fitur-fitur canggih yang terkait dengan standar C++20:
    • Fungsi anggota khusus yang sepele secara kondisional,
    • menangkap ikatan terstruktur dalam fungsi lambda,
    • Operator persamaan di dalam ekspresi,
    • Pilihan untuk menghilangkan kata kunci typename dalam beberapa konteks,
    • Inisialisasi agregat yang valid dalam tanda kurung (“Aggr(val1, val2)”).
  • Fitur yang ditentukan dalam standar C++2b masa depan telah diterapkan:
    • Diperbolehkan menempatkan label di akhir ekspresi majemuk,
    • operator statis(),
    • operator statis[],
    • Kompatibilitas dengan tipe char8_t dipastikan,
    • Rentang karakter yang diperbolehkan untuk digunakan dalam "\N{...}" telah diperluas
    • Menambahkan kemampuan untuk menggunakan variabel yang dideklarasikan sebagai "konstexpr statis" dalam fungsi yang dideklarasikan sebagai constexpr.
  • Fitur-fitur yang ditentukan di masa depan C-standar C2x telah diterapkan:
    • Untuk menonaktifkan peringatan "-Wunused-label", atribut "[[maybe_unused]]" diperbolehkan untuk diterapkan pada label
    • Diperbolehkan menempatkan label di mana saja dalam ekspresi majemuk,
    • Menambahkan operator typeof dan typeof_unqual,
    • Tipe baru nullptr_t dan konstanta nullptr untuk mendefinisikan pointer null yang dapat mengonversi ke tipe pointer apa pun dan mewakili varian NULL yang tidak terikat pada tipe integer dan void*.
    • Dalam mode C2x, pemanggilan makro va_start dengan sejumlah argumen yang bervariasi (variadik) diperbolehkan.
  • Dalam mode kepatuhan C99, C11, dan C17, opsi default "-Wimplicit-function-declaration" dan "-Wimplicit-int" kini menghasilkan kesalahan, bukan peringatan.
  • Penggunaan "void *" secara tidak langsung (misalnya "void func(void *p) { *p; }") dalam mode C++ sekarang menghasilkan kesalahan, mirip dengan ISO C++, GCC, ICC, dan MSVC.
  • Menentukan bitfield sebagai operan instruksi (misalnya "__asm ​​​​{ mov eax, s.bf }") di blok perakitan inline gaya Microsoft sekarang menghasilkan kesalahan.
  • Menambahkan diagnostik untuk keberadaan struktur dan gabungan berbeda dengan nama yang sama di modul berbeda.
  • Kemampuan yang terkait dengan dukungan OpenCL dan OpenMP telah diperluas. Peningkatan diagnostik untuk templat C++ yang digunakan dalam argumen kernel OpenCL. Peningkatan dukungan blok antrian untuk AMDGPU. Atribut nounwind secara implisit ditambahkan ke semua fungsi. Peningkatan dukungan untuk fungsi bawaan.
  • Menambahkan kemampuan untuk menggunakan variabel lingkungan CLANG_CRASH_DIAGNOSTICS_DIR untuk menentukan direktori tempat data diagnostik kerusakan disimpan.
  • Dukungan Unicode telah diperbarui ke spesifikasi Unicode 15.0. Beberapa simbol matematika diperbolehkan dalam pengidentifikasi, seperti "₊" (misalnya "double xₖ₊₁").
  • Menambahkan dukungan untuk memuat beberapa file konfigurasi (file konfigurasi default dimuat terlebih dahulu, dan kemudian file yang ditentukan melalui flag “--config=”, yang sekarang dapat ditentukan beberapa kali). Mengubah urutan pemuatan default file konfigurasi: dentang mencoba memuat file terlebih dahulu - .cfg, dan jika tidak ditemukan ia mencoba memuat dua file .cfg dan .cfg. Untuk menonaktifkan pemuatan file konfigurasi secara default, tanda “--no-default-config” telah ditambahkan.
  • Untuk memastikan pembangunan berulang, dimungkinkan untuk mengganti nilai tanggal dan waktu saat ini di makro __DATE__, __TIME__ dan __TIMESTAMP__ dengan waktu yang ditentukan dalam variabel lingkungan SOURCE_DATE_EPOCH.
  • Untuk memeriksa keberadaan fungsi bawaan (builtin) yang dapat digunakan dalam konteks konstanta, makro “__has_constexpr_builtin” telah ditambahkan.
  • Menambahkan tanda kompilasi baru "-fcoro-aligned-allocation" untuk alokasi bingkai coroutine yang selaras.
  • Bendera “-fstrict-flex-arrays=” mengimplementasikan dukungan untuk pemeriksaan tingkat ketiga untuk elemen array fleksibel dalam struktur (Anggota Array Fleksibel, array dengan ukuran tidak terbatas di akhir struktur). Pada tingkat ketiga, hanya ukuran "[]" (misalnya, "int b[]") yang diperlakukan sebagai array fleksibel, tetapi ukuran "[0]" (misalnya, "int b[0]") tidak.
  • Menambahkan tanda "-fmodule-output" untuk mengaktifkan model kompilasi fase tunggal untuk modul C++ standar.
  • Menambahkan mode "-Rpass-analisis=stack-frame-layout" untuk membantu mendiagnosis masalah dengan tata letak bingkai tumpukan.
  • Menambahkan atribut baru __attribute__((target_version("cpu_features"))) dan memperluas fungsionalitas atribut __attribute__((target_clones("cpu_features1","cpu_features2",...))) untuk memilih versi fitur tertentu yang disediakan oleh AArch64 CPU.
  • Alat diagnostik diperluas:
    • Menambahkan peringatan "-Wsingle-bit-bitfield-constant-conversion" untuk mendeteksi pemotongan implisit saat menugaskan satu ke bitfield bertanda tangan bit tunggal.
    • Diagnostik variabel constexpr yang tidak diinisialisasi telah diperluas.
    • Menambahkan peringatan "-Wcast-function-type-strict" dan "-Winkompatibel-function-pointer-types-strict" untuk mengidentifikasi potensi masalah dengan casting tipe fungsi.
    • Menambahkan diagnostik untuk menggunakan nama modul yang salah atau dicadangkan di blok ekspor.
    • Peningkatan deteksi kata kunci "otomatis" yang hilang dalam definisi.
    • Penerapan peringatan "-Winteger-overflow" telah menambahkan pemeriksaan untuk situasi tambahan yang menyebabkan luapan.
  • Dukungan untuk arsitektur set instruksi LoongArch (-march=loongarch64 atau -march=la464), digunakan pada prosesor Loongson 3 5000 dan mengimplementasikan RISC ISA baru, mirip dengan MIPS dan RISC-V, telah diterapkan.

Inovasi utama di LLVM 16.0:

  • Kode LLVM diperbolehkan menggunakan elemen yang ditentukan dalam standar C++17.
  • Persyaratan lingkungan untuk membangun LLVM telah ditingkatkan. Alat pembangunan sekarang harus mendukung standar C++17, yaitu. Untuk membangun, Anda memerlukan setidaknya GCC 7.1, Clang 5.0, Apple Clang 10.0, atau Visual Studio 2019 16.7.
  • Backend untuk arsitektur AArch64 menambahkan dukungan untuk CPU Cortex-A715, Cortex-X3 dan Neoverse V2, assembler untuk RME MEC (Memory Encryption Contexts), ekstensi Armv8.3 (Nomor Kompleks) dan Function Multi Versioning.
  • Di backend arsitektur ARM, dukungan untuk platform target Armv2, Armv2A, Armv3, dan Armv3M telah dihentikan, sehingga pembuatan kode yang benar tidak dijamin. Menambahkan kemampuan untuk menghasilkan kode untuk instruksi bekerja dengan bilangan kompleks.
  • Backend untuk arsitektur X86 telah menambahkan dukungan untuk arsitektur set instruksi (ISA) AMX-FP16, CMPCCXADD, AVX-IFMA, AVX-VNNI-INT8, AVX-NE-CONVERT. Menambahkan dukungan untuk instruksi RDMSRLIST, RMSRLIST dan WRMSRNS. Opsi yang diterapkan "-mcpu=raptorlake", "-mcpu=meteorlake", "-mcpu=emeraldrapids", "-mcpu=sierraforest", "-mcpu=graniterapids" dan "-mcpu=grandridge".
  • Menambahkan dukungan resmi untuk platform LoongArch.
  • Peningkatan backend untuk arsitektur MIPS, PowerPC dan RISC-V
  • Debugger LLDB kini mendukung debugging executable 64-bit untuk arsitektur LoongArch. Penanganan simbol debug COFF yang lebih baik. DLL duplikat kini disaring dari daftar pemuatan. Windows-modul.
  • Di perpustakaan Libc++, pekerjaan utama difokuskan pada implementasi dukungan untuk fitur-fitur baru standar C++20 dan C++23.
  • Tautan LDD secara signifikan mengurangi waktu penautan dengan memparalelkan pemindaian relokasi alamat dan operasi inisialisasi bagian. Menambahkan dukungan untuk kompresi bagian menggunakan algoritma ZSTD.

Sumber: opennet.ru

Beli hosting yang andal untuk situs dengan perlindungan DDoS, server VPS VDS 🔥 Beli hosting website andal dengan perlindungan DDoS, server VPS VDS | ProHoster