Rakirina berhevoka berhevkarê LLVM 22

Piştî şeş mehan ji pêşveçûnê, LLVM 22.1.0 hate berdan. Ew amûran (berhevkar, çêtirker û çêkerên kodê) pêş dixe ku bernameyan di koda bit a navîn a rêwerzên virtual ên mîna RISC (makîneyeke virtual a asta nizm bi pergaleke çêtirkirina pir-astî) de berhev dike. Koda derewîn a çêkirî dikare ji bo platformek armanc a diyarkirî veguhere koda makîneyê an jî ji hêla berhevkarek tenê-di-demê (JIT) ve were bikar anîn da ku rêwerzên makîneyê rasterast di dema pêkanîna bernameyê de çêbike. Li ser bingeha teknolojiyên LLVM, proje berhevkarê Clang pêş dixe, ku piştgirî dide zimanên bernamenûsiyê yên C, C++, û Objective-C. Bi destpêkirina şaxa 18.x, proje derbasî şemayek hejmartina guhertoyên nû bû, li gorî wê guhertoya 0 ("N.0") di dema pêşveçûnê de tê bikar anîn, û guhertoya yekem a sabît bi "N.1" tê hejmartin.

Pêşveçûnên di Clang 22 de ev in:

  • Piştgiriya ji bo nîşaneyên veqetandina bîrê (Nîşaneyên Dabeşkirinê) ji bo nîşankirina operasyonên veqetandina bîrê yên ku bi karanîna fonksiyonên wekî malloc bi nasnameyek bêhempa têne kirin, hate zêdekirin. Nîşaneyên veqetandinê rê didin strukturkirina agahdariya heap, hêsankirina tespîtkirina rijandina bîrê, û çalakkirina komkirina tiştan li gorî armanc an şêwazên guherandinê (mînak, veqetandina daneyên "germ" ji "sar"). Ji bo çalakkirinê, ala "-fsanitize=alloc-token" bikar bînin.
  • Taybetmendiyên ku bi zimanê C ve girêdayî ne:
    • Pêşnûmeyek taybetmendiyek ku mekanîzmaya darvekirina derengkirî ya "paşdexistin" diyar dike, hatiye bicîhkirin, ku dihêle çalakî dema ku çarçoveya heyî derkeve werin bicîhkirin. Ala "-fdefer-ts" hatiye zêdekirin da ku piştgiriya "paşdexistin" çalak bike.
    • Fonksiyona çêkirî __builtin_stack_address() hatiye zêdekirin, ku fonksiyona wekhev a di GCC de nîşan dide. Ev fonksiyon navnîşana stûyê vedigerîne û qada stûyê ya fonksiyona heyî ya ku __builtin_stack_address() gazî kiriye û fonksiyonên paşîn ên ku ew gazî dike ji hev vediqetîne.
  • Kapasîteyên ku ji bo standarda C2y ya pêşerojê têne pêşxistin:
    • Piştgiriya ji bo lûpên bi navkirî hat zêdekirin, ku dihêle hûn navan bidin lûpan û daxuyaniyên guheztinê, ku dikarin di daxuyaniyên break û continue de werin destnîşankirin da ku bi eşkereyî lûpa ku jê derkeve diyar bikin. outer: for (int i = 0; i < IK; ++ i) { for (int j = 0; j < JK; ++ j) { continue; // biçe CONT1 continue outer; // biçe CONT2 // CONT1 } // CONT2 }
    • Cîbicîkirina makroya "__COUNTER__" ya çêkirî, ku ji bo çêkirina navên nasnameyên bêhempa hatiye çêkirin, hatiye berfirehkirin û di standardê de cih girtiye. Sînorek ji 2147483647 gazîkirinên vê makroyê hatiye danîn; derbasbûna ji vê sînor dê bibe sedema çewtiyekê.
    • Hişyariya (-Wstatic-in-inline) dema ku fonksiyonên statîk an guherbarên di hundurê fonksiyonên ku wekî "extern inline" hatine ragihandin de têne bikar anîn hate rakirin.
  • Kapasîteyên ku di standarda C23 C de hatine destnîşankirin:
    • Pelê sernivîsa float.h niha makroyên FLT_SNAN, DBL_SNAN, û LDBL_SNAN piştgirî dike, ku nirxên NaN-ê yên sînyalkirî (dema ku di operasyonên aritmetîkî de têne bikar anîn dibe sedema îstîsnayekê) ji bo celebên float, double, û long double bicîh tînin.
    • Çewtiyek hate rastkirin ku tê de celebên bênav ên cûda wekî hevgirtî di heman yekîneya wergerê de dihatin hesibandin ger zeviyên wan wekhev bûn.
    • Ala "-MG" ya ku ji bo paşguhkirina pelên sernivîsê yên winda di dema şopandina girêdayîbûnê de tê bikar anîn, ji bo rêwerzên "#embed" hatiye dirêjkirin û naha xeletiya "pel nehat dîtin" tepeser dike dema ku pelek ku di rêwerzek "#embed" de hatî destnîşankirin winda be.
  • Taybetmendiyên ku bi C++ re têkildar in:
    • Şîyana bikaranîna girêdanên birêxistinkirî di çarçoveya "constexpr" de, wekî ku di taybetmendiya C++2c (C++26) de hatiye pêşxistin, hatiye zêdekirin. Ev tê vê wateyê ku referansên ji bo îfadeyên sabît êdî dikarin bi xwe jî îfadeyên sabît bin. Piştgirî ji bo rêz û avahiyên hêsan tê bicîh kirin (tuple hîn nayên piştgirî kirin). constexpr int arr[] = {1, 2}; constexpr auto [x, y] = arr;
    • Wekî ku ji hêla standarda C++20 ve tê xwestin, niha berî ku werin kontrol kirin, sînorkirin vediguherin forma standard, ku rê dide peyamên teşhîsê yên rasttir û çareserkirina xeletiyên şûngirtinê di argumanên şablonê de ku tenê di nasnameyên konseptê de têne bikar anîn.
    • Malbatek ji fonksiyonên çêkirî "__builtin_[lt|gt|le|ge]_synthesizes_from_spaceship" lê zêde kir da ku were dîtin ka operatorên berawirdkirinê "<", ">", "<=" û ">=" ji operatorê "<=>" hatine sentezkirin an na.
    • Parametreya "-Wincompatible-pointer-types" hatiye guhertin da ku li şûna hişyariyekê çewtiyekê derxe. Ji bo vegera rewşa berê, vebijarka "-Wno-error=incompatible-pointer-types" bikar bînin.
  • Fonksiyonên çêkirî __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, û __builtin_dedup_pack hatine zêdekirin. Bo nimûne, builtin_dedup_pack dihêle hûn dubareyan ji navnîşek cûreyan derxînin: bi karanîna MyTypeList = TypeList<__builtin_dedup_pack …>; // cureyê encam dê TypeList be
  • Dema ku bi UBSan (-fsanitize=undefined -fsanitize-trap=undefined) reftara nediyar tê çareserkirin, agahdariya sedema çewtiyê niha di agahdariya debugkirinê ya çêkirî de cih digire. Ala "-fsanitize-debug-trap-reasons" hatiye zêdekirin da ku asta hûrguliyan di agahdariya çewtiyê de diyar bike. Ew dikare ji bo danasînên giştî wekî "basic" (mînak, "Integer addition overflowed") û "detailed" (hûrgulî) were saz kirin da ku agahdariya berfireh (mînak, "signed integer addition overflow in 'a + b'") tê de hebe.
  • Alên nû yên berhevkar zêde kirin:
    • "-f[no-]sanitize-debug-trap-reasons" ji bo kontrolkirina ka sedemên xefika îstîsnayê di agahdariya debugkirinê de dema ku bi moda "-fsanitize-trap" re têne berhev kirin, têne bicîh kirin.
    • "-fsanitize=alloc-token", "-falloc-token-max", "-fsanitize-alloc-token-fast-abi", û "-fsanitize-alloc-token-extended" ji bo birêvebirina tokenên veqetandina bîrê.
    • "-fmatrix-memory-layout" ji bo kontrolkirina rêzkirina bîranînê ya celebên matrîksê (mînak column-major ji bo column-major, row-major ji bo row-major).
  • Fonksiyon niha xwedî taybetmendiyek "malloc_span" in, ku dişibihe taybetmendiya malloc lê ji bo fonksiyonên ku avahiyên span-şikil vedigerînin ku nîşanek û zeviyek bi mezinahiya nîşanek heya dawiya blokê dihewînin, derbas dibe.
  • Taybetmendiya "modular_format" lê zêde kir da ku pêkanîna statîk a girêdayî ya fonksiyona printf di dema girêdanê de bi dînamîkî were hilbijartin.
  • Amûrên analîzên teşhîs û statîk hatine berfirehkirin, kontrolên nû hatine zêdekirin (çend deh başkirinên têkildarî teşhîsê).
  • Taybetmendiyên hundirîn ên zêde ji bo dirêjkirinên SSE, AVX, û AVX512 li piştperdeya X86 hatine zêdekirin. Modên avakirinê ji bo CPUyên Intel ên li ser bingeha mîkromîmarîyên Wildcat Lake (-march=wildcatlake) û Nova Lake (-march=novalake) hatine zêdekirin.
  • Niha piştperdeya AArch64 piştgirîya pêvajoyên Ampere Computing Ampere1C (ampere1c), Arm C1-Nano (c1-nano), Arm C1-Pro (c1-pro), Arm C1-Premium (c1-premium), û Arm C1-Ultra (c1-ultra) dike. Fonksiyonên çêkirî yên din ji bo talîmatên FCVTZ[US], FCVTN[US], FCVTM[US], FCVTP[US], û FCVTA[US] hatine zêdekirin. Piştgiriya Function Multi-Versioning (FMV) hatiye sabît kirin. Bikarhêner niha dikarin pêşîniya guhertoyên fonksiyonên cûda derbas bikin.
  • Piştgiriya ji bo mîmariya LoongArch32 (LA32R, LA32S) hate zêdekirin.
  • Piştgiriyên baştirkirî ji bo mîmariyên ARM, AMDGPU, RISC-V, LoongArch64, MIPS, WebAssembly, û PowerPC.

Source: opennet.ru

Ji bo malperên bi parastina DDoS, serverên VPS VDS mêvandariya pêbawer bikirin 🔥 Hostinga malperê ya pêbawer bi parastina DDoS, serverên VPS VDS bikirin | ProHoster