Rilis set kompiler LLVM 16.0

Sawise nem sasi pembangunan, release saka project LLVM 16.0 diwenehi - toolkit GCC-kompatibel (kompiler, optimizers lan generator kode) sing compiles program menyang bitcode penengah instruksi virtual kaya RISC (mesin virtual tingkat rendah karo a sistem optimasi multi-level). Pseudocode sing digawe bisa diowahi nggunakake compiler JIT menyang instruksi mesin langsung nalika eksekusi program.

Dandan utama ing Clang 16.0:

  • Standar standar C++/ObjC++ yaiku gnu++17 (sadurunge gnu++14), tegese fitur C++17 karo ekstensi GNU didhukung kanthi standar. Kanggo bali prilaku sadurungΓ©, sampeyan bisa nggunakake "-std = gnu++14" pilihan.
  • Dilaksanakake fitur-fitur canggih sing ana gandhengane karo standar C++20:
    • Fungsi anggota khusus sing ora pati penting,
    • njupuk ikatan terstruktur ing fungsi lambda,
    • Operator kesetaraan ing ekspresi,
    • Pilihan kanggo ngilangi tembung kunci typename ing sawetara konteks,
    • Inisialisasi agregat sing bener ing tanda kurung ("Aggr(val1, val2)").
  • Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ возмоТности, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹Π΅ Π² Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΌ стандартС C++2b:
    • Diijini kanggo nyelehake label ing pungkasan ekspresi majemuk,
    • operator statis(),
    • operator statis [],
    • Kompatibilitas karo jinis char8_t dijamin,
    • Jangkoan karakter sing diidini digunakake ing "\N{...}" wis ditambahi
    • Nambahake kemampuan kanggo nggunakake variabel sing diumumake minangka "constexpr statis" ing fungsi sing diumumake minangka constexpr.
  • Fitur sing ditetepake ing mangsa C-standar C2x wis dileksanakake:
    • Kanggo mateni bebaya "-Wunused-label", atribut "[[maybe_unused]]" diijini ditrapake ing label.
    • Diijini kanggo nyelehake label ing endi wae ing ekspresi majemuk,
    • Nambahake jinis operator lan typeof_unqual,
    • Jinis nullptr_t anyar lan konstanta nullptr kanggo nemtokake null pointer sing bisa ngowahi menyang sembarang tipe pointer lan makili varian saka NULL sing ora kaiket integer lan void * jinis.
    • Ing mode C2x, nelpon va_start macro karo nomer variabel argumen (variadic) diijini.
  • Ing mode kepatuhan C99, C11, lan C17, pilihan standar "-Wimplicit-function-declaration" lan "-Wimplicit-int" saiki ngasilake kesalahan tinimbang peringatan.
  • Panggunaan "void *" ora langsung (contone, "void func(void *p) { *p;}") ing mode C++ saiki ngasilake kesalahan, padha karo ISO C++, GCC, ICC lan MSVC.
  • Nemtokake bitfield minangka operan instruksi (contone, "__asm ​​​​{mov eax, s.bf}") ing blok perakitan inline gaya Microsoft saiki nggawe kesalahan.
  • Nambahake diagnostik kanggo ananΓ© struktur lan serikat sing beda-beda kanthi jeneng sing padha ing modul sing beda-beda.
  • Kapabilitas sing ana gandhengane karo dhukungan OpenCL lan OpenMP wis ditambahi. Diagnosa sing luwih apik kanggo cithakan C++ sing digunakake ing argumen kernel OpenCL. Dhukungan blok antrian sing luwih apik kanggo AMDGPU. Atribut nounwind ditambahake sacara implisit ing kabeh fungsi. Dhukungan sing luwih apik kanggo fungsi sing dibangun.
  • Nambahake kemampuan kanggo nggunakake variabel lingkungan CLANG_CRASH_DIAGNOSTICS_DIR kanggo nemtokake direktori ing ngendi data diagnostik kacilakan disimpen.
  • Dhukungan Unicode wis dianyari menyang spesifikasi Unicode 15.0. Sawetara simbol matematika diijini ing pengenal, kayata "β‚Š" (contone "dobel xβ‚–β‚Šβ‚").
  • Dhukungan sing ditambahake kanggo ngemot pirang-pirang file konfigurasi (file konfigurasi standar dimuat dhisik, banjur sing ditemtokake liwat gendera "--config=", sing saiki bisa ditemtokake kaping pirang-pirang). Ngganti urutan loading standar file konfigurasi: clang nyoba kanggo mbukak file pisanan - .cfg, lan yen ora ketemu nyoba kanggo mbukak loro file .cfg lan .cfg. Kanggo mateni loading file konfigurasi minangka standar, flag "--no-default-config" wis ditambahake.
  • Kanggo mesthekake mbangun sing bisa diulang, bisa ngganti nilai tanggal lan wektu saiki ing makro __DATE__, __TIME__ lan __TIMESTAMP__ kanthi wektu sing ditemtokake ing variabel lingkungan SOURCE_DATE_EPOCH.
  • Kanggo mriksa ananΓ© fungsi sing dibangun (builtin) sing bisa digunakake ing konteks konstanta, makro "__has_constexpr_builtin" wis ditambahake.
  • Nambahake bendera kompilasi anyar "-fcoro-aligned-allocation" kanggo alokasi pigura coroutine sing selaras.
  • GendΓ©ra "-fstrict-flex-arrays =" ngleksanakake dhukungan kanggo tingkat katelu verifikasi unsur array fleksibel ing struktur (Anggota Array Fleksibel, Uploaded ukuran indefinite ing mburi struktur). Ing tingkat katelu, mung ukuran "[]" (contone, "int b[]") dianggep minangka array fleksibel, nanging ukuran "[0]" (contone, "int b[0]") ora.
  • Nambahake flag "-fmodule-output" kanggo ngaktifake model kompilasi fase siji kanggo modul C ++ standar.
  • Ditambahake mode "-Rpass-analysis = stack-frame-layout" kanggo mbantu diagnosa masalah karo tata letak pigura tumpukan.
  • Nambahake atribut anyar __attribute__((target_version("cpu_features"))) lan nambah fungsi atribut __attribute__((target_clones("cpu_features1", "cpu_features2",...))) kanggo milih versi spesifik saka fitur sing diwenehake dening AArch64 CPU.
  • Alat diagnostik ditambahi:
    • Ditambahake bebaya "-Wsingle-bit-bitfield-constant-conversion" kanggo ndeteksi truncation implisit nalika nemtokake siji menyang bitfield mlebu siji-bit.
    • Diagnosa saka variabel constexpr uninitialized wis ditambahi.
    • Added "-Wcast-fungsi-jinis-ketat" lan "-Wincompatible-fungsi-pointer-jinis-ketat" bebaya kanggo ngenali masalah potensial karo jinis fungsi casting.
    • Diagnosa ditambahake kanggo nggunakake jeneng modul sing salah utawa dilindhungi undhang-undhang ing blok ekspor.
    • Ngapikake deteksi tembung kunci "otomatis" sing ilang ing definisi.
    • Implementasine bebaya "-Winteger-overflow" wis ditambahake mriksa kanggo kahanan tambahan sing mimpin kanggo overflows.
  • Dilaksanakake support kanggo arsitektur pesawat instruction LoongArch (-march = loongarch64 utawa -march = la464), digunakake ing Loongson 3 5000 prosesor lan ngleksanakake RISC ISA anyar, padha MIPS lan RISC-V.

