Rehefa afaka enim-bolana nanaovana ny fampandrosoana, dia navoaka ny LLVM 22.1.0. Mamolavola fitaovana (mpanangona, mpanodina, ary mpamorona kaody) izy io izay manangona fandaharana ho lasa kaody bit eo anelanelan'ny toromarika virtoaly mitovy amin'ny RISC (milina virtoaly ambany lenta misy rafitra fanatsarana ambaratonga maro). Azo ovaina ho kaody milina ho an'ny sehatra kendrena iray ny pseudocode novokarina na ampiasain'ny mpamoaka kaody just-in-time (JIT) mba hamoronana toromarika milina mivantana mandritra ny fanatanterahana ny fandaharana. Mifototra amin'ny teknolojia LLVM, ny tetikasa dia mamolavola ny mpamoaka kaody Clang, manohana ny fiteny fandaharana C, C++, ary Objective-C. Manomboka amin'ny sampana 18.x, ny tetikasa dia nifindra tamin'ny tetika fanisana dikan-teny vaovao, izay ampiasaina mandritra ny fampandrosoana ny famoahana 0 ("N.0"), ary ny dikan-teny marin-toerana voalohany dia laharana "N.1."
Ny fanatsarana ao amin'ny Clang 22 dia ahitana:
- Nampiana fanohanana ho an'ny mari-pamantarana fizarana fahatsiarovana (Allocation Tokens) ho an'ny fanamarihana ny asa fizarana fahatsiarovana izay tanterahina amin'ny fampiasana asa toy ny malloc miaraka amin'ny famantarana tokana. Ny mari-pamantarana fizarana dia ahafahana mandamina ny fampahalalana momba ny heap, manatsotra ny fitadiavana leak memory, ary mamela ny fanangonana zavatra mifototra amin'ny tanjony na ny lamina fanovana (ohatra, ny fanasarahana ny angona "mafana" amin'ny "mangatsiaka"). Mba hampandehanana azy, ampiasao ny marika "-fsanitize=alloc-token".
- Ireo endri-javatra mifandraika amin'ny fiteny C:
- Nampiharina ny drafitra famaritana mamaritra ny fomba fanatanterahana "defer" nahemotra, izay ahafahana manatanteraka asa rehefa miala ny sehatra misy ankehitriny. Nampiana ny marika "-fdefer-ts" mba ahafahana manohana ny "defer".
- Nampiana ny fiasa efa tafiditra __builtin_stack_address(), izay mitovy amin'ny fiasa mitovy amin'izany ao amin'ny GCC. Ity fiasa ity dia mamerina ny adiresin'ny stack izay manasaraka ny velaran'ny stack amin'ny fiasa ankehitriny izay niantso ny __builtin_stack_address() sy ireo fiasa manaraka izay antsoiny.
- Ny fahaiza-manao novolavolaina ho an'ny fenitra C2y ho avy:
- Nanampy fanohanana ho an'ny loops nomena anarana, izay ahafahanao manome anarana ho an'ny loops sy ny switch statements, izay azo faritana ao amin'ny break sy continue statements mba hamaritana mazava tsara ny loop hivoahana. 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 }
- Nohalehibeazina ary nampidirina tao amin'ny fenitra ny fampiharana ny macro "__COUNTER__" namboarina, izay natao hamoronana anarana famantarana tokana. Napetraka ny fetra 2147483647 antso ho an'ity macro ity; raha mihoatra io fetra io dia hiteraka fahadisoana.
- Nesorina ny fampitandremana (-Wstatic-in-inline) rehefa mampiasa fiasa statika na variables ao anatin'ny fiasa nambara ho "extern inline".
- Ny fahaiza-manao voafaritra ao amin'ny fenitra C23 C:
- Ny rakitra lohatenin'ny float.h dia manohana ny macros FLT_SNAN, DBL_SNAN, ary LDBL_SNAN, izay mampihatra ny sanda NaN signaled (miteraka exception rehefa ampiasaina amin'ny asa arithmetika) ho an'ny karazana float, double, ary long double.
- Nanamboatra bibikely izay noheverina ho mifanaraka ao anatin'ny vondrona fandikan-teny iray ihany ireo karazana tsy fantatra anarana samihafa raha toa ka mitovy ny saha nananan'izy ireo.
- Ny marika "-MG" ampiasaina tsy hiraharahana ireo rakitra lohateny tsy hita mandritra ny fizahana fiankinan-doha dia nohalehibeazina ho an'ny toromarika "#embed" ary ankehitriny dia manafoana ny hadisoana "rakitra tsy hita" rehefa tsy hita ny rakitra voalaza ao amin'ny toromarika "#embed".
- Ireo endri-javatra mifandraika amin'ny C++:
- Nampiana ny fahafahana mampiasa "structured bindings" ao anatin'ny "constexpr", araka ny novolavolaina tao amin'ny famaritana C++2c (C++26). Midika izany fa ny referansa amin'ny "constant expressions" dia afaka ny ho "constant expressions" ankehitriny. Ampiharina ny fanohanana ho an'ny "arrays" sy ny rafitra tsotra (tsy mbola tohana ny "tuples"). constexpr int arr[] = {1, 2}; constexpr auto [x, y] = arr;
- Araka ny takian'ny fenitra C++20, dia avadika ho endrika mahazatra ireo fameperana alohan'ny hanamarinana azy, izay ahafahana mahazo hafatra diagnostika marina kokoa sy mikirakira araka ny tokony ho izy ny lesoka fanoloana ao amin'ny adihevitra mΓ΄dely ampiasaina ao amin'ny concept-ids ihany.
- Nanampy andiana fiasa efa tafiditra "__builtin_[lt|gt|le|ge]_synthesizes_from_spaceship" mba hahitana raha avy amin'ny mpandraharaha "<=>" no natambatra ireo mpandraharaha fampitahana "<", ">", "<=", ary ">=".
- Novaina ny masontsivana "-Wincompatible-pointer-types" mba hamoaka hadisoana fa tsy fampitandremana. Raha te hiverina amin'ny fihetsika teo aloha ianao dia ampiasao ny safidy "-Wno-error=incompatible-pointer-types".
- Nampiana ireo fiasa efa tafiditra ao anatiny __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, ary __builtin_dedup_pack. Ohatra, ny builtin_dedup_pack dia ahafahanao manala dika mitovy amin'ny lisitry ny karazana: amin'ny fampiasana MyTypeList = TypeList<__builtin_dedup_pack β¦>; // ny karazana vokatr'izany dia ho TypeList
- Rehefa manamboatra "undefined behavior" amin'ny UBSan (-fsanitize=undefined -fsanitize-trap=undefined), dia tafiditra ao anatin'ny fampahalalana momba ny "debug" novokarina ny fampahalalana momba ny antony mahatonga ny fahadisoana. Nampiana ny marika "-fsanitize-debug-trap-reasons" mba hamaritana ny haavon'ny antsipiriany ao amin'ny fampahalalana momba ny fahadisoana. Azo apetraka amin'ny "fototra" izany ho an'ny famaritana ankapobeny (ohatra, "Tafahoatra ny fanampiana isa manontolo") ary "antsipiriany" mba hampidirana fampahalalana amin'ny antsipiriany (ohatra, "Tafahoatra ny fanampiana isa manontolo voasonia ao amin'ny 'a + b'").
- Nampiana saina mpanangona vaovao:
- "-f[no-]sanitize-debug-trap-reasons" mba hifehezana raha tafiditra ao anatin'ny fampahalalana momba ny debug ny antony mahatonga ny exception trap rehefa manangona amin'ny fomba "-fsanitize-trap".
- "-fsanitize=alloc-token", "-falloc-token-max", "-fsanitize-alloc-token-fast-abi", ary "-fsanitize-alloc-token-extended" mba hitantanana ny mari-pamantarana fizarana fahatsiarovana.
- "-fmatrix-memory-layout" mba hifehezana ny firafitry ny fahatsiarovana ny karazana matrix (oh: column-major ho an'ny column-major, row-major ho an'ny row-major).
- Manana toetra "malloc_span" ireo fonction ankehitriny, mitovy amin'ny toetra malloc saingy azo ampiharina amin'ireo fonction izay mamerina rafitra mitovy amin'ny span misy pointer sy saha misy ny habe na pointer hatrany amin'ny faran'ny bloc.
- Nampiana ny toetra "modular_format" mba hisafidianana amin'ny fomba dinamika ny fampiharana ilaina amin'ny asa printf mifandray amin'ny fomba static amin'ny fotoana fifandraisana.
- Nohalehibeazina ny fitaovana fitiliana sy famakafakana statika, ary nampiana fanamarinana vaovao (fanatsarana am-polony maro mifandraika amin'ny fitiliana).
- Nampiana singa fanampiny ho an'ny fanitarana SSE, AVX, ary AVX512 ao amin'ny backend X86. Nampiana fomba fanamboarana ho an'ny CPU Intel mifototra amin'ny microarchitectures Wildcat Lake (-march=wildcatlake) sy Nova Lake (-march=novalake).
- Ny backend AArch64 dia manohana ny processeur Ampere Computing Ampere1C (ampere1c), Arm C1-Nano (c1-nano), Arm C1-Pro (c1-pro), Arm C1-Premium (c1-premium), ary Arm C1-Ultra (c1-ultra). Nampiana fiasa fanampiny tafiditra ho an'ny toromarika FCVTZ[US], FCVTN[US], FCVTM[US], FCVTP[US], ary FCVTA[US]. Nohamafisina ny fanohanana ny Function Multi-Versioning (FMV). Afaka manova ny laharam-pahamehan'ny dikan-asa samihafa ny mpampiasa izao.
- Nanampy fanohanana ho an'ny maritrano LoongArch32 (LA32R, LA32S).
- Nohatsaraina ny backends ho an'ny maritrano ARM, AMDGPU, RISC-V, LoongArch64, MIPS, WebAssembly, ary PowerPC.
Source: opennet.ru
