Π‘Π»Π΅Π΄ ΡΠ΅ΡΡ ΠΌΠ΅ΡΠ΅ΡΠ° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ°
ΠΠΎΠ²ΠΈΡΠ΅ Ρ
Π°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠΈ Π½Π° LLVM 9.0 Π²ΠΊΠ»ΡΡΠ²Π°Ρ ΠΏΡΠ΅ΠΌΠ°Ρ
Π²Π°Π½Π΅ΡΠΎ Π½Π° ΠΌΠ°ΡΠΊΠ΅ΡΠ° Π·Π° Π΅ΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠ°Π»Π΅Π½ Π΄ΠΈΠ·Π°ΠΉΠ½ ΠΎΡ ΡΠ΅Π»Π΅Π²Π°ΡΠ° RISC-V ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ°, ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π½Π° C++ Π·Π° OpenCL, Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ Π·Π° ΡΠ°Π·Π΄Π΅Π»ΡΠ½Π΅ Π½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ° Π½Π° Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ½ΠΎ Π·Π°ΡΠ΅Π΄Π΅Π½ΠΈ ΡΠ°ΡΡΠΈ Π² LLD ΠΈ Π²Π½Π΅Π΄ΡΡΠ²Π°Π½Π΅ Π½Π° β
-
ΠΠΎΠ±Π°Π²Π΅Π½ΠΎ ΠΎΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π½Π° ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ½ΠΈΡ Π·Π° GCC ΠΈΠ·ΡΠ°Π· "asm goto β, ΠΊΠΎΠ΅ΡΠΎ Π²ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π΄Π° ΠΏΡΠ΅ΠΌΠΈΠ½Π΅ΡΠ΅ ΠΎΡ Π²Π³ΡΠ°Π΄Π΅Π½ Π±Π»ΠΎΠΊ Π½Π° Π°ΡΠ΅ΠΌΠ±Π»Π΅Ρ ΠΊΡΠΌ Π΅ΡΠΈΠΊΠ΅Ρ Π² C ΠΊΠΎΠ΄. Π’Π°Π·ΠΈ ΡΡΠ½ΠΊΡΠΈΡ Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠ° Π·Π° ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ Π½Π° ΡΠ΄ΡΠΎΡΠΎ Π½Π° Linux Π² ΡΠ΅ΠΆΠΈΠΌ βCONFIG_JUMP_LABEL=yβ Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° Clang Π½Π° ΡΠΈΡΡΠ΅ΠΌΠΈ Ρ x86_64 Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ°. ΠΠ°ΡΠΎ ΡΠ΅ Π²Π·Π΅ΠΌΠ°Ρ ΠΏΡΠ΅Π΄Π²ΠΈΠ΄ ΠΏΡΠΎΠΌΠ΅Π½ΠΈΡΠ΅, Π΄ΠΎΠ±Π°Π²Π΅Π½ΠΈ Π² ΠΏΡΠ΅Π΄ΠΈΡΠ½ΠΈ Π²Π΅ΡΡΠΈΠΈ, ΡΠ΄ΡΠΎΡΠΎ Π½Π° Linux Π²Π΅ΡΠ΅ ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ ΠΈΠ·Π³ΡΠ°Π΄Π΅Π½ΠΎ Π² Clang Π·Π° Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ°ΡΠ° x86_64 (ΠΏΡΠ΅Π΄ΠΈ ΡΠΎΠ²Π° ΡΠ΅ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ°ΡΠ΅ ΡΠ°ΠΌΠΎ ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ Π·Π° arm, aarch64, ppc32, ppc64le ΠΈ mips Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠΈ). ΠΡΠ²Π΅Π½ ΡΠΎΠ²Π° ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠ΅ Π·Π° Android ΠΈ ChromeOS Π²Π΅ΡΠ΅ ΡΠ° ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ²Π°Π½ΠΈ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ Clang Π·Π° ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ Π½Π° ΡΠ΄ΡΠΎ, Π° Google ΡΠ΅ΡΡΠ²Π° Clang ΠΊΠ°ΡΠΎ ΠΎΡΠ½ΠΎΠ²Π½Π° ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ° Π·Π° ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ Π½Π° ΡΠ΄ΡΠ° Π·Π° ΡΠ²ΠΎΠΈΡΠ΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΠ²Π΅Π½ΠΈ Linux ΡΠΈΡΡΠ΅ΠΌΠΈ. Π Π±ΡΠ΄Π΅ΡΠ΅ Π΄ΡΡΠ³ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΈ Π½Π° LLVM ΠΌΠΎΠ³Π°Ρ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ Π² ΠΏΡΠΎΡΠ΅ΡΠ° Π½Π° ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ Π½Π° ΡΠ΄ΡΠΎΡΠΎ, Π²ΠΊΠ»ΡΡΠΈΡΠ΅Π»Π½ΠΎ LLD, llvm-objcopy, llvm-ar, llvm-nm ΠΈ llvm-objdump; - ΠΠΎΠ±Π°Π²Π΅Π½Π° Π΅ Π΅ΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠ°Π»Π½Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° C++17 Π² OpenCL. Π‘ΠΏΠ΅ΡΠΈΡΠΈΡΠ½ΠΈΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ Π²ΠΊΠ»ΡΡΠ²Π°Ρ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π·Π° Π°ΡΡΠΈΠ±ΡΡΠΈ Π½Π° Π°Π΄ΡΠ΅ΡΠ½ΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ, Π±Π»ΠΎΠΊΠΈΡΠ°Π½Π΅ Π½Π° ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ²Π°Π½Π΅ΡΠΎ Π½Π° Π°Π΄ΡΠ΅ΡΠ½ΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΡΡΠ΅Π· ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΈ Π·Π° ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ²Π°Π½Π΅ Π½Π° ΡΠΈΠΏΠΎΠ²Π΅, ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΡΠ½Π΅ Π½Π° Π²Π΅ΠΊΡΠΎΡΠ½ΠΈ ΡΠΈΠΏΠΎΠ²Π΅ ΠΊΠ°ΡΠΎ Π² OpenCL Π·Π° C, Π½Π°Π»ΠΈΡΠΈΠ΅ Π½Π° ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ½ΠΈ ΡΠΈΠΏΠΎΠ²Π΅ OpenCL Π·Π° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ, ΡΡΠ±ΠΈΡΠΈΡ, ΠΊΠ°Π½Π°Π»ΠΈ ΠΈ Ρ.Π½.
- ΠΠΎΠ±Π°Π²Π΅Π½ΠΈ ΡΠ° Π½ΠΎΠ²ΠΈ ΡΠ»Π°Π³ΠΎΠ²Π΅ Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΎΡΠ° β-ftime-traceβ ΠΈ β-ftime-trace-granularity=Nβ Π·Π° Π³Π΅Π½Π΅ΡΠΈΡΠ°Π½Π΅ Π½Π° ΠΎΡΡΠ΅Ρ Π·Π° Π²ΡΠ΅ΠΌΠ΅ΡΠΎ Π·Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π° ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ Π΅ΡΠ°ΠΏΠΈ Π½Π° ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° (Π°Π½Π°Π»ΠΈΠ·, ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ) ΠΈ Π±Π΅ΠΊΠ΅Π½Π΄Π° (Π΅ΡΠ°ΠΏΠΈ Π½Π° ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ). ΠΡΡΠ΅ΡΡΡ ΡΠ΅ Π·Π°ΠΏΠΈΡΠ²Π° Π²ΡΠ² ΡΠΎΡΠΌΠ°Ρ json, ΡΡΠ²ΠΌΠ΅ΡΡΠΈΠΌ Ρ chrome://tracing ΠΈ speedscope.app;
- ΠΠΎΠ±Π°Π²Π΅Π½Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠ° β__declspec(allocator)β ΠΈ Π³Π΅Π½Π΅ΡΠΈΡΠ°Π½Π΅ Π½Π° ΠΏΡΠΈΠ΄ΡΡΠΆΠ°Π²Π°ΡΠ° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π·Π° ΠΎΡΡΡΡΠ°Π½ΡΠ²Π°Π½Π΅ Π½Π° Π³ΡΠ΅ΡΠΊΠΈ, ΠΊΠΎΡΡΠΎ Π²ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π΄Π° Π½Π°Π±Π»ΡΠ΄Π°Π²Π°ΡΠ΅ ΠΏΠΎΡΡΠ΅Π±Π»Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° ΠΏΠ°ΠΌΠ΅Ρ Π² ΡΡΠ΅Π΄Π°ΡΠ° Π½Π° Visual Studio;
- ΠΠ° Π΅Π·ΠΈΠΊΠ° C Π΅ Π΄ΠΎΠ±Π°Π²Π΅Π½Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π·Π° ΠΌΠ°ΠΊΡΠΎΡΠ° β__FILE_NAME__β, ΠΊΠΎΠΉΡΠΎ ΠΏΡΠΈΠ»ΠΈΡΠ° Π½Π° ΠΌΠ°ΠΊΡΠΎΡΠ° β__FILE__β, Π½ΠΎ Π²ΠΊΠ»ΡΡΠ²Π° ΡΠ°ΠΌΠΎ ΠΈΠΌΠ΅ΡΠΎ Π½Π° ΡΠ°ΠΉΠ»Π° Π±Π΅Π· ΠΏΡΠ»Π½ΠΈΡ ΠΏΡΡ;
- C++ ΡΠ°Π·ΡΠΈΡΠΈ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ°ΡΠ° Π·Π° Π°ΡΡΠΈΠ±ΡΡΠΈ Π½Π° Π°Π΄ΡΠ΅ΡΠ½ΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ, Π·Π° Π΄Π° ΠΎΠ±Ρ Π²Π°Π½Π΅ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ Π½Π° C++, Π²ΠΊΠ»ΡΡΠΈΡΠ΅Π»Π½ΠΎ ΠΌΠΎΠ΄Π΅Π»ΠΈ Π½Π° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈ ΠΈ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΈ, ΡΠ΅ΡΠ΅ΡΠ΅Π½ΡΠ½ΠΈ ΡΠΈΠΏΠΎΠ²Π΅, ΠΈΠ·Π²ΠΎΠ΄ Π·Π° Π²ΡΡΠ½Π°Ρ ΡΠΈΠΏ, ΠΎΠ±Π΅ΠΊΡΠΈ, Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ½ΠΎ Π³Π΅Π½Π΅ΡΠΈΡΠ°Π½ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ, Π²Π³ΡΠ°Π΄Π΅Π½ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΈ ΠΈ Π΄Ρ.
- ΠΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈΡΠ΅, ΡΠ²ΡΡΠ·Π°Π½ΠΈ Ρ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ°ΡΠ° Π½Π° OpenCL, OpenMP ΠΈ CUDA, ΡΠ° ΡΠ°Π·ΡΠΈΡΠ΅Π½ΠΈ. Π’ΠΎΠ²Π° Π²ΠΊΠ»ΡΡΠ²Π° ΠΏΡΡΠ²ΠΎΠ½Π°ΡΠ°Π»Π½Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π·Π° ΠΈΠΌΠΏΠ»ΠΈΡΠΈΡΠ½ΠΎ Π²ΠΊΠ»ΡΡΠ²Π°Π½Π΅ Π½Π° Π²Π³ΡΠ°Π΄Π΅Π½ΠΈ OpenCL ΡΡΠ½ΠΊΡΠΈΠΈ (ΡΠ»Π°Π³ΡΡ β-fdeclare-opencl-builtinsβ Π΅ Π΄ΠΎΠ±Π°Π²Π΅Π½), ΡΠ°Π·ΡΠΈΡΠ΅Π½ΠΈΠ΅ΡΠΎ cl_arm_integer_dot_product Π΅ Π²Π½Π΅Π΄ΡΠ΅Π½ΠΎ ΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΈΡΠ΅ Π·Π° Π΄ΠΈΠ°Π³Π½ΠΎΡΡΠΈΠΊΠ° ΡΠ° ΡΠ°Π·ΡΠΈΡΠ΅Π½ΠΈ;
- ΠΠΎΠ΄ΠΎΠ±ΡΠ΅Π½Π° Π΅ ΡΠ°Π±ΠΎΡΠ°ΡΠ° Π½Π° ΡΡΠ°ΡΠΈΡΠ½ΠΈΡ Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡ ΠΈ Π΅ Π΄ΠΎΠ±Π°Π²Π΅Π½Π° Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ Π·Π° ΠΈΠ·Π²ΡΡΡΠ²Π°Π½Π΅ Π½Π° ΡΡΠ°ΡΠΈΡΠ΅Π½ Π°Π½Π°Π»ΠΈΠ·. ΠΠΎΠ±Π°Π²Π΅Π½ΠΈ ΡΠ»Π°Π³ΠΎΠ²Π΅ Π·Π° ΠΏΠΎΠΊΠ°Π·Π²Π°Π½Π΅ Π½Π° Π½Π°Π»ΠΈΡΠ½ΠΈ ΠΌΠΎΠ΄ΡΠ»ΠΈ Π·Π° ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° ΠΈ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ°Π½ΠΈ ΠΎΠΏΡΠΈΠΈ (β-analyzer-checker[-option]-helpβ, β-analyzer-checker[-option]-help-alphaβ ΠΈ β-analyzer-checker[-option]-help " -ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊ"). ΠΠΎΠ±Π°Π²Π΅Π½ Π΅ ΡΠ»Π°Π³ "-analyzer-werror" Π·Π° ΡΡΠ΅ΡΠΈΡΠ°Π½Π΅ Π½Π° ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΡΡΠ° ΠΊΠ°ΡΠΎ Π³ΡΠ΅ΡΠΊΠΈ.
ΠΠΎΠ±Π°Π²Π΅Π½ΠΈ ΡΠ° Π½ΠΎΠ²ΠΈ ΡΠ΅ΠΆΠΈΠΌΠΈ Π½Π° ΠΏΡΠΎΠ²Π΅ΡΠΊΠ°:- security.insecureAPI.DeprecatedOrUnsafeBufferHandling Π·Π° ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΡΠΈΡΠ°Π½Π΅ Π½Π° ΠΎΠΏΠ°ΡΠ½ΠΈ ΠΏΡΠ°ΠΊΡΠΈΠΊΠΈ Π·Π° ΡΠ°Π±ΠΎΡΠ° Ρ Π±ΡΡΠ΅ΡΠΈ;
- osx.MIGChecker Π·Π° ΡΡΡΡΠ΅Π½Π΅ Π½Π° Π½Π°ΡΡΡΠ΅Π½ΠΈΡ Π½Π° MIG (Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡ Π½Π° Mach Interface Generator) ΠΏΡΠ°Π²ΠΈΠ»Π° Π·Π° ΠΏΠΎΠ²ΠΈΠΊΠ²Π°Π½Π΅;
- optin.osx.OSObjectCStyleCast Π·Π° Π½Π°ΠΌΠΈΡΠ°Π½Π΅ Π½Π° Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»Π½ΠΈ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ²Π°Π½ΠΈΡ Π½Π° XNU libkern ΠΎΠ±Π΅ΠΊΡ;
- apiModeling.llvm Ρ Π½Π°Π±ΠΎΡ ΠΎΡ ΡΡΠ½ΠΊΡΠΈΠΈ Π·Π° ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π° ΠΌΠΎΠ΄Π΅Π»ΠΈΡΠ°Π½Π΅ Π·Π° ΠΎΡΠΊΡΠΈΠ²Π°Π½Π΅ Π½Π° Π³ΡΠ΅ΡΠΊΠΈ Π² ΠΊΠΎΠ΄ΠΎΠ²Π°ΡΠ° Π±Π°Π·Π° Π½Π° LLVM;
- Π‘ΡΠ°Π±ΠΈΠ»ΠΈΠ·ΠΈΡΠ°Π½ ΠΊΠΎΠ΄ Π·Π° ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π° Π½Π΅ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠ°Π½ΠΈ C++ ΠΎΠ±Π΅ΠΊΡΠΈ (UninitializedObject Π² ΠΏΠ°ΠΊΠ΅ΡΠ° optin.cplusplus);
- ΠΠΎΠΌΠΎΡΠ½Π°ΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ° clang-format Π΄ΠΎΠ±Π°Π²ΠΈ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π·Π° ΡΠΎΡΠΌΠ°ΡΠΈΡΠ°Π½Π΅ Π½Π° ΠΊΠΎΠ΄ Π½Π° Π΅Π·ΠΈΠΊΠ° C# ΠΈ ΠΎΡΠΈΠ³ΡΡΡΠ²Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π·Π° ΡΡΠΈΠ»Π° Π½Π° ΡΠΎΡΠΌΠ°ΡΠΈΡΠ°Π½Π΅ Π½Π° ΠΊΠΎΠ΄Π°, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ ΠΎΡ Microsoft;
- clang-cl, Π°Π»ΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π΅Π½ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΈΡ ΡΠ΅Π΄, ΠΊΠΎΠΉΡΠΎ ΠΎΡΠΈΠ³ΡΡΡΠ²Π° ΡΡΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡ Π½Π° Π½ΠΈΠ²ΠΎ ΠΎΠΏΡΠΈΠΈ Ρ ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΎΡΠ° cl.exe, Π²ΠΊΠ»ΡΡΠ΅Π½ Π²ΡΠ² Visual Studio, ΠΈΠΌΠ° Π΄ΠΎΠ±Π°Π²Π΅Π½Π° Π΅Π²ΡΠΈΡΡΠΈΠΊΠ° Π·Π° ΡΡΠ΅ΡΠΈΡΠ°Π½Π΅ Π½Π° Π½Π΅ΡΡΡΠ΅ΡΡΠ²ΡΠ²Π°ΡΠΈ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ ΠΊΠ°ΡΠΎ ΠΎΠΏΡΠΈΠΈ Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΈΡ ΡΠ΅Π΄ ΠΈ ΠΏΠΎΠΊΠ°Π·Π²Π°Π½Π΅ Π½Π° ΡΡΠΎΡΠ²Π΅ΡΠ½ΠΎΡΠΎ ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΊΠΎΠ³Π°ΡΠΎ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π°ΡΠ΅ "clang-cl /diagnostic :caret /c test.cc");
- ΠΠΎΠ»ΡΠΌΠ° ΡΠ°ΡΡ ΠΎΡ Π½ΠΎΠ²ΠΈ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ Π±ΡΡ Π° Π΄ΠΎΠ±Π°Π²Π΅Π½ΠΈ ΠΊΡΠΌ linter clang-tidy, Π²ΠΊΠ»ΡΡΠΈΡΠ΅Π»Π½ΠΎ Π΄ΠΎΠ±Π°Π²Π΅Π½ΠΈ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ, ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ½ΠΈ Π·Π° OpenMP API;
-
Π Π°Π·ΡΠΈΡΠ΅Π½ΠΎ ΡΡΡΠ²ΡΡΠ½ΠΈ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈclangd (Clang Server), Π² ΠΊΠΎΠΉΡΠΎ ΡΠ΅ΠΆΠΈΠΌΡΡ Π·Π° ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ Π½Π° ΡΠΎΠ½ΠΎΠ² ΠΈΠ½Π΄Π΅ΠΊΡ Π΅ Π°ΠΊΡΠΈΠ²ΠΈΡΠ°Π½ ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅, Π΄ΠΎΠ±Π°Π²Π΅Π½Π° Π΅ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π·Π° ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΡΠ°Π»Π½ΠΈ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ Ρ ΠΊΠΎΠ΄ (ΠΈΠ·Π²Π»ΠΈΡΠ°Π½Π΅ Π½Π° ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ, ΡΠ°Π·ΡΠΈΡΡΠ²Π°Π½Π΅ Π½Π° Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ½ΠΈ ΠΈ ΠΌΠ°ΠΊΡΠΎ Π΄Π΅ΡΠΈΠ½ΠΈΡΠΈΠΈ, ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ²Π°Π½Π΅ Π½Π° Π΅ΠΊΡΠ°Π½ΠΈΡΠ°Π½ΠΈ Π½ΠΈΠ·ΠΎΠ²Π΅ Π² Π½Π΅Π΅ΠΊΡΠ°Π½ΠΈΡΠ°Π½ΠΈ), Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ Π·Π° ΠΏΠΎΠΊΠ°Π·Π²Π°Π½Π΅ ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΡ ΠΎΡ Clang-tidy, ΡΠ°Π·ΡΠΈΡΠ΅Π½Π° Π΄ΠΈΠ°Π³Π½ΠΎΡΡΠΈΠΊΠ° Π½Π° Π³ΡΠ΅ΡΠΊΠΈ Π² Π·Π°Π³Π»Π°Π²Π½ΠΈΡΠ΅ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ ΠΈ Π΄ΠΎΠ±Π°Π²Π΅Π½Π° Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ Π·Π° ΠΏΠΎΠΊΠ°Π·Π²Π°Π½Π΅ Π½Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π·Π° ΠΉΠ΅ΡΠ°ΡΡ ΠΈΡΡΠ° Π½Π° ΡΠΈΠΏΠ°;
ΠΡΠ½ΠΎΠ²Π½Π°ΡΠ°
- ΠΡΠΌ LLD Π»ΠΈΠ½ΠΊΠ΅ΡΠ° Π΅ Π΄ΠΎΠ±Π°Π²Π΅Π½Π° Π΅ΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠ°Π»Π½Π° ΡΡΠ½ΠΊΡΠΈΡ Π·Π° ΡΠ°Π·Π΄Π΅Π»ΡΠ½Π΅, ΠΊΠΎΡΡΠΎ Π²ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π΄Π° ΡΠ°Π·Π΄Π΅Π»ΠΈΡΠ΅ Π΅Π΄Π½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ° Π½Π° Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΡΠ°ΡΡΠΈ, Π²ΡΡΠΊΠ° ΠΎΡ ΠΊΠΎΠΈΡΠΎ ΡΠ΅ Π½Π°ΠΌΠΈΡΠ° Π² ΠΎΡΠ΄Π΅Π»Π΅Π½ ELF ΡΠ°ΠΉΠ». Π’Π°Π·ΠΈ ΡΡΠ½ΠΊΡΠΈΡ Π²ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π΄Π° ΡΡΠ°ΡΡΠΈΡΠ°ΡΠ΅ ΠΎΡΠ½ΠΎΠ²Π½Π°ΡΠ° ΡΠ°ΡΡ Π½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°ΡΠ°, ΠΊΠΎΡΡΠΎ ΡΠ΅ Π·Π°ΡΠ΅Π΄ΠΈ Π΄ΡΡΠ³ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΈ, Π°ΠΊΠΎ Π΅ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΡΠ°Π±ΠΎΡΠ° (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΎΡΠ΄Π΅Π»ΠΈΡΠ΅ Π²Π³ΡΠ°Π΄Π΅Π½ΠΈΡ PDF ΠΏΡΠ΅Π³Π»Π΅Π΄ Π² ΠΎΡΠ΄Π΅Π»Π΅Π½ ΡΠ°ΠΉΠ», ΠΊΠΎΠΉΡΠΎ ΡΠ΅ ΡΠ΅ Π·Π°ΡΠ΅Π΄ΠΈ ΡΠ°ΠΌΠΎ ΠΊΠΎΠ³Π°ΡΠΎ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΡΡ ΠΎΡΠ²ΠΎΡΠΈ PDF ΡΠ°ΠΉΠ»).
LLD Linker
ΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈ Π½Π° ΠΏΡΠ΅Π΄Π΅Π½ ΠΏΠ»Π°Π½ Π΄ΠΎ ΡΡΡΡΠΎΡΠ½ΠΈΠ΅, ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡΠΎ Π·Π° ΡΠ²ΡΡΠ·Π²Π°Π½Π΅ Π½Π° Linux ΡΠ΄ΡΠΎΡΠΎ Π·Π° arm32_7, arm64, ppc64le ΠΈ x86_64 Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠΈ.
ΠΠΎΠ²ΠΈ ΠΎΠΏΡΠΈΠΈ "-" (ΠΈΠ·Ρ ΠΎΠ΄ ΠΊΡΠΌ stdout), "-[no-]allow-shlib-undefined", "-undefined-glob", "-nmagic", "-omagic", "-dependent-library", " - z ifunc-noplt" ΠΈ β-z common-page-size". ΠΠ° Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ°ΡΠ° AArch64 Π΅ Π΄ΠΎΠ±Π°Π²Π΅Π½Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π·Π° BTI (Branch Target Indicator) ΠΈ PAC (Pointer Authentication Code) ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ. ΠΠΎΠ΄Π΄ΡΡΠΆΠΊΠ°ΡΠ° Π·Π° ΠΏΠ»Π°ΡΡΠΎΡΠΌΠΈ MIPS, RISC-V ΠΈ PowerPC Π΅ Π·Π½Π°ΡΠΈΡΠ΅Π»Π½ΠΎ ΠΏΠΎΠ΄ΠΎΠ±ΡΠ΅Π½Π°. ΠΠΎΠ±Π°Π²Π΅Π½Π° ΠΏΡΡΠ²ΠΎΠ½Π°ΡΠ°Π»Π½Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π·Π° Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ½ΠΎ ΡΠ²ΡΡΠ·Π²Π°Π½Π΅ Π·Π° WebAssembly; - Π libc++
ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ ssize, std::is_constant_evaluated, std::midpoint ΠΈ std::lerp, ΠΌΠ΅ΡΠΎΠ΄ΠΈ βfrontβ ΠΈ βbackβ ΡΠ° Π΄ΠΎΠ±Π°Π²Π΅Π½ΠΈ ΠΊΡΠΌ std::span, Π΄ΠΎΠ±Π°Π²Π΅Π½ΠΈ ΡΠ° Π°ΡΡΠΈΠ±ΡΡΠΈ Π½Π° ΡΠΈΠΏΠΎΠ²Π΅ std::is_unbounded_array ΠΈ std::is_bounded_array , std Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈΡΠ΅ ΡΠ° ΡΠ°Π·ΡΠΈΡΠ΅Π½ΠΈ: :atomic. ΠΠΎΠ΄Π΄ΡΡΠΆΠΊΠ°ΡΠ° Π·Π° GCC 4.9 Π΅ ΠΏΡΠ΅ΡΡΡΠ°Π½ΠΎΠ²Π΅Π½Π° (ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Ρ GCC 5.1 ΠΈ ΠΏΠΎ-Π½ΠΎΠ²ΠΈ Π²Π΅ΡΡΠΈΠΈ). ΠΠΎΠ±Π°Π²Π΅Π½Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ°ΠΠ―Π₯ ΠΠ (ΡΠΈΡΡΠ΅ΠΌΠ΅Π½ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ WebAssembly, ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° WebAssembly ΠΈΠ·Π²ΡΠ½ Π±ΡΠ°ΡΠ·ΡΡΠ°); - ΠΠΎΠ±Π°Π²Π΅Π½ΠΈ ΡΠ° Π½ΠΎΠ²ΠΈ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ. Π Π°Π·ΡΠ΅ΡΠ΅Π½ΠΎ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ²Π°Π½Π΅ Π½Π° memcmp ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½ΠΈΡ ΠΊΡΠΌ bcmp Π² Π½ΡΠΊΠΎΠΈ ΡΠΈΡΡΠ°ΡΠΈΠΈ. Π Π΅Π°Π»ΠΈΠ·ΠΈΡΠ°Π½ΠΎ ΠΏΡΠΎΠΏΡΡΠΊΠ°Π½Π΅ Π½Π° ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π° Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° Π·Π° ΡΠ°Π±Π»ΠΈΡΠΈ Π·Π° ΠΏΡΠ΅ΡΠΊΠ°ΡΠ°Π½Π΅, Π² ΠΊΠΎΠΈΡΠΎ Π΄ΠΎΠ»Π½ΠΈΡΠ΅ ΠΏΡΠ΅Π²ΠΊΠ»ΡΡΠ²Π°ΡΠΈ Π±Π»ΠΎΠΊΠΎΠ²Π΅ ΡΠ° Π½Π΅Π΄ΠΎΡΡΡΠΏΠ½ΠΈ ΠΈΠ»ΠΈ ΠΊΠΎΠ³Π°ΡΠΎ Π½Π΅ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ ΠΏΡΠΈ ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅ Π½Π° ΡΡΠ½ΠΊΡΠΈΠΈ Ρ ΡΠΈΠΏ void;
- ΠΠ΅ΠΊΠ΅Π½Π΄ΡΡ Π·Π° RISC-V Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ°ΡΠ° Π΅ ΡΡΠ°Π±ΠΈΠ»ΠΈΠ·ΠΈΡΠ°Π½, ΠΊΠΎΠΉΡΠΎ Π²Π΅ΡΠ΅ Π½Π΅ Π΅ ΠΏΠΎΠ·ΠΈΡΠΈΠΎΠ½ΠΈΡΠ°Π½ ΠΊΠ°ΡΠΎ Π΅ΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠ°Π»Π΅Π½ ΠΈ Π΅ ΠΈΠ·Π³ΡΠ°Π΄Π΅Π½ ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅. ΠΡΠΈΠ³ΡΡΡΠ²Π° ΠΏΡΠ»Π½Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π·Π° Π³Π΅Π½Π΅ΡΠΈΡΠ°Π½Π΅ Π½Π° ΠΊΠΎΠ΄ Π·Π° Π²Π°ΡΠΈΠ°Π½ΡΠΈ Π½Π° Π½Π°Π±ΠΎΡ ΠΎΡ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ RV32I ΠΈ RV64I Ρ MAFDC ΡΠ°Π·ΡΠΈΡΠ΅Π½ΠΈΡ;
- ΠΡΡ
Π° Π½Π°ΠΏΡΠ°Π²Π΅Π½ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠ±ΡΠΎΠΉΠ½ΠΈ ΠΏΠΎΠ΄ΠΎΠ±ΡΠ΅Π½ΠΈΡ Π² Π±Π΅ΠΊΠ΅Π½Π΄Π° Π·Π° X86, AArch64, ARM, SystemZ, MIPS, AMDGPU ΠΈ PowerPC Π°ΡΡ
ΠΈΡΠ΅ΠΊΡΡΡΠΈ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ Π·Π° Π°ΡΡ
ΠΈΡΠ΅ΠΊΡΡΡΠ°ΡΠ°
AArch64 Π΄ΠΎΠ±Π°Π²ΠΈ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π·Π° ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ SVE2 (Scalable Vector Extension 2) ΠΈ MTE (Memory Tagging Extensions); Π² Π±Π΅ΠΊΠ΅Π½Π΄Π° Π½Π° ARM Π±Π΅ΡΠ΅ Π΄ΠΎΠ±Π°Π²Π΅Π½Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π·Π° Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ°ΡΠ° Armv8.1-M ΠΈ ΡΠ°Π·ΡΠΈΡΠ΅Π½ΠΈΠ΅ΡΠΎ MVE (M-Profile Vector Extension). ΠΠΎΠ΄Π΄ΡΡΠΆΠΊΠ°ΡΠ° Π·Π° Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ°ΡΠ° GFX10 (Navi) Π΅ Π΄ΠΎΠ±Π°Π²Π΅Π½Π° ΠΊΡΠΌ Π±Π΅ΠΊΠ΅Π½Π΄Π° Π½Π° AMDGPU, Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈΡΠ΅ Π·Π° ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅ Π½Π° ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠ° Π°ΠΊΡΠΈΠ²ΠΈΡΠ°Π½ΠΈ ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅ ΠΈ Π΅ Π°ΠΊΡΠΈΠ²ΠΈΡΠ°Π½ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡΠ°Π½ ΠΏΡΠΎΠΏΡΡΠΊDPP (ΠΡΠΈΠΌΠΈΡΠΈΠ²ΠΈ Ρ ΠΏΠ°ΡΠ°Π»Π΅Π»Π½ΠΈ Π΄Π°Π½Π½ΠΈ). - ΠΠ΅Π±ΡΠ³Π΅ΡΡΡ LLDB Π²Π΅ΡΠ΅ ΠΈΠΌΠ° ΡΠ²Π΅ΡΠ½ΠΎ ΠΎΡΠ²Π΅ΡΡΠ²Π°Π½Π΅ Π·Π° ΠΎΠ±ΡΠ°ΡΠ½ΠΈ ΡΠ»Π΅Π΄ΠΈ ΠΈ Π΄ΠΎΠ±Π°Π²Π΅Π½Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π·Π° Π±Π»ΠΎΠΊΠΎΠ²Π΅ΡΠ΅ DWARF4 debug_types ΠΈ DWARF5 debug_info;
- ΠΠΎΠ΄Π΄ΡΡΠΆΠΊΠ°ΡΠ° Π½Π° ΠΎΠ±Π΅ΠΊΡΠ½ΠΈ ΠΈ ΠΈΠ·ΠΏΡΠ»Π½ΠΈΠΌΠΈ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ Π²ΡΠ² ΡΠΎΡΠΌΠ°Ρ COFF Π΅ Π΄ΠΎΠ±Π°Π²Π΅Π½Π° ΠΊΡΠΌ ΠΏΠΎΠΌΠΎΡΠ½ΠΈΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈ llvm-objcopy ΠΈ llvm-strip.
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: opennet.ru