Sawisé nem sasi pangembangan, LLVM 22.1.0 wis dirilis. Iki ngembangaké piranti (compiler, optimizer, lan code generator) sing ngompilasi program dadi bitcode menengah saka instruksi virtual kaya RISC (mesin virtual tingkat rendah kanthi sistem optimasi multi-level). Pseudocode sing diasilaké bisa diowahi dadi kode mesin kanggo platform target sing diwènèhaké utawa digunakaké déning kompiler just-in-time (JIT) kanggo ngasilaké instruksi mesin langsung sajrone eksekusi program. Adhedhasar teknologi LLVM, proyèk iki ngembangaké kompiler Clang, sing ndhukung basa pamrograman C, C++, lan Objective-C. Diwiwiti saka cabang 18.x, proyèk iki ngalih menyang skema penomoran versi anyar, miturut rilis 0 ("N.0") digunakaké sajrone pangembangan, lan versi stabil pisanan diwènèhi nomer "N.1."
Dandan ing Clang 22 kalebu:
- Dhukungan kanggo token alokasi memori (Token Alokasi) ditambahake kanggo nandhani operasi alokasi memori sing ditindakake nggunakake fungsi kayata malloc kanthi pengenal unik. Token alokasi ngidini kanggo nyusun informasi tumpukan, nyederhanakake deteksi kebocoran memori, lan ngaktifake pengelompokan obyek adhedhasar tujuan utawa pola modifikasi (contone, misahake data "panas" saka "adhem"). Kanggo ngaktifake, gunakake tandha "-fsanitize=alloc-token".
- Fitur-fitur sing ana gandhengane karo basa C:
- Draf spesifikasi sing nemtokake mekanisme eksekusi sing ditundha "defer" wis dileksanakake, sing ngidini tumindak ditindakake nalika ruang lingkup saiki metu. Tandha "-fdefer-ts" wis ditambahake kanggo ngaktifake dhukungan "defer".
- Fungsi bawaan __builtin_stack_address() wis ditambahake, sing nggambarake fungsi sing padha ing GCC. Fungsi iki ngasilake alamat tumpukan sing misahake area tumpukan saka fungsi saiki sing nyeluk __builtin_stack_address() lan fungsi sabanjure sing diundang.
- Kapabilitas sing dikembangake kanggo standar C2y ing mangsa ngarep:
- Dhukungan kanggo loop sing dijenengi ditambahake, sing ngidini sampeyan menehi jeneng menyang loop lan pernyataan switch, sing bisa ditemtokake ing pernyataan break lan continue kanggo nemtokake loop sing arep metu kanthi eksplisit. outer: for (int i = 0; i < IK; ++ i) { for (int j = 0; j < JK; ++ j) { continue; // go to CONT1 continue outer; // go to CONT2 // CONT1 } // CONT2 }
- Implementasi makro "__COUNTER__" bawaan, sing dirancang kanggo ngasilake jeneng pengenal unik, wis ditambahi lan dilebokake ing standar. Watesan 2147483647 panggilan menyang makro iki wis disetel; ngluwihi watesan iki bakal ngasilake kesalahan.
- Pèngetan (-Wstatic-in-inline) dibusak nalika nggunakake fungsi statis utawa variabel ing njero fungsi sing diumumake minangka "extern inline".
- Kapabilitas sing ditetepake ing standar C23 C:
- File header float.h saiki ndhukung makro FLT_SNAN, DBL_SNAN, lan LDBL_SNAN, sing ngetrapake nilai NaN sing disignal (nyebabake pangecualian nalika digunakake ing operasi aritmatika) kanggo jinis float, double, lan long double.
- Ndandani bug ing ngendi jinis terjemahan sing ora dijenengi dianggep kompatibel ing unit terjemahan sing padha yen duwe kolom sing padha.
- Gendéra "-MG" sing digunakaké kanggo nglirwakaké file header sing ilang nalika pemindaian dependensi wis ditambahi menyang arahan "#embed" lan saiki nyegah kesalahan "file not found" nalika file sing ditemtokake ing arahan "#embed" ilang.
- Fitur sing gegandhengan karo C++:
- Kemampuan kanggo nggunakake ikatan terstruktur ing konteks "constexpr", kaya sing dikembangake ing spesifikasi C++2c (C++26), wis ditambahake. Iki tegese referensi menyang ekspresi konstan saiki bisa dadi ekspresi konstan. Dhukungan diimplementasikake kanggo array lan struktur prasaja (tuple durung didhukung). constexpr int arr[] = {1, 2}; constexpr auto [x, y] = arr;
- Kaya sing dibutuhake dening standar C++20, kendala saiki diowahi dadi bentuk standar sadurunge dicenthang, saengga pesen diagnostik sing luwih akurat lan penanganan kesalahan substitusi sing tepat ing argumen cithakan sing mung digunakake ing concept-id.
- Nambahake kulawarga fungsi bawaan "__builtin_[lt|gt|le|ge]_synthesizes_from_spaceship" kanggo ngerteni apa operator pambanding "<", ">", "<=", lan ">=" disintesis saka operator "<=>".
- Parameter "-Wincompatible-pointer-types" wis diganti supaya ngasilake kesalahan tinimbang peringatan. Kanggo bali menyang prilaku sadurunge, gunakake opsi "-Wno-error=incompatible-pointer-types".
- Fungsi bawaan __builtin_bswapg, __builtin_elementwise_ldexp, __builtin_elementwise_fshl, __builtin_elementwise_fshr, __builtin_elementwise_minnumnum, __builtin_elementwise_maxnumnum, __builtin_masked_load, __builtin_masked_expand_load, __builtin_masked_store, __builtin_masked_compress_store, __builtin_masked_gather, __builtin_masked_scatter, lan __builtin_dedup_pack wis ditambahake. Contone, builtin_dedup_pack ngidini sampeyan mbusak duplikat saka dhaptar jinis: nggunakake MyTypeList = TypeList<__builtin_dedup_pack …>; // jinis sing diasilake bakal dadi TypeList
- Nalika debugging prilaku sing ora ditemtokake nganggo UBSan (-fsanitize=undefined -fsanitize-trap=undefined), informasi panyebab kesalahan saiki kalebu ing informasi debug sing digawe. Tandha "-fsanitize-debug-trap-reasons" wis ditambahake kanggo nemtokake tingkat detail ing informasi kesalahan. Bisa disetel dadi "dhasar" kanggo katrangan umum (contone, "Penambahan bilangan bulat meluap") lan "rinci" kanggo kalebu informasi rinci (contone, "penambahan bilangan bulat sing ditandatangani meluap ing 'a + b'").
- Nambahake panji kompiler anyar:
- "-f[no-]sanitize-debug-trap-reasons" kanggo ngontrol apa alesan jebakan pangecualian dilebokake ing informasi debug nalika kompilasi nganggo mode "-fsanitize-trap".
- "-fsanitize=alloc-token", "-falloc-token-max", "-fsanitize-alloc-token-fast-abi", lan "-fsanitize-alloc-token-extended" kanggo ngatur token alokasi memori.
- "-fmatrix-memory-layout" kanggo ngontrol tata letak memori saka jinis matriks (contone, kolom-mayor kanggo kolom-mayor, baris-mayor kanggo baris-mayor).
- Fungsi saiki duwé atribut "malloc_span", mèmper karo atribut malloc nanging bisa ditrapaké kanggo fungsi sing ngasilaké struktur kaya span sing isiné pointer lan kolom kanthi ukuran utawa pointer ing pungkasan blok.
- Nambahake atribut "modular_format" kanggo milih kanthi dinamis implementasi fungsi printf sing disambungake sacara statis sing dibutuhake ing wektu pranala.
- Piranti analisis diagnostik lan statis wis ditambahi, pamriksan anyar wis ditambahake (sawetara lusin perbaikan sing ana gandhengane karo diagnostik).
- Intrinsik tambahan kanggo ekstensi SSE, AVX, lan AVX512 wis ditambahake ing backend X86. Mode build wis ditambahake kanggo CPU Intel adhedhasar mikroarsitektur Wildcat Lake (-march=wildcatlake) lan Nova Lake (-march=novalake).
- Backend AArch64 saiki ndhukung prosesor Ampere Computing Ampere1C (ampere1c), Arm C1-Nano (c1-nano), Arm C1-Pro (c1-pro), Arm C1-Premium (c1-premium), lan Arm C1-Ultra (c1-ultra). Fungsi bawaan tambahan wis ditambahake kanggo instruksi FCVTZ[US], FCVTN[US], FCVTM[US], FCVTP[US], lan FCVTA[US]. Dhukungan Function Multi-Versioning (FMV) wis distabilisasi. Pangguna saiki bisa ngganti prioritas versi fungsi sing beda-beda.
- Dhukungan kanggo arsitektur LoongArch32 (LA32R, LA32S) wis ditambahake.
- Backend sing luwih apik kanggo arsitektur ARM, AMDGPU, RISC-V, LoongArch64, MIPS, WebAssembly, lan PowerPC.
Source: opennet.ru
