ΠžΠ±Ρ˜Π°Π²ΡƒΠ²Π°ΡšΠ΅ Π½Π° ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΡ‚ ΠΊΠΎΠΌΠΏΠ°Ρ˜Π»Π΅Ρ€ LLVM 9.0

По ΡˆΠ΅ΡΡ‚ мСсСци Ρ€Π°Π·Π²ΠΎΡ˜ ΠΏΡ€Π΅Π·Π΅Π½Ρ‚ΠΈΡ€Π°Π½ΠΈ ΠΎΠ±Ρ˜Π°Π²ΡƒΠ²Π°ΡšΠ΅ Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΡ‚ LLVM 9.0 β€” Алатки ΠΊΠΎΠΌΠΏΠ°Ρ‚ΠΈΠ±ΠΈΠ»Π½ΠΈ со GCC (ΠΊΠΎΠΌΠΏΠ°Ρ˜Π»Π΅Ρ€ΠΈ, ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΈ ΠΈ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΈ Π½Π° ΠΊΠΎΠ΄), ΠΊΠΎΠΌΠΏΠ°Ρ˜Π»ΠΈΡ€Π°ΡšΠ΅ Π½Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈ Π²ΠΎ срСдСн Π±ΠΈΡ‚ΠΊΠΎΠ΄ Π½Π° Π²ΠΈΡ€Ρ‚ΡƒΠ΅Π»Π½ΠΈ инструкции слични Π½Π° RISC (Π²ΠΈΡ€Ρ‚ΡƒΠ΅Π»Π½Π° машина Π½Π° ниско Π½ΠΈΠ²ΠΎ со систСм Π·Π° ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ˜Π° Π½Π° повСќС Π½ΠΈΠ²ΠΎΠ°). Π“Π΅Π½Π΅Ρ€ΠΈΡ€Π°Π½ΠΈΠΎΡ‚ псСвдокод ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΊΠΎΠ½Π²Π΅Ρ€Ρ‚ΠΈΡ€Π° со помош Π½Π° JIT ΠΊΠΎΠΌΠΏΠ°Ρ˜Π»Π΅Ρ€ Π²ΠΎ машински инструкции Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΎ Π²ΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚ΠΎΡ‚ Π½Π° ΠΈΠ·Π²Ρ€ΡˆΡƒΠ²Π°ΡšΠ΅ Π½Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ°Ρ‚Π°.

НовитС карактСристики Π½Π° LLVM 9.0 Π²ΠΊΠ»ΡƒΡ‡ΡƒΠ²Π°Π°Ρ‚ ΠΎΡ‚ΡΡ‚Ρ€Π°Π½ΡƒΠ²Π°ΡšΠ΅ Π½Π° ΠΎΠ·Π½Π°ΠΊΠ°Ρ‚Π° Π·Π° СкспСримСнталСн дизајн ΠΎΠ΄ Ρ†Π΅Π»Π½Π°Ρ‚Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° RISC-V, C++ ΠΏΠΎΠ΄Π΄Ρ€ΡˆΠΊΠ° Π·Π° OpenCL, моТност Π·Π° ΠΏΠΎΠ΄Π΅Π»Π±Π° Π½Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ°Ρ‚Π° Π½Π° Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡ΠΊΠΈ Π²Ρ‡ΠΈΡ‚Π°Π½ΠΈ Π΄Π΅Π»ΠΎΠ²ΠΈ Π²ΠΎ LLD ΠΈ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ˜Π° Π½Π° β€žΠ°ΡΠΌ Π³ΠΎΡ‚ΠΎ", сС користи Π²ΠΎ ΠΊΠΎΠ΄ΠΎΡ‚ Π½Π° Ρ˜Π°Π΄Ρ€ΠΎΡ‚ΠΎ Π½Π° Linux. libc++ Π΄ΠΎΠ΄Π°Π΄Π΅ ΠΏΠΎΠ΄Π΄Ρ€ΡˆΠΊΠ° Π·Π° WASI (WebAssembly System Interface), Π° LLD Π΄ΠΎΠ΄Π°Π΄Π΅ ΠΏΠΎΡ‡Π΅Ρ‚Π½Π° ΠΏΠΎΠ΄Π΄Ρ€ΡˆΠΊΠ° Π·Π° WebAssembly Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π½ΠΎ ΠΏΠΎΠ²Ρ€Π·ΡƒΠ²Π°ΡšΠ΅.

ΠŸΠΎΠ΄ΠΎΠ±Ρ€ΡƒΠ²Π°ΡšΠ° Π²ΠΎ Clang 9.0:

  • Π”ΠΎΠ΄Π°Π΄Π΅Π½ΠΎ Π˜ΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ˜Π° Π½Π° ΠΈΠ·Ρ€Π°Π·ΠΎΡ‚ спСцифичСн Π·Π° 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, ΠΏΡ€ΠΎΡˆΠΈΡ€Π΅Π½Π° Π΄ΠΈΡ˜Π°Π³Π½ΠΎΡΡ‚ΠΈΠΊΠ° Π½Π° Π³Ρ€Π΅ΡˆΠΊΠΈ Π²ΠΎ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠΈΡ‚Π΅ Π·Π° заглавија ΠΈ Π΄ΠΎΠ΄Π°Π΄Π΅Π½Π° моТност Π·Π° ΠΏΡ€ΠΈΠΊΠ°ΠΆΡƒΠ²Π°ΡšΠ΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Π·Π° Ρ…ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΡ˜Π°Ρ‚Π° Π½Π° Ρ‚ΠΈΠΏΠΎΡ‚;

Π“Π»Π°Π²Π½ΠΈΡ‚Π΅ ΠΈΠ½ΠΎΠ²Π°Ρ†ΠΈΠΈ LLVM 9.0:

  • Π”ΠΎΠ΄Π°Π΄Π΅Π½Π° Π΅ СкспСримСнтална карактСристика Π·Π° ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΎΠ½ΠΈΡ€Π°ΡšΠ΅ Π½Π° ΠΏΠΎΠ²Ρ€Π·ΡƒΠ²Π°Ρ‡ΠΎΡ‚ 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

Π”ΠΎΠ΄Π°Π΄Π΅Ρ‚Π΅ ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€