LLVM 22 konpiladore-multzoaren kaleratzea

Sei hilabeteko garapenaren ondoren, LLVM 22.1.0 kaleratu da. Tresnak (konpiladoreak, optimizatzaileak eta kode-sortzaileak) garatzen ditu, programak RISC antzeko instrukzio birtualen bitkode tarteko bihurtzen dituztenak (maila anitzeko optimizazio-sistema duen maila baxuko makina birtual bat). Sortutako pseudokodea plataforma jakin baterako makina-kode bihur daiteke edo just-in-time (JIT) konpiladore batek erabil dezake programaren exekuzioan zehar zuzenean makina-argibideak sortzeko. LLVM teknologietan oinarrituta, proiektuak Clang konpiladorea garatzen ari da, C, C++ eta Objective-C programazio-lengoaiak onartzen dituena. 18.x adarretik hasita, proiektuak bertsio-zenbakitze-eskema berri batera aldatu zen, eta horren arabera 0 bertsioa ("N.0") erabiltzen da garapenean zehar, eta lehen bertsio egonkorra "N.1" zenbakiarekin zenbatzen da.

Clang 22-en hobekuntzak honako hauek dira:

  • Memoria esleipen tokenen (Esleipen Tokenen) laguntza gehitu da, malloc bezalako funtzioak erabiliz egindako memoria esleipen eragiketak identifikatzaile bakar batekin markatzeko. Esleipen tokenek heap informazioa egituratzea, memoria ihesen detekzioa erraztea eta objektuak haien helburuaren edo aldaketa ereduen arabera taldekatzea ahalbidetzea ahalbidetzen dute (adibidez, "beroa" den datua "hotzetik" bereiztea). Gaitzeko, erabili "-fsanitize=alloc-token" bandera.
  • C hizkuntzarekin lotutako ezaugarriak:
    • "Atzeratutako" exekuzio atzeratuaren mekanismoa definitzen duen zirriborro-zehaztapen bat inplementatu da, uneko esparrua amaitzen denean ekintzak exekutatzeko aukera emanez. "-fdefer-ts" bandera gehitu da "atzeratutako" euskarria gaitzeko.
    • __builtin_stack_address() funtzio integratua gehitu da, GCC-n antzeko funtzioa islatuz. Funtzio honek pila-helbidea itzultzen du, __builtin_stack_address() deitu duen uneko funtzioaren pila-eremua eta ondorengo funtzioak bereiziz.
  • Etorkizuneko C2y estandarrerako garatzen ari diren gaitasunak:
    • Izendatutako begiztentzako euskarria gehitu da, begiztei eta switch adierazpenei izenak esleitzeko aukera ematen duena, eta hauek break eta continue adierazpenetan zehaztu daitezke irten beharreko begizta esplizituki definitzeko. outer: for (int i = 0; i < IK; ++ i) { for (int j = 0; j < JK; ++ j) { continue; // joan CONT1-era continue outer; // joan CONT2-ra // CONT1 } // CONT2 }
    • "__COUNTER__" makro integratuaren inplementazioa, identifikatzaile-izen bakarrak sortzeko diseinatua, zabaldu eta estandarrean sartu da. Makro honetarako 2147483647 dei-muga ezarri da; muga hori gainditzeak errorea sortuko du.
    • "extern inline" gisa deklaratutako funtzioen barruan funtzio edo aldagai estatikoak erabiltzean agertzen zen abisua (-Wstatic-in-inline) kendu da.
  • C23 C estandarrean definitutako gaitasunak:
    • float.h goiburu fitxategiak orain FLT_SNAN, DBL_SNAN eta LDBL_SNAN makroak onartzen ditu, eta hauek NaN balio seinaleztatuak inplementatzen dituzte (eragiketa aritmetikoetan erabiltzean salbuespen bat eragiten dute) float, double eta long double motetarako.
    • Konpondu da izenik gabeko mota desberdinak itzulpen-unitate berean bateragarritzat hartzen ziren akats bat, baldin eta eremu berdinak bazituzten.
    • Mendekotasun-eskaneoan falta diren goiburu-fitxategiak alde batera uzteko erabiltzen den "-MG" bandera "#embed" direktibetara zabaldu da eta orain "fitxategia ez da aurkitu" errorea kentzen du "#embed" direktiba batean zehaztutako fitxategi bat falta denean.
  • C++-rekin lotutako ezaugarriak:
    • C++2c (C++26) espezifikazioan garatu zen bezala, "constexpr" testuinguruan lotura egituratuak erabiltzeko gaitasuna gehitu da. Horrek esan nahi du adierazpen konstanteei egindako erreferentziak orain adierazpen konstanteak izan daitezkeela. Matrize eta egitura sinpleentzako euskarria inplementatu da (tuplak ez dira oraindik onartzen). constexpr int arr[] = {1, 2}; constexpr auto [x, y] = arr;
    • C++20 estandarrak eskatzen duen bezala, murrizketak orain formatu estandarrera bihurtzen dira egiaztatu aurretik, diagnostiko-mezu zehatzagoak eta kontzeptu-IDetan soilik erabiltzen diren txantiloi-argumentuetan ordezkapen-erroreak behar bezala kudeatzeko aukera emanez.
    • "<", ">", "<=" eta ">=" konparazio-operadoreak "<=>" eragiletik sintetizatu diren jakiteko, "__builtin_[lt|gt|le|ge]_synthesizes_from_spaceship" funtzio integratuen familia bat gehitu da.
    • "-Wincompatible-pointer-types" parametroa aldatu da abisu baten ordez errore bat agertzeko. Aurreko portaerara itzultzeko, erabili "-Wno-error=incompatible-pointer-types" aukera.
  • Gehitu dira barne-funtzio hauek: __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, eta __builtin_dedup_pack. Adibidez, builtin_dedup_pack-ek mota-zerrenda batetik bikoiztuak kentzeko aukera ematen dizu: MyTypeList = TypeList<__builtin_dedup_pack erabiliz. …>; // emaitza mota TypeList izango da
  • UBSan-ekin definitu gabeko portaera araztean (-fsanitize=undefined -fsanitize-trap=undefined), errorearen kausaren informazioa sortutako arazketa-informazioan sartzen da orain. "-fsanitize-debug-trap-reasons" bandera gehitu da errorearen informazioaren xehetasun-maila zehazteko. "Oinarrizko" gisa ezar daiteke deskribapen orokorretarako (adibidez, "Zenbaki osoen batuketa gainezka egin da") eta "xehatua" gisa informazio zehatza sartzeko (adibidez, "zeinudun zenbaki osoen batuketa gainezka egin da 'a + b'-n").
  • Konpiladore-marka berriak gehitu dira:
    • "-f[no-]sanitize-debug-trap-reasons" "-fsanitize-trap" moduan konpilatzean salbuespen-tranpen arrazoiak arazketa-informazioan txertatuta dauden ala ez kontrolatzeko.
    • "-fsanitize=alloc-token", "-falloc-token-max", "-fsanitize-alloc-token-fast-abi", eta "-fsanitize-alloc-token-extended" memoria esleipen tokenak kudeatzeko.
    • "-fmatrix-memory-layout" matrize moten memoriaren diseinua kontrolatzeko (adibidez, zutabe-major zutabe-majorrentzat, errenkada-major errenkada-majorrentzat).
  • Funtzioek orain "malloc_span" atributua dute, malloc atributuaren antzekoa, baina blokearen amaierarako erakusle bat eta tamaina duen eremu bat duten span itxurako egiturak itzultzen dituzten funtzioei aplikagarria.
  • "modular_format" atributua gehitu da printf funtzioaren beharrezko lotura estatikoki lotutako inplementazioa dinamikoki hautatzeko estekatze-unean.
  • Diagnostiko eta analisi estatiko tresnak zabaldu dira, egiaztapen berriak gehitu dira (diagnostikoarekin lotutako hainbat hobekuntza).
  • SSE, AVX eta AVX512 luzapenetarako intrintsekoak gehitu dira X86 backend-ean. Eraikuntza moduak gehitu dira Wildcat Lake (-march=wildcatlake) eta Nova Lake (-march=novalake) mikroarkitekturetan oinarritutako Intel CPUetarako.
  • AArch64 backend-ak orain Ampere Computing Ampere1C (ampere1c), Arm C1-Nano (c1-nano), Arm C1-Pro (c1-pro), Arm C1-Premium (c1-premium) eta Arm C1-Ultra (c1-ultra) prozesadoreak onartzen ditu. FCVTZ[US], FCVTN[US], FCVTM[US], FCVTP[US] eta FCVTA[US] argibideetarako barne-funtzio gehigarriak gehitu dira. Funtzioen Bertsio Anitzeko (FMV) euskarria egonkortu da. Erabiltzaileek orain funtzio-bertsio desberdinen lehentasuna gainidatzi dezakete.
  • LoongArch32 (LA32R, LA32S) arkitekturarako euskarria gehitu da.
  • ARM, AMDGPU, RISC-V, LoongArch64, MIPS, WebAssembly eta PowerPC arkitekturetarako atzeko plano hobetuak.

Iturria: opennet.ru

Erosi hosting fidagarria DDoS babesa duten guneetarako, VPS VDS zerbitzariak πŸ”₯ Erosi webguneentzako ostatu fidagarria DDoS babesarekin, VPS VDS zerbitzariak | ProHoster