Inovasi utama ing LLVM 16.0:

  • Kode LLVM diijini nggunakake unsur sing ditetepake ing standar C ++ 17.
  • Keperluan lingkungan kanggo mbangun LLVM wis tambah. Piranti mbangun saiki kudu ndhukung standar C ++ 17, i.e. Kanggo mbangun, sampeyan butuh paling sethithik GCC 7.1, Clang 5.0, Apple Clang 10.0 utawa Visual Studio 2019 16.7.
  • Backend kanggo arsitektur AArch64 nambah support kanggo Cortex-A715, Cortex-X3 lan Neoverse V2 CPU, assembler kanggo RME MEC (Memori Enkripsi Konteks), Armv8.3 ekstensi (Nomer Komplek) lan Fungsi Multi Versioning.
  • Ing backend kanggo arsitektur ARM, dhukungan kanggo platform target Armv2, Armv2A, Armv3 lan Armv3M wis dihentikan, sing nggawe kode sing bener ora dijamin. Nambahake kemampuan kanggo ngasilake kode kanggo instruksi kanggo nggarap nomer kompleks.
  • Backend kanggo arsitektur X86 wis ditambahakΓ© support kanggo arsitektur pesawat instruksi (ISA) AMX-FP16, CMPCCXADD, AVX-IFMA, AVX-VNNI-INT8, AVX-NE-CONVERT. Dhukungan ditambahake kanggo instruksi RDMSRLIST, RMSRLIST lan WRMSRNS. Opsi sing ditindakake "-mcpu = raptorlake", "-mcpu = meteorlake", "-mcpu = emeraldrapids", "-mcpu = sierraforest", "-mcpu = graniterapids" lan "-mcpu = grandridge".
  • Nambahake dhukungan resmi kanggo platform LoongArch.
  • Backends apik kanggo arsitektur MIPS, PowerPC lan RISC-V
  • Nambahake dhukungan kanggo debugging executable 64-bit kanggo arsitektur LoongArch menyang debugger LLDB. Ngapikake penanganan simbol debug COFF. Nyaring nyaring DLL duplikat ing dhaptar modul Windows sing dimuat.
  • Ing perpustakaan Libc ++, karya utama fokus ing implementasine dhukungan kanggo fitur-fitur anyar standar C ++ 20 lan C ++ 23.
  • Linker LDD kanthi signifikan nyuda wektu ngubungake kanthi paralelisasi pemindaian relokasi alamat lan operasi inisialisasi bagean. Dhukungan ditambahake kanggo kompresi bagean nggunakake algoritma ZSTD.

Source: opennet.ru

Add a comment