Saatos genep bulan pamekaran, LLVM 22.1.0 parantos dirilis. Éta ngembangkeun alat-alat (kompiler, pangoptimal, sareng generator kode) anu nyusun program kana bitcode antara tina instruksi virtual sapertos RISC (mesin virtual tingkat handap kalayan sistem optimasi multi-tingkat). Pseudocode anu dihasilkeun tiasa dirobih janten kode mesin pikeun platform target anu dipasihkeun atanapi dianggo ku kompiler just-in-time (JIT) pikeun ngahasilkeun instruksi mesin sacara langsung nalika palaksanaan program. Dumasar kana téknologi LLVM, proyék ieu ngembangkeun kompiler Clang, anu ngadukung basa pamrograman C, C++, sareng Objective-C. Dimimitian ku cabang 18.x, proyék ieu ngalih ka skéma panomeran vérsi énggal, numutkeun rilis 0 ("N.0") dianggo nalika pamekaran, sareng vérsi stabil anu munggaran dinomeran "N.1."
Perbaikan dina Clang 22 kalebet:
- Ditambahkeun dukungan pikeun token alokasi memori (Token Alokasi) pikeun nandakeun operasi alokasi memori anu dilakukeun nganggo fungsi sapertos malloc kalayan idéntifikasi unik. Token alokasi ngamungkinkeun pikeun nyusun inpormasi tumpukan, nyederhanakeun deteksi bocor memori, sareng ngamungkinkeun kelompok objék dumasar kana tujuan atanapi pola modifikasi (contona, misahkeun data "panas" tina "tiis"). Pikeun ngaktipkeun, anggo tanda "-fsanitize=alloc-token".
- Fitur-fitur anu aya patalina jeung basa C:
- Hiji draf spésifikasi anu ngahartikeun mékanisme palaksanaan anu ditunda "defer" parantos dilaksanakeun, anu ngamungkinkeun tindakan dilaksanakeun nalika ruang lingkup ayeuna kaluar. Bendera "-fdefer-ts" parantos ditambahkeun pikeun ngaktipkeun dukungan "defer".
- Fungsi bawaan __builtin_stack_address() parantos ditambahkeun, ngawakilan fungsi anu sami dina GCC. Fungsi ieu mulangkeun alamat tumpukan anu misahkeun daérah tumpukan tina fungsi ayeuna anu nyauran __builtin_stack_address() sareng fungsi-fungsi salajengna anu disauran.
- Kamampuhan anu dikembangkeun pikeun standar C2y ka hareup:
- Nambihan dukungan pikeun puteran anu dingaranan, anu ngamungkinkeun anjeun pikeun masihan nami kana puteran sareng pernyataan switch, anu tiasa ditangtukeun dina pernyataan break sareng continue pikeun sacara eksplisit ngajelaskeun puteran anu kedah kaluar. 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, anu dirancang pikeun ngahasilkeun nami idéntifikasi unik, parantos dilegaan sareng dilebetkeun kana standar. Wates 2147483647 panggero ka makro ieu parantos ditetepkeun; ngaleuwihan wates ieu bakal ngahasilkeun kasalahan.
- Peringatan (-Wstatic-in-inline) anu dihapus nalika nganggo fungsi statis atanapi variabel di jero fungsi anu didéklarasikeun salaku "extern inline".
- Kamampuhan anu ditetepkeun dina standar C23 C:
- File header float.h ayeuna ngadukung makro FLT_SNAN, DBL_SNAN, sareng LDBL_SNAN, anu ngalaksanakeun nilai NaN signaled (ngabalukarkeun pengecualian nalika dianggo dina operasi aritmatika) pikeun tipe float, double, sareng long double.
- Bug anu ngabenerkeun dimana jinis anu teu dingaranan anu béda dianggap cocog dina unit tarjamahan anu sami upami aranjeunna gaduh widang anu sami.
- Bendera "-MG" anu dianggo pikeun ngalalaworakeun file header anu leungit nalika scan dependency parantos diperpanjang ka arahan "#embed" sareng ayeuna ngaleungitkeun kasalahan "file not found" nalika file anu ditangtukeun dina arahan "#embed" leungit.
- Fitur patali C++:
- Kamampuh pikeun ngagunakeun beungkeutan terstruktur dina kontéks "constexpr", sakumaha anu dikembangkeun dina spésifikasi C++2c (C++26), parantos ditambahkeun. Ieu ngandung harti yén rujukan kana éksprési konstan ayeuna tiasa janten éksprési konstan. Dukungan diimplementasikeun pikeun array sareng struktur saderhana (tuples tacan dirojong). constexpr int arr[] = {1, 2}; constexpr auto [x, y] = arr;
- Sakumaha anu diwajibkeun ku standar C++20, kendala ayeuna dirobih kana bentuk standar sateuacan dipariksa, ngamungkinkeun pesen diagnostik anu langkung akurat sareng penanganan kasalahan substitusi anu leres dina argumen témplat anu ngan ukur dianggo dina concept-id.
- Nambahkeun sakumpulan fungsi bawaan "__builtin_[lt|gt|le|ge]_synthesizes_from_spaceship" pikeun milarian naha operator babandingan "<", ">", "<=", sareng ">=" disintésis tina operator "<=>".
- Parameter "-Wincompatible-pointer-types" parantos dirobih janten ngaluarkeun kasalahan tinimbang peringatan. Pikeun uih deui ka paripolah sateuacanna, anggo pilihan "-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, sareng __builtin_dedup_pack parantos ditambahkeun. Salaku conto, builtin_dedup_pack ngamungkinkeun anjeun pikeun ngahapus duplikat tina daptar jinis: nganggo MyTypeList = TypeList<__builtin_dedup_pack …>; // tipe anu dihasilkeun bakal janten TypeList
- Nalika ngadebug paripolah anu teu didefinisikeun nganggo UBSan (-fsanitize=undefined -fsanitize-trap=undefined), inpormasi panyabab kasalahan ayeuna kalebet kana inpormasi debug anu dihasilkeun. Bendera "-fsanitize-debug-trap-reasons" parantos ditambahkeun pikeun nangtukeun tingkat detil dina inpormasi kasalahan. Éta tiasa disetel ka "dasar" pikeun pedaran umum (contona, "Penambahan bilangan bulat overflowed") sareng "detailed" pikeun ngalebetkeun inpormasi lengkep (contona, "ditandatanganan integer overflowed dina 'a + b'").
- Nambahkeun bandéra kompiler énggal:
- "-f[no-]sanitize-debug-trap-reasons" pikeun ngontrol naha alesan bubu pengecualian disematkeun dina inpormasi debug nalika dikompilasi nganggo mode "-fsanitize-trap".
- "-fsanitize=alloc-token", "-falloc-token-max", "-fsanitize-alloc-token-fast-abi", sareng "-fsanitize-alloc-token-extended" pikeun ngatur token alokasi mémori.
- "-fmatrix-memory-layout" pikeun ngadalikeun tata letak mémori tina tipe matriks (contona kolom-mayor pikeun kolom-mayor, baris-mayor pikeun baris-mayor).
- Fungsi ayeuna gaduh atribut "malloc_span", sami sareng atribut malloc tapi tiasa dianggo pikeun fungsi anu mulangkeun struktur sapertos span anu ngandung pointer sareng kolom kalayan ukuran atanapi pointer ka tungtung blok.
- Nambahkeun atribut "modular_format" pikeun milih sacara dinamis palaksanaan fungsi printf anu numbu sacara statis anu diperyogikeun dina waktos tautan.
- Parabot analisis diagnostik sareng statis parantos dilegaan, pamariksaan énggal parantos ditambahkeun (sababaraha lusin perbaikan anu aya hubunganana sareng diagnostik).
- Intrinsik tambahan pikeun éksténsi SSE, AVX, sareng AVX512 parantos ditambahkeun kana backend X86. Modeu Build parantos ditambahkeun pikeun CPU Intel dumasar kana mikroarsitektur Wildcat Lake (-march=wildcatlake) sareng Nova Lake (-march=novalake).
- Backend AArch64 ayeuna ngadukung prosesor Ampere Computing Ampere1C (ampere1c), Arm C1-Nano (c1-nano), Arm C1-Pro (c1-pro), Arm C1-Premium (c1-premium), sareng Arm C1-Ultra (c1-ultra). Fungsi bawaan tambahan parantos ditambahkeun pikeun parentah FCVTZ[US], FCVTN[US], FCVTM[US], FCVTP[US], sareng FCVTA[US]. Dukungan Function Multi-Versioning (FMV) parantos distabilisasi. Pangguna ayeuna tiasa ngagentos prioritas vérsi fungsi anu béda.
- Nambihan dukungan pikeun arsitéktur LoongArch32 (LA32R, LA32S).
- Backend anu ditingkatkeun pikeun arsitéktur ARM, AMDGPU, RISC-V, LoongArch64, MIPS, WebAssembly, sareng PowerPC.
sumber: opennet.ru
