ΠΠΎ ΡΠ΅ΡΡ ΠΌΠ΅ΡΠ΅ΡΠΈ ΡΠ°Π·Π²ΠΎΡ
ΠΠΎΠ²ΠΈΡΠ΅ ΠΊΠ°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠΈ Π½Π° LLVM 9.0 Π²ΠΊΠ»ΡΡΡΠ²Π°Π°Ρ ΠΎΡΡΡΡΠ°Π½ΡΠ²Π°ΡΠ΅ Π½Π° ΠΎΠ·Π½Π°ΠΊΠ°ΡΠ° Π·Π° Π΅ΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠ°Π»Π΅Π½ Π΄ΠΈΠ·Π°ΡΠ½ ΠΎΠ΄ ΡΠ΅Π»Π½Π°ΡΠ° ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ° RISC-V, C++ ΠΏΠΎΠ΄Π΄ΡΡΠΊΠ° Π·Π° OpenCL, ΠΌΠΎΠΆΠ½ΠΎΡΡ Π·Π° ΠΏΠΎΠ΄Π΅Π»Π±Π° Π½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°ΡΠ° Π½Π° Π΄ΠΈΠ½Π°ΠΌΠΈΡΠΊΠΈ Π²ΡΠΈΡΠ°Π½ΠΈ Π΄Π΅Π»ΠΎΠ²ΠΈ Π²ΠΎ LLD ΠΈ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠ° Π½Π° β
-
ΠΠΎΠ΄Π°Π΄Π΅Π½ΠΎ ΠΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠ° Π½Π° ΠΈΠ·ΡΠ°Π·ΠΎΡ ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ΅Π½ Π·Π° GCC βΠ°ΡΠΌ Π³ΠΎΡΠΎ β, ΡΡΠΎ Π²ΠΈ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΡΠ²Π° Π΄Π° ΡΠ΅ ΠΏΡΠ΅ΠΌΠ΅ΡΡΠΈΡΠ΅ ΠΎΠ΄ Π²Π³ΡΠ°Π΄Π΅Π½ Π±Π»ΠΎΠΊ Π½Π° Π°ΡΠ΅ΠΌΠ±Π»Π΅Ρ Π΄ΠΎ Π΅ΡΠΈΠΊΠ΅ΡΠ° Π²ΠΎ C ΠΊΠΎΠ΄. ΠΠ²Π°Π° ΡΡΠ½ΠΊΡΠΈΡΠ° Π΅ ΠΏΠΎΡΡΠ΅Π±Π½Π° Π·Π° Π΄Π° ΡΠ΅ ΠΈΠ·Π³ΡΠ°Π΄ΠΈ ΠΊΠ΅ΡΠ½Π΅Π»ΠΎΡ ΠΠΈΠ½ΡΠΊΡ Π²ΠΎ ΡΠ΅ΠΆΠΈΠΌΠΎΡ β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(ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»ΡΠ²Π°Ρ)β ΠΈ Π³Π΅Π½Π΅ΡΠΈΡΠ°ΡΠ΅ Π½Π° ΠΏΡΠΈΠ΄ΡΡΠΆΠ½ΠΈ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ Π·Π° Π΄Π΅Π±Π°Π³ΠΈΡΠ°ΡΠ΅ ΡΡΠΎ Π²ΠΈ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΡΠ²Π° Π΄Π° ΡΠ° ΡΠ»Π΅Π΄ΠΈΡΠ΅ ΠΏΠΎΡΡΠΎΡΡΠ²Π°ΡΠΊΠ°ΡΠ° Π½Π° ΠΌΠ΅ΠΌΠΎΡΠΈΡΠ° Π²ΠΎ ΠΎΠΊΠΎΠ»ΠΈΠ½Π°ΡΠ° Π½Π° 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-errorβ Π·Π° Π΄Π° ΡΠ΅ ΡΡΠ΅ΡΠΈΡΠ°Π°Ρ ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅Π΄ΡΠ²Π°ΡΠ°ΡΠ° ΠΊΠ°ΠΊΠΎ Π³ΡΠ΅ΡΠΊΠΈ.
ΠΠΎΠ΄Π°Π΄Π΅Π½ΠΈ Π½ΠΎΠ²ΠΈ ΡΠ΅ΠΆΠΈΠΌΠΈ Π·Π° Π²Π΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡΠ°:- 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β);
- ΠΠΎΠ΄Π°Π΄Π΅Π½ Π΅ Π³ΠΎΠ»Π΅ΠΌ Π΄Π΅Π» ΠΎΠ΄ Π½ΠΎΠ²ΠΈ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ Π½Π° ΠΊΠ»Π°Π½Π³-ΡΡΠ΅Π΄Π½ΠΈΠΎΡ Π»ΠΈΠ½ΡΠ΅Ρ, Π²ΠΊΠ»ΡΡΡΠ²Π°ΡΡΠΈ Π΄ΠΎΠ΄Π°Π΄Π΅Π½ΠΈ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ½ΠΈ Π·Π° OpenMP API;
-
ΠΡΠΎΡΠΈΡΠ΅Π½ Π‘ΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡΠΈ Π½Π° ΡΠ΅ΡΠ²Π΅ΡΠΎΡClangd (Clang Server), Π²ΠΎ ΠΊΠΎΡ ΡΡΠ°Π½Π΄Π°ΡΠ΄Π½ΠΎ Π΅ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΠ΅Π½ ΡΠ΅ΠΆΠΈΠΌΠΎΡ Π·Π° Π³ΡΠ°Π΄Π΅ΡΠ΅ Π½Π° ΠΈΠ½Π΄Π΅ΠΊΡ Π²ΠΎ Π·Π°Π΄Π½ΠΈΠ½Π°, Π΄ΠΎΠ΄Π°Π΄Π΅Π½Π° Π΅ ΠΏΠΎΠ΄Π΄ΡΡΠΊΠ° Π·Π° ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΡΠ°Π»Π½ΠΈ Π΄Π΅ΡΡΡΠ²Π° ΡΠΎ ΠΊΠΎΠ΄ (ΠΏΡΠ΅Π·Π΅ΠΌΠ°ΡΠ΅ Π½Π° ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°, ΠΏΡΠΎΡΠΈΡΡΠ²Π°ΡΠ΅ Π½Π° Π°Π²ΡΠΎΠΌΠ°ΡΡΠΊΠΎ ΠΈ ΠΌΠ°ΠΊΡΠΎ Π΄Π΅ΡΠΈΠ½ΠΈΡΠΈΠΈ, ΠΊΠΎΠ½Π²Π΅ΡΠ·ΠΈΡΠ° Π½Π° ΠΈΠ·Π±Π΅Π³Π½Π°ΡΠΈ Π½ΠΈΠ·ΠΈ Π²ΠΎ Π½Π΅ΠΈΠ·Π±Π΅Π³Π½Π°ΡΠΈ), ΠΌΠΎΠΆΠ½ΠΎΡΡ Π·Π° ΠΏΡΠΈΠΊΠ°ΠΆΡΠ²Π°ΡΠ΅ ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅Π΄ΡΠ²Π°ΡΠ° ΠΎΠ΄ Clang-tidy, ΠΏΡΠΎΡΠΈΡΠ΅Π½Π° Π΄ΠΈΡΠ°Π³Π½ΠΎΡΡΠΈΠΊΠ° Π½Π° Π³ΡΠ΅ΡΠΊΠΈ Π²ΠΎ Π΄Π°ΡΠΎΡΠ΅ΠΊΠΈΡΠ΅ Π·Π° Π·Π°Π³Π»Π°Π²ΠΈΡΠ° ΠΈ Π΄ΠΎΠ΄Π°Π΄Π΅Π½Π° ΠΌΠΎΠΆΠ½ΠΎΡΡ Π·Π° ΠΏΡΠΈΠΊΠ°ΠΆΡΠ²Π°ΡΠ΅ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ Π·Π° Ρ ΠΈΠ΅ΡΠ°ΡΡ ΠΈΡΠ°ΡΠ° Π½Π° ΡΠΈΠΏΠΎΡ;
ΠΠ»Π°Π²Π½ΠΈΡΠ΅
- ΠΠΎΠ΄Π°Π΄Π΅Π½Π° Π΅ Π΅ΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠ°Π»Π½Π° ΠΊΠ°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠ° Π·Π° ΠΏΠ°ΡΡΠΈΡΠΈΠΎΠ½ΠΈΡΠ°ΡΠ΅ Π½Π° ΠΏΠΎΠ²ΡΠ·ΡΠ²Π°ΡΠΎΡ LLD, ΠΊΠΎΡ Π²ΠΈ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΡΠ²Π° Π΄Π° ΠΏΠΎΠ΄Π΅Π»ΠΈΡΠ΅ Π΅Π΄Π½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ° Π½Π° Π½Π΅ΠΊΠΎΠ»ΠΊΡ Π΄Π΅Π»ΠΎΠ²ΠΈ, ΠΎΠ΄ ΠΊΠΎΠΈ ΡΠ΅ΠΊΠΎΡ ΡΠ΅ Π½Π°ΠΎΡΠ° Π²ΠΎ ΠΏΠΎΡΠ΅Π±Π½Π° Π΄Π°ΡΠΎΡΠ΅ΠΊΠ° ELF. ΠΠ²Π°Π° ΡΡΠ½ΠΊΡΠΈΡΠ° Π²ΠΈ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΡΠ²Π° Π΄Π° Π³ΠΎ ΡΡΠ°ΡΡΡΠ²Π°ΡΠ΅ Π³Π»Π°Π²Π½ΠΈΠΎΡ Π΄Π΅Π» ΠΎΠ΄ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°ΡΠ°, ΠΊΠΎΡ ΡΠ΅ Π²ΡΠΈΡΠ° Π΄ΡΡΠ³ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΈ ΠΊΠΎΠ»ΠΊΡ ΡΡΠΎ Π΅ ΠΏΠΎΡΡΠ΅Π±Π½ΠΎ Π·Π° Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΡΠ°Π±ΠΎΡΠ°ΡΠ° (Π½Π° ΠΏΡΠΈΠΌΠ΅Ρ, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π³ΠΎ ΠΎΠ΄Π΄Π΅Π»ΠΈΡΠ΅ Π²Π³ΡΠ°Π΄Π΅Π½ΠΈΠΎΡ ΠΏΡΠ΅Π³Π»Π΅Π΄ΡΠ²Π°Ρ Π½Π° PDF Π²ΠΎ ΠΏΠΎΡΠ΅Π±Π½Π° Π΄Π°ΡΠΎΡΠ΅ΠΊΠ°, ΠΊΠΎΡΠ° ΡΠ΅ ΡΠ΅ Π²ΡΠΈΡΠ° ΡΠ°ΠΌΠΎ ΠΊΠΎΠ³Π° ΠΊΠΎΡΠΈΡΠ½ΠΈΠΊΠΎΡ ΡΠ΅ Π³ΠΎ ΠΎΡΠ²ΠΎΡΠΈ PDF-ΠΎΡ Π΄Π°ΡΠΎΡΠ΅ΠΊΠ°).
LLD Linker
Π΄ΠΎΠ½Π΅ΡΠ΅ Π΄ΠΎ ΠΈΠ·ΡΠ°Π· Π²ΠΎ ΡΠΎΡΡΠΎΡΠ±Π° ΠΏΠΎΠ³ΠΎΠ΄Π½Π° Π·Π° ΠΏΠΎΠ²ΡΠ·ΡΠ²Π°ΡΠ΅ Π½Π° ΠΊΠ΅ΡΠ½Π΅Π»ΠΎΡ ΠΠΈΠ½ΡΠΊΡ Π·Π° Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠΈΡΠ΅ 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 backend, Π΄ΠΎΠ΄Π°Π΄Π΅Π½Π° Π΅ ΠΏΠΎΠ΄Π΄ΡΡΠΊΠ° Π·Π° Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ°ΡΠ° 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