Human sa unom ka bulan nga pag-develop, gipagawas na ang LLVM 22.1.0. Naghimo kini og mga himan (mga compiler, optimizer, ug code generator) nga nag-compile sa mga programa ngadto sa intermediate bitcode sa RISC-like virtual instructions (usa ka low-level virtual machine nga adunay multi-level optimization system). Ang namugna nga pseudocode mahimong i-convert ngadto sa machine code para sa usa ka gihatag nga target platform o gamiton sa usa ka just-in-time (JIT) compiler aron makamugna og mga instruksyon sa makina direkta atol sa pagpatuman sa programa. Base sa mga teknolohiya sa LLVM, ang proyekto nagpalambo sa Clang compiler, nga nagsuporta sa C, C++, ug Objective-C programming languages. Sugod sa 18.x branch, ang proyekto mibalhin ngadto sa usa ka bag-ong version numbering scheme, diin ang release 0 ("N.0") gigamit atol sa pag-develop, ug ang unang stable nga bersyon ginumerohan og "N.1."
Ang mga pag-uswag sa Clang 22 naglakip sa:
- Gidugang ang suporta para sa mga memory allocation token (Allocation Tokens) para sa pagmarka sa mga operasyon sa memory allocation nga gihimo gamit ang mga function sama sa malloc nga adunay talagsaon nga identifier. Ang mga allocation token nagtugot sa pag-istruktura sa impormasyon sa heap, pagpasimple sa pag-detect sa memory leak, ug pagpahimo sa paggrupo sa mga butang base sa ilang katuyoan o mga pattern sa pag-usab (pananglitan, pagbulag sa "init" gikan sa "bugnaw" nga datos). Aron ma-enable, gamita ang "-fsanitize=alloc-token" flag.
- Mga kinaiya nga may kalabutan sa pinulongan nga C:
- Usa ka draft nga espesipikasyon nga naghubit sa mekanismo sa deferred execution nga "defer" ang gipatuman, nga nagtugot sa mga aksyon nga ipatuman kung ang kasamtangang sakup mogawas. Ang "-fdefer-ts" nga bandila gidugang aron mapalihok ang suporta sa "defer".
- Ang built-in nga function nga __builtin_stack_address() gidugang na, nga susama sa susamang function sa GCC. Kini nga function nagbalik sa stack address nga nagbulag sa stack area sa kasamtangang function nga nagtawag sa __builtin_stack_address() ug sa mga sunod nga function nga gitawag niini.
- Mga katakus nga gipalambo alang sa umaabot nga sumbanan sa C2y:
- Gidugang ang suporta para sa ginganlan nga mga loop, nga nagtugot kanimo sa pag-assign og mga ngalan sa mga loop ug switch statement, nga mahimong ipiho sa break ug continue statements aron klarong i-define ang loop nga pagawasan. 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 }
- Ang implementasyon sa built-in nga "__COUNTER__" macro, nga gidisenyo aron makamugna og talagsaong mga ngalan sa identifier, gipalapdan ug gilakip sa standard. Usa ka limitasyon nga 2147483647 nga mga tawag niini nga macro ang gitakda; ang paglapas niini nga limitasyon makamugna og sayop.
- Gitangtang ang pasidaan (-Wstatic-in-inline) kon mogamit og static functions o variables sulod sa mga function nga gideklara nga "extern inline".
- Mga kapabilidad nga gihubit sa C23 C standard:
- Ang float.h header file karon nagsuporta sa FLT_SNAN, DBL_SNAN, ug LDBL_SNAN macros, nga nagpatuman sa signaled (hinungdan sa eksepsiyon kung gamiton sa mga operasyon sa aritmetika) nga mga kantidad sa NaN para sa float, double, ug long double nga mga tipo.
- Giayo ang usa ka bug diin ang lainlaing wala nganli nga mga tipo giisip nga compatible sulod sa parehas nga yunit sa paghubad kung parehas sila og mga field.
- Ang "-MG" flag nga gigamit sa pagbaliwala sa nawala nga mga header file atol sa dependency scanning gipalapdan na ngadto sa "#embed" nga mga direktiba ug karon nagpugong sa "file not found" nga sayop kung ang usa ka file nga gitino sa usa ka "#embed" nga direktiba nawala.
- Mga bahin nga may kalabotan sa C++:
- Ang abilidad sa paggamit sa structured bindings sa konteksto sa "constexpr", sama sa naugmad sa C++2c (C++26) specification, gidugang na. Kini nagpasabot nga ang mga reperensya sa constant expressions mahimo na nga constant expressions. Gipatuman ang suporta para sa mga arrays ug simpleng mga istruktura (wala pa gisuportahan ang mga tuple). constexpr int arr[] = {1, 2}; constexpr auto [x, y] = arr;
- Sumala sa gikinahanglan sa C++20 standard, ang mga constraint karon gi-convert ngadto sa standard form sa dili pa kini susihon, nga nagtugot sa mas tukma nga mga mensahe sa pagdayagnos ug hustong pagdumala sa mga sayop sa pagpuli sa mga argumento sa template nga gigamit lamang sa mga concept-id.
- Nagdugang og pamilya sa built-in nga mga function nga "__builtin_[lt|gt|le|ge]_synthesizes_from_spaceship" aron mahibal-an kung ang mga comparison operator nga "<", ">", "<=", ug ">=" gi-synthesize gikan sa "<=>" operator.
- Ang parameter nga "-Wincompatible-pointer-types" giusab aron mo-output og error imbes nga warning. Aron mobalik sa miaging behavior, gamita ang opsyon nga "-Wno-error=incompatible-pointer-types".
- Gidugang ang built-in nga mga function nga __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, ug __builtin_dedup_pack. Pananglitan, ang builtin_dedup_pack nagtugot kanimo sa pagtangtang sa mga duplicate gikan sa usa ka lista sa mga tipo: gamit ang MyTypeList = TypeList<__builtin_dedup_pack β¦>; // ang resulta nga tipo mao ang TypeList
- Kon mag-debug sa undefined behavior gamit ang UBSan (-fsanitize=undefined -fsanitize-trap=undefined), ang impormasyon sa hinungdan sa sayop gilakip na karon sa gihimo nga impormasyon sa debug. Ang flag nga "-fsanitize-debug-trap-reasons" gidugang aron ipiho ang lebel sa detalye sa impormasyon sa sayop. Mahimo kini ibutang sa "basic" para sa kinatibuk-ang mga deskripsyon (pananglitan, "Integer addition overflowed") ug "detailed" aron ilakip ang detalyado nga impormasyon (pananglitan, "signed integer addition overflow in 'a + b'").
- Gidugang bag-ong mga flag sa compiler:
- "-f[no-]sanitize-debug-trap-reasons" aron makontrol kung ang mga hinungdan sa exception trap naa ba sa impormasyon sa debug kung mag-compile gamit ang "-fsanitize-trap" mode.
- "-fsanitize=alloc-token", "-falloc-token-max", "-fsanitize-alloc-token-fast-abi", ug "-fsanitize-alloc-token-extended" aron madumala ang mga token sa alokasyon sa memorya.
- "-fmatrix-memory-layout" aron makontrol ang layout sa memorya sa mga tipo sa matrix (pananglitan column-major para sa column-major, row-major para sa row-major).
- Ang mga function karon adunay "malloc_span" nga attribute, susama sa malloc attribute apan magamit sa mga function nga nagbalik og span-like nga mga istruktura nga adunay pointer ug usa ka field nga adunay gidak-on o pointer sa katapusan sa block.
- Gidugang ang "modular_format" nga hiyas aron dinamikong mapili ang gikinahanglan nga statically linked nga implementasyon sa printf function sa link time.
- Gipalapdan ang mga himan sa pagdayagnos ug estatiko nga pag-analisar, gidugang ang mga bag-ong pagsusi (daghang dosena nga mga kalamboan nga may kalabotan sa pagdayagnos).
- Dugang nga mga intrinsic para sa SSE, AVX, ug AVX512 extensions ang gidugang sa X86 backend. Gidugang usab ang mga Build mode para sa mga Intel CPU base sa Wildcat Lake (-march=wildcatlake) ug Nova Lake (-march=novalake) microarchitectures.
- Ang AArch64 backend karon nagsuporta sa Ampere Computing Ampere1C (ampere1c), Arm C1-Nano (c1-nano), Arm C1-Pro (c1-pro), Arm C1-Premium (c1-premium), ug Arm C1-Ultra (c1-ultra) processors. Dugang nga built-in nga mga function ang gidugang para sa mga instruksyon sa FCVTZ[US], FCVTN[US], FCVTM[US], FCVTP[US], ug FCVTA[US. Ang suporta sa Function Multi-Versioning (FMV) gipalig-on na. Mahimo na karon sa mga tiggamit nga i-override ang prayoridad sa lain-laing mga bersyon sa function.
- Gidugang ang suporta para sa arkitektura sa LoongArch32 (LA32R, LA32S).
- Gipauswag nga mga backend para sa mga arkitektura sa ARM, AMDGPU, RISC-V, LoongArch64, MIPS, WebAssembly, ug PowerPC.
Source: opennet.ru
