6ã¶æã®éçºæéãçµãŠãLLVM 22.1.0ããªãªãŒã¹ãããŸããããã®ããŒãžã§ã³ã§ã¯ãããã°ã©ã ãRISCã©ã€ã¯ãªä»®æ³åœä»€ïŒå€å±€æé©åã·ã¹ãã ãåããäœã¬ãã«ä»®æ³ãã·ã³ïŒã®äžéãããã³ãŒãã«ã³ã³ãã€ã«ããããŒã«ïŒã³ã³ãã€ã©ããªããã£ãã€ã¶ãã³ãŒããžã§ãã¬ãŒã¿ïŒãéçºããŠããŸããçæãããæ¬äŒŒã³ãŒãã¯ãç¹å®ã®ã¿ãŒã²ãããã©ãããã©ãŒã ã®ãã·ã³ã³ãŒãã«å€æãããããžã£ã¹ãã€ã³ã¿ã€ã ïŒJITïŒã³ã³ãã€ã©ã§äœ¿çšããŠããã°ã©ã å®è¡äžã«çŽæ¥ãã·ã³åœä»€ãçæãããã§ããŸãããã®ãããžã§ã¯ãã¯ãLLVMãã¯ãããžãŒãåºç€ãšããŠãCãC++ãObjective-Cã®åããã°ã©ãã³ã°èšèªããµããŒãããClangã³ã³ãã€ã©ãéçºããŠããŸãã18.xãã©ã³ã以éããããžã§ã¯ãã¯æ°ããããŒãžã§ã³çªå·äœç³»ã«ç§»è¡ããŸãããéçºäžã¯ãªãªãŒã¹0ïŒãN.0ãïŒã䜿çšãããæåã®å®å®ããŒãžã§ã³ã«ã¯ãN.1ããä»ããããŸãã
Clang 22 ã®æ¹è¯ç¹ã¯æ¬¡ã®ãšããã§ãã
- malloc ãªã©ã®é¢æ°ãçšããŠå®è¡ãããã¡ã¢ãªå²ãåœãŠæäœã«äžæã®èå¥åãä»äžããããã®ã¡ã¢ãªå²ãåœãŠããŒã¯ã³ïŒAllocation TokenïŒã®ãµããŒãã远å ããŸãããAllocation Token ã䜿çšãããšãããŒãæ å ±ãæ§é åããã¡ã¢ãªãªãŒã¯æ€åºãç°¡çŽ åã§ããã»ãããªããžã§ã¯ãã®ç®çã倿Žãã¿ãŒã³ã«åºã¥ããŠã°ã«ãŒãåããããšãå¯èœã«ãªããŸãïŒäŸ: ãããããããŒã¿ãšãã³ãŒã«ããããŒã¿ãåé¢ããïŒãæå¹ã«ããã«ã¯ãã-fsanitize=alloc-tokenããã©ã°ã䜿çšããŸãã
- Cèšèªã«é¢é£ããæ©èœ:
- ãdeferãé å»¶å®è¡ã¡ã«ããºã ãå®çŸ©ãããã©ãã仿§ãå®è£ ãããŸãããããã«ãããçŸåšã®ã¹ã³ãŒãã®çµäºæã«ã¢ã¯ã·ã§ã³ãå®è¡ã§ããããã«ãªããŸãããdeferããµããŒããæå¹ã«ããããã«ãã-fdefer-tsããã©ã°ã远å ãããŸããã
- GCCã®é¡äŒŒé¢æ°ããã©ãŒãªã³ã°ããçµã¿èŸŒã¿é¢æ° __builtin_stack_address() ã远å ãããŸããããã®é¢æ°ã¯ã __builtin_stack_address() ãåŒã³åºããçŸåšã®é¢æ°ãšããã®åŸã«åŒã³åºããã颿°ã®ã¹ã¿ãã¯é åãåºåãã¹ã¿ãã¯ã¢ãã¬ã¹ãè¿ããŸãã
- å°æ¥ã® C2y æšæºã«åããŠéçºãããŠããæ©èœ:
- ååä»ãã«ãŒãã®ãµããŒãã远å ãããŸãããããã«ãããã«ãŒããš switch ã¹ããŒãã¡ã³ãã«ååãå²ãåœãŠãããšãã§ããbreak ã¹ããŒãã¡ã³ããš continue ã¹ããŒãã¡ã³ãã§æå®ããŠãçµäºããã«ãŒããæç€ºçã«å®çŸ©ã§ããŸãã outer: for (int i = 0; i < IK; ++ i) { for (int j = 0; j < JK; ++ j) { continue; // CONT1 ãžé²ã continue outer; // CONT2 ãžé²ã // CONT1 } // CONT2 }
- äžæã®èå¥ååãçæããããã«èšèšãããçµã¿èŸŒã¿ãã¯ãã__COUNTER__ãã®å®è£ ãæ¡åŒµãããæšæºã«å«ãŸããŸããããã®ãã¯ãã®åŒã³åºãåæ°ã¯2147483647åã«å¶éãããŠããããã®å¶éãè¶ ãããšãšã©ãŒãçºçããŸãã
- ãextern inlineããšããŠå®£èšããã颿°å ã§éç颿°ãŸãã¯å€æ°ã䜿çšããéã®èŠå (-Wstatic-in-inline) ãåé€ããŸããã
- C23 C æšæºã§å®çŸ©ãããŠããæ©èœ:
- float.h ããã㌠ãã¡ã€ã«ã¯ãfloatãdoubleãlong double åã«å¯ŸããŠã·ã°ãã«åããã (ç®è¡æŒç®ã§äœ¿çšãããšäŸå€ãçºçãã) NaN å€ãå®è£ ãã FLT_SNANãDBL_SNANãããã³ LDBL_SNAN ãã¯ãããµããŒãããããã«ãªããŸããã
- åããã£ãŒã«ããæã€ç°ãªãååã®ãªãåãåã翻蚳åäœå ã§äºææ§ããããã®ãšããŠæ±ããããã°ãä¿®æ£ããŸããã
- äŸåé¢ä¿ã®ã¹ãã£ã³äžã«äžè¶³ããŠããããã㌠ãã¡ã€ã«ãç¡èŠããããã«äœ¿çšããã "-MG" ãã©ã°ã "#embed" ãã£ã¬ã¯ãã£ãã«æ¡åŒµããã"#embed" ãã£ã¬ã¯ãã£ãã§æå®ããããã¡ã€ã«ãäžè¶³ããŠããå Žåã« "ãã¡ã€ã«ãèŠã€ãããŸãã" ãšã©ãŒãæå¶ããããã«ãªããŸããã
- C++ é¢é£ã®æ©èœ:
- C++2c (C++26) 仿§ã§éçºããããconstexprãã³ã³ããã¹ãã§æ§é åãã€ã³ãã£ã³ã°ã䜿çšããæ©èœã远å ãããŸãããããã«ããã宿°åŒãžã®åç §èªäœã宿°åŒã«ãªãããã«ãªããŸãããé åãšåçŽãªæ§é äœã®ãµããŒããå®è£ ãããŠããŸãïŒã¿ãã«ã¯ãŸã ãµããŒããããŠããŸããïŒãconstexpr int arr[] = {1, 2}; constexpr auto [x, y] = arr;
- C++20 æšæºã®èŠä»¶ã«åŸããå¶çŽã¯ãã§ãã¯ãããåã«æšæºåœ¢åŒã«å€æãããããã«ãªããŸãããããã«ãããããæ£ç¢ºãªèšºæã¡ãã»ãŒãžãçæãããã³ã³ã»ãã ID ã®ã¿ã§äœ¿çšããããã³ãã¬ãŒãåŒæ°ã®çœ®æãšã©ãŒãé©åã«åŠçãããããã«ãªããŸããã
- æ¯èŒæŒç®åã<ããã>ããã<="ããããã³ã>="ããã<=>ãæŒç®åããåæããããã©ããã確èªããããã®çµã¿èŸŒã¿é¢æ°ãã¡ããªãŒã__builtin_[lt|gt|le|ge]_synthesizes_from_spaceshipãã远å ããŸããã
- ã-Wincompatible-pointer-typesããã©ã¡ãŒã¿ã¯ãèŠåã§ã¯ãªããšã©ãŒãåºåããããã«å€æŽãããŸããã以åã®åäœã«æ»ãã«ã¯ãã-Wno-error=incompatible-pointer-typesããªãã·ã§ã³ã䜿çšããŠãã ããã
- çµã¿èŸŒã¿é¢æ° __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 ã远å ããŸãããäŸãã°ãbuiltin_dedup_pack ã䜿çšãããšãåã®ãªã¹ãããéè€ãåé€ã§ããŸããäŸïŒMyTypeList = TypeList<__builtin_dedup_pack âŠ>; // çµæã®åã¯TypeListã«ãªããŸã
- UBSanïŒ-fsanitize=undefined -fsanitize-trap=undefinedïŒã§æªå®çŸ©ã®åäœããããã°ããéãçæããããããã°æ å ±ã«ãšã©ãŒåå æ å ±ãå«ãŸããããã«ãªããŸããããšã©ãŒæ å ±ã®è©³çްã¬ãã«ãæå®ããããã®ã-fsanitize-debug-trap-reasonsããã©ã°ã远å ãããŸããããbasicãã«èšå®ãããšäžè¬çãªèª¬æïŒäŸïŒãæŽæ°å ç®ãªãŒããŒãããŒãïŒãããdetailedãã«èšå®ãããšè©³çŽ°ãªæ å ±ïŒäŸïŒã'a + b' ã§ç¬Šå·ä»ãæŽæ°å ç®ãªãŒããŒãããŒãïŒã衚瀺ãããŸãã
- æ°ããã³ã³ãã€ã© ãã©ã°ã远å ããŸããã
- ã-f[no-]sanitize-debug-trap-reasonsãã¯ãã-fsanitize-trapãã¢ãŒãã§ã³ã³ãã€ã«ãããšãã«ãäŸå€ãã©ããã®çç±ããããã°æ å ±ã«åã蟌ããã©ãããå¶åŸ¡ããŸãã
- ã¡ã¢ãªå²ãåœãŠããŒã¯ã³ã管çããããã®ã-fsanitize=alloc-tokenããã-falloc-token-maxããã-fsanitize-alloc-token-fast-abiããããã³ã-fsanitize-alloc-token-extendedãã
- "-fmatrix-memory-layout" ã¯ãè¡åã¿ã€ãã®ã¡ã¢ãªã¬ã€ã¢ãŠããå¶åŸ¡ããŸã (äŸ: ååªå ã®å Žå㯠column-majorãè¡åªå ã®å Žå㯠row-major)ã
- 颿°ã«ã¯ãmalloc 屿§ã«äŒŒãŠããŸããããã€ã³ã¿ãšãµã€ãºãæã€ãã£ãŒã«ãããŸãã¯ãããã¯ã®æ«å°Ÿãžã®ãã€ã³ã¿ãå«ã span ã®ãããªæ§é äœãè¿ã颿°ã«é©çšã§ãããmalloc_spanã屿§ã远å ãããŸããã
- ãªã³ã¯æã« printf 颿°ã®å¿ èŠãªéçã«ãªã³ã¯ãããå®è£ ãåçã«éžæããããã® "modular_format" 屿§ã远å ãããŸããã
- 蚺æããã³éçåæããŒã«ãæ¡åŒµãããæ°ãããã§ãã¯ã远å ãããŸãã (æ°åã®èšºæé¢é£ã®æ¹å)ã
- SSEãAVXãAVX512æ¡åŒµæ©èœçšã®çµã¿èŸŒã¿é¢æ°ãX86ããã¯ãšã³ãã«è¿œå ãããŸãããWildcat LakeïŒ-march=wildcatlakeïŒããã³Nova LakeïŒ-march=novalakeïŒãã€ã¯ãã¢ãŒããã¯ãã£ã«åºã¥ãIntel CPUçšã®ãã«ãã¢ãŒãã远å ãããŸããã
- AArch64ããã¯ãšã³ãã¯ãAmpere Computing Ampere1C (ampere1c)ãArm C1-Nano (c1-nano)ãArm C1-Pro (c1-pro)ãArm C1-Premium (c1-premium)ãããã³Arm C1-Ultra (c1-ultra)ããã»ããµããµããŒãããããã«ãªããŸãããFCVTZ[US]ãFCVTN[US]ãFCVTM[US]ãFCVTP[US]ãããã³FCVTA[US]åœä»€çšã®çµã¿èŸŒã¿é¢æ°ã远å ãããŸããã颿°ãã«ãããŒãžã§ã³ (FMV) ãµããŒããå®å®åããŸããããŠãŒã¶ãŒã¯ãç°ãªã颿°ããŒãžã§ã³ã®åªå 床ããªãŒããŒã©ã€ãã§ããããã«ãªããŸããã
- LoongArch32 (LA32RãLA32S) ã¢ãŒããã¯ãã£ã®ãµããŒãã远å ãããŸããã
- ARMãAMDGPUãRISC-VãLoongArch64ãMIPSãWebAssemblyãPowerPC ã¢ãŒããã¯ãã£ã®ããã¯ãšã³ããæ¹åãããŸããã
åºæïŒ ãªãŒãã³ããã.ru
