ΠΠΎΡΠ»Π΅ ΡΠ΅ΡΡΠΈ ΠΌΠ΅ΡΡΡΠ΅Π² ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ
ΠΠ· Π½ΠΎΠ²ΡΡ
Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠ΅ΠΉ LLVM 9.0 ΠΎΡΠΌΠ΅ΡΠ°Π΅ΡΡΡ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΠ΅ ΡΠ½ΡΡΠΈΡ ΠΌΠ΅ΡΠΊΠΈ ΡΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠ°Π»ΡΠ½ΠΎΠΉ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ Ρ ΡΠ΅Π»Π΅Π²ΠΎΠΉ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ RISC-V, ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° C++ Π΄Π»Ρ OpenCL, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΡΠ°Π·Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π½Π° Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈ ΠΏΠΎΠ΄Π³ΡΡΠΆΠ°Π΅ΠΌΡΠ΅ ΡΠ°ΡΡΠΈ Π² LLD ΠΈ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΠΈ «
-
ΠΠΎΠ±Π°Π²Π»Π΅Π½Π° ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ½ΠΎΠ³ΠΎ Π΄Π»Ρ GCC Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ «asm goto «, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ ΠΈΠ· Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠ½ΠΎΠ³ΠΎ inline-Π±Π»ΠΎΠΊΠ° ΠΊ ΠΌΠ΅ΡΠΊΠ΅ Π² ΠΊΠΎΠ΄Π΅ Π½Π° ΡΠ·ΡΠΊΠ΅ Π‘ΠΈ. Π£ΠΊΠ°Π·Π°Π½Π½Π°Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠ° Π΄Π»Ρ ΡΠ±ΠΎΡΠΊΠΈ ΡΠ΄ΡΠ° 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;
- ΠΠ»Ρ ΡΠ·ΡΠΊΠ° Π‘ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° ΠΌΠ°ΠΊΡΠΎΡΠ° «__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-developer»). ΠΠΎΠ±Π°Π²Π»Π΅Π½ ΡΠ»Π°Π³ «-analyzer-werror» Π΄Π»Ρ ΡΠ΅Π°Π³ΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π½Π° ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΡ ΠΊΠ°ΠΊ Π½Π° ΠΎΡΠΈΠ±ΠΊΠΈ.
ΠΠΎΠ±Π°Π²Π»Π΅Π½Ρ Π½ΠΎΠ²ΡΠ΅ ΡΠ΅ΠΆΠΈΠΌΡ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ:- security.insecureAPI.DeprecatedOrUnsafeBufferHandling Π΄Π»Ρ Π²ΡΡΠ²Π»Π΅Π½ΠΈΡ Π½Π΅Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΡΡ ΠΏΡΠΈΡΠΌΠΎΠ² ΡΠ°Π±ΠΎΡΡ Ρ Π±ΡΡΠ΅ΡΠ°ΠΌΠΈ;
- osx.MIGChecker Π΄Π»Ρ ΠΏΠΎΠΈΡΠΊΠ° Π½Π°ΡΡΡΠ΅Π½ΠΈΠΉ ΠΏΡΠ°Π²ΠΈΠ» ΠΎΡΠΎΡΠΌΠ»Π΅Π½ΠΈΡ Π²ΡΠ·ΠΎΠ²ΠΎΠ² MIG (Mach Interface Generator);
- optin.osx.OSObjectCStyleCast Π΄Π»Ρ ΠΏΠΎΠΈΡΠΊΠ° Π½Π΅ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΡΡ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠΉ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² XNU libkern;
- apiModeling.llvm Ρ Π½Π°Π±ΠΎΡΠΎΠΌ ΠΌΠΎΠ΄Π΅Π»ΠΈΡΡΡΡΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΉ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ Π΄Π»Ρ Π²ΡΡΠ²Π»Π΅Π½ΠΈΡ ΠΎΡΠΈΠ±ΠΎΠΊ Π² ΠΊΠΎΠ΄ΠΎΠ²ΠΎΠΉ Π±Π°Π·Π΅ LLVM;
- Π‘ΡΠ°Π±ΠΈΠ»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½ ΠΊΠΎΠ΄ Π΄Π»Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ Π½Π΅ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² Π‘++ (UninitializedObject Π² ΠΏΠ°ΠΊΠ΅ΡΠ΅ optin.cplusplus);
- Π ΡΡΠΈΠ»ΠΈΡΡ clang-format Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° ΡΠΎΡΠΌΠ°ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΊΠΎΠ΄Π° Π½Π° ΡΠ·ΡΠΊΠ΅ C# ΠΈ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½Π° ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΠΌΠΎΠ³ΠΎ Π² Microsoft ΡΡΠΈΠ»Ρ ΠΎΡΠΎΡΠΌΠ»Π΅Π½ΠΈΡ ΠΊΠΎΠ΄Π°;
- Π clang-cl, Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π½ΠΎΠΌ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ, ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°ΡΡΠ΅ΠΌ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡΡ Π½Π° ΡΡΠΎΠ²Π½Π΅ ΠΎΠΏΡΠΈΠΉ Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠΎΠΌ cl.exe ΠΈΠ· ΡΠΎΡΡΠ°Π²Π° Visual Studio, Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° ΡΠ²ΡΠΈΡΡΠΈΠΊΠ° Π΄Π»Ρ Π²ΠΎΡΠΏΡΠΈΡΡΠΈΡ Π½Π΅ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΡ ΡΠ°ΠΉΠ»ΠΎΠ² ΠΊΠ°ΠΊ ΠΎΠΏΡΠΈΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ Ρ Π²ΡΠ²ΠΎΠ΄ΠΎΠΌ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅Π³ΠΎ ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΡ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΡΠΈ Π·Π°ΠΏΡΡΠΊΠ΅ «clang-cl /diagnostic:caret /c test.cc»);
- Π linter clang-tidy Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° Π±ΠΎΠ»ΡΡΠ°Ρ ΠΏΠΎΡΡΠΈΡ Π½ΠΎΠ²ΡΡ ΠΏΡΠΎΠ²Π΅ΡΠΎΠΊ, Π² ΡΠΎΠΌ ΡΠΈΡΠ»Π΅ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ, ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ½ΡΠ΅ Π΄Π»Ρ API OpenMP;
-
Π Π°ΡΡΠΈΡΠ΅Π½Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΡΠ΅ΡΠ²Π΅ΡΠ°clangd (Clang Server), Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π²ΠΊΠ»ΡΡΠ΅Π½ ΡΠ΅ΠΆΠΈΠΌ ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΈΡ ΠΈΠ½Π΄Π΅ΠΊΡΠ° Π² ΡΠΎΠ½ΠΎΠ²ΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅, Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ½ΡΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΠΉ Ρ ΠΊΠΎΠ΄ΠΎΠΌ (ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ, ΡΠ°ΡΠΊΡΡΡΠΈΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠΉ auto ΠΈ ΠΌΠ°ΠΊΡΠΎΡΠΎΠ², ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠΊΡΠ°Π½ΠΈΡΠΎΠ²Π°Π½Π½ΡΡ ΡΡΡΠΎΠΊ Π² Π½Π΅ΡΠΊΡΠ°Π½ΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅), ΠΏΠΎΡΠ²ΠΈΠ»Π°ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π²ΡΠ²ΠΎΠ΄Π° ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΠΉ ΠΎΡ Clang-tidy, ΡΠ°ΡΡΠΈΡΠ΅Π½Π° Π΄ΠΈΠ°Π³Π½ΠΎΡΡΠΈΠΊΠ° ΠΎΡΠΈΠ±ΠΎΠΊ Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡΠ½ΡΡ ΡΠ°ΠΉΠ»Π°Ρ ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π²ΡΠ²ΠΎΠ΄Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΎΠ± ΠΈΠ΅ΡΠ°ΡΡ ΠΈΠΈ ΡΠΈΠΏΠΎΠ²;
ΠΡΠ½ΠΎΠ²Π½ΡΠ΅
- Π ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΡΠΈΠΊ LLD Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° ΡΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠ°Π»ΡΠ½Π°Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΏΠ°ΡΡΠΈΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠ°Ρ ΡΠ°Π·Π΄Π΅Π»ΠΈΡΡ ΠΎΠ΄Π½Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π½Π° Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ°ΡΡΠ΅ΠΉ, ΠΊΠ°ΠΆΠ΄Π°Ρ ΠΈΠ· ΠΊΠΎΡΠΎΡΡΡ
ΡΠ°Π·ΠΌΠ΅ΡΠ°Π΅ΡΡΡ Π² ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠΌ ELF-ΡΠ°ΠΉΠ»Π΅. Π£ΠΊΠ°Π·Π°Π½Π½Π°Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π·Π°ΠΏΡΡΠΊΠ°ΡΡ ΠΎΡΠ½ΠΎΠ²Π½ΡΡ ΡΠ°ΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΠΎ ΠΌΠ΅ΡΠ΅ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ Π² ΠΏΡΠΎΡΠ΅ΡΡΠ΅ ΡΠ°Π±ΠΎΡΡ Π±ΡΠ΄Π΅Ρ ΠΏΠΎΠ΄Π³ΡΡΠΆΠ°ΡΡ ΠΎΡΡΠ°Π»ΡΠ½ΡΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΠ΄Π΅Π»ΠΈΡΡ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠΉ PDF-ΠΏΡΠΎΡΠΌΠΎΡΡΡΠΈΠΊ Π² ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΉ ΡΠ°ΠΉΠ», ΠΊΠΎΡΠΎΡΡΠΉ Π±ΡΠ΄Π΅Ρ Π·Π°Π³ΡΡΠΆΠ°ΡΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΎΡΠΊΡΡΠ» PDF-ΡΠ°ΠΉΠ»).
ΠΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΡΠΈΠΊ LLD
Π΄ΠΎΠ²Π΅Π΄ΡΠ½ Π΄ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ, ΠΏΡΠΈΠ³ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π΄Π»Ρ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ ΡΠ΄ΡΠ° 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, Π² std::span Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ ΠΌΠ΅ΡΠΎΠ΄Ρ «front» ΠΈ «back», Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ ΠΏΡΠΈΠ·Π½Π°ΠΊΠΈ ΡΠΈΠΏΠΎΠ² std::is_unbounded_array ΠΈ std::is_bounded_array, ΡΠ°ΡΡΠΈΡΠ΅Π½Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ std::atomic. ΠΡΠ΅ΠΊΡΠ°ΡΠ΅Π½Π° ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° GCC 4.9 (Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ GCC 5.1 ΠΈ Π±ΠΎΠ»Π΅Π΅ Π½ΠΎΠ²ΡΡ Π²ΡΠΏΡΡΠΊΠΎΠ²). ΠΠΎΠ±Π°Π²Π»Π΅Π½Π° ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ°WASI (WebAssembly System Interface, ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Π΄Π»Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ WebAssembly Π²Π½Π΅ Π±ΡΠ°ΡΠ·Π΅ΡΠ°); - ΠΠΎΠ±Π°Π²Π»Π΅Π½Ρ Π½ΠΎΠ²ΡΠ΅ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ. ΠΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΎ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Π²ΡΠ·ΠΎΠ²ΠΎΠ² memcmp Π² bcmp Π² Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΡΠΈΡΡΠ°ΡΠΈΡΡ . Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ ΠΏΡΠΎΠΏΡΡΠΊ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ΠΎΠ² Π΄Π»Ρ ΡΠ°Π±Π»ΠΈΡ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ΠΎΠ², Π² ΠΊΠΎΡΠΎΡΡΡ Π½ΠΈΠΆΠ½ΠΈΠ΅ Π±Π»ΠΎΠΊΠΈ switch Π½Π΅Π΄ΠΎΡΡΠΈΠΆΠΈΠΌΡ ΠΈΠ»ΠΈ ΠΊΠΎΠ³Π΄Π° ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΡΠΈ Π²ΡΠ·ΠΎΠ²Π΅ ΡΡΠ½ΠΊΡΠΈΠΉ Ρ ΡΠΈΠΏΠΎΠΌ 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). Π Π±ΡΠΊΠ΅Π½Π΄ AMDGPU Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΡ GFX10 (Navi), ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π²ΠΊΠ»ΡΡΠ΅Π½Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Π²ΡΠ·ΠΎΠ²Π° ΡΡΠ½ΠΊΡΠΈΠΉ ΠΈ Π°ΠΊΡΠΈΠ²ΠΈΡΠΎΠ²Π°Π½ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΏΡΠΎΡ ΠΎΠ΄DPP (Data-Parallel Primitives). - Π ΠΎΡΠ»Π°Π΄ΡΠΈΠΊΠ΅ LLDB ΠΏΠΎΡΠ²ΠΈΠ»Π°ΡΡ ΡΠ²Π΅ΡΠ½Π°Ρ ΠΏΠΎΠ΄ΡΠ²Π΅ΡΠΊΠ° ΠΎΠ±ΡΠ°ΡΠ½ΡΡ ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΎΠΊ, Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° Π±Π»ΠΎΠΊΠΎΠ² DWARF4 debug_types ΠΈ DWARF5 debug_info;
- Π ΡΡΠΈΠ»ΠΈΡΡ llvm-objcopy ΠΈ llvm-strip Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° ΠΎΠ±ΡΠ΅ΠΊΡΠ½ΡΡ ΠΈ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΡ ΡΠ°ΠΉΠ»ΠΎΠ² Π² ΡΠΎΡΠΌΠ°ΡΠ΅ COFF.
ΠΡΡΠΎΡΠ½ΠΈΠΊ: opennet.ru