Π‘Π»Π΅Π΄ ΡΠ΅ΡΡ ΠΌΠ΅ΡΠ΅ΡΠ° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ°
ΠΠΎΠ²ΠΈΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ Π² LLVM 10.0 Π²ΠΊΠ»ΡΡΠ²Π°Ρ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π·Π° C++ Concepts, Π²Π΅ΡΠ΅ Π½Π΅ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π° Clang ΠΊΠ°ΡΠΎ ΠΎΡΠ΄Π΅Π»Π΅Π½ ΠΏΡΠΎΡΠ΅Ρ, ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π·Π° CFG (Π·Π°ΡΠΈΡΠ° Π½Π° ΠΊΠΎΠ½ΡΡΠΎΠ»Π½ΠΈΡ ΠΏΠΎΡΠΎΠΊ) ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ Π·Π° Windows ΠΈ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π·Π° Π½ΠΎΠ²ΠΈ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Π½Π° ΠΏΡΠΎΡΠ΅ΡΠΎΡΠ°.
- ΠΠΎΠ±Π°Π²Π΅Π½Π° Π΅ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π·Π° "
ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΡΡΠ° ", ΡΠ°Π·ΡΠΈΡΠ΅Π½ΠΈΠ΅ Π½Π° C++ ΡΠ°Π±Π»ΠΎΠ½, ΠΊΠΎΠ΅ΡΠΎ ΡΠ΅ Π±ΡΠ΄Π΅ Π²ΠΊΠ»ΡΡΠ΅Π½ΠΎ Π² ΡΠ»Π΅Π΄Π²Π°ΡΠΈΡ ΡΡΠ°Π½Π΄Π°ΡΡ Ρ ΠΊΠΎΠ΄ΠΎΠ²ΠΎ ΠΈΠΌΠ΅ C++2a (Π²ΠΊΠ»ΡΡΠ΅Π½ ΠΎΡ ΡΠ»Π°Π³Π° -std=c++2a).
ΠΠΎΠ½ΡΠ΅ΠΏΡΠΈΠΈΡΠ΅ Π²ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π°Ρ Π΄Π° Π΄Π΅ΡΠΈΠ½ΠΈΡΠ°ΡΠ΅ Π½Π°Π±ΠΎΡ ΠΎΡ ΠΈΠ·ΠΈΡΠΊΠ²Π°Π½ΠΈΡ ΠΊΡΠΌ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈΡΠ΅ Π½Π° ΡΠ°Π±Π»ΠΎΠ½Π°, ΠΊΠΎΠΈΡΠΎ ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°Π½Π΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ°Π²Π°Ρ Π½Π°Π±ΠΎΡΠ° ΠΎΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΈ, ΠΊΠΎΠΈΡΠΎ ΠΌΠΎΠ³Π°Ρ Π΄Π° Π±ΡΠ΄Π°Ρ ΠΏΡΠΈΠ΅ΡΠΈ ΠΊΠ°ΡΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈ Π½Π° ΡΠ°Π±Π»ΠΎΠ½Π°. ΠΠΎΠ½ΡΠ΅ΠΏΡΠΈΠΈΡΠ΅ ΠΌΠΎΠ³Π°Ρ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ Π·Π° ΠΈΠ·Π±ΡΠ³Π²Π°Π½Π΅ Π½Π° Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈ Π½Π΅ΡΡΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠ²ΠΎΠΉΡΡΠ²Π°ΡΠ° Π½Π° ΡΠΈΠΏΠΎΠ²Π΅ΡΠ΅ Π΄Π°Π½Π½ΠΈ, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΈ Π² ΡΠ°Π±Π»ΠΎΠ½Π°, ΠΈ ΡΠ²ΠΎΠΉΡΡΠ²Π°ΡΠ° Π½Π° ΡΠΈΠΏΠ° Π΄Π°Π½Π½ΠΈ Π½Π° Π²Ρ ΠΎΠ΄Π½ΠΈΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈ.ΡΠ°Π±Π»ΠΎΠ½
ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΡ EqualityComparable = requires(T a, T b) {
{ a == b } -> std::boolean;
{ a != b } -> std::boolean;
}; - ΠΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅ ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° ΠΎΡΠ΄Π΅Π»Π΅Π½ ΠΏΡΠΎΡΠ΅Ρ (βclang -cc1β), Π² ΠΊΠΎΠΉΡΠΎ ΡΠ΅ ΠΈΠ·Π²ΡΡΡΠ²Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡ, Π΅ ΡΠΏΡΡΠ½ΠΎ. ΠΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡΡΠ° Π²Π΅ΡΠ΅ ΡΠ΅ ΠΈΠ·Π²ΡΡΡΠ²Π° Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΈΡ ΠΏΡΠΎΡΠ΅Ρ ΠΈ ΠΎΠΏΡΠΈΡΡΠ° "-fno-integrated-cc1" ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π·Π° Π²ΡΠ·ΡΡΠ°Π½ΠΎΠ²ΡΠ²Π°Π½Π΅ Π½Π° ΡΡΠ°ΡΠΎΡΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅.
- ΠΠΎΠ²ΠΈ Π΄ΠΈΠ°Π³Π½ΠΎΡΡΠΈΡΠ½ΠΈ ΡΠ΅ΠΆΠΈΠΌΠΈ:
- β-Wc99-designatorβ ΠΈ β-Wreorder-init-listβ ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π°Π²Π°Ρ ΡΡΠ΅ΡΡ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° C99 ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΎΡΠΈ Π² ΡΠ΅ΠΆΠΈΠΌ C++ Π² ΡΠ»ΡΡΠ°ΠΈΡΠ΅, ΠΊΠΎΠ³Π°ΡΠΎ ΡΠ° ΠΏΡΠ°Π²ΠΈΠ»Π½ΠΈ Π² C99, Π½ΠΎ Π½Π΅ ΠΈ Π² C++20.
- "-Wsizeof-array-div" - ΡΠ»Π°Π²Ρ ΡΠΈΡΡΠ°ΡΠΈΠΈ ΠΊΠ°ΡΠΎ "int arr[10]; β¦sizeof(arr) / sizeof(short)β¦β (ΡΡΡΠ±Π²Π° Π΄Π° Π±ΡΠ΄Π΅ βsizeof(arr) / sizeof(int)β).
- β-Wxor-used-as-poβ β ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π°Π²Π° ΡΡΠ΅ΡΡ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΠΈ ΠΊΠ°ΡΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ° β^β (xor) Π² ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ, ΠΊΠΎΠΈΡΠΎ ΠΌΠΎΠ³Π°Ρ Π΄Π° Π±ΡΠ΄Π°Ρ ΠΎΠ±ΡΡΠΊΠ°Π½ΠΈ Ρ ΡΡΠ΅ΠΏΠ΅Π½ΡΠ²Π°Π½Π΅ (2^16).
- "-Wfinal-dtor-non-final-class" - ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π°Π²Π° Π·Π° ΠΊΠ»Π°ΡΠΎΠ²Π΅, ΠΊΠΎΠΈΡΠΎ Π½Π΅ ΡΠ° ΠΌΠ°ΡΠΊΠΈΡΠ°Π½ΠΈ ΡΡΡ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠ° "final", Π½ΠΎ ΠΈΠΌΠ°Ρ Π΄Π΅ΡΡΡΡΠΊΡΠΎΡ Ρ Π°ΡΡΠΈΠ±ΡΡ "final".
- β-Wtautological-bitwise-compareβ Π΅ Π³ΡΡΠΏΠ° ΠΎΡ ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΡ Π·Π° Π΄ΠΈΠ°Π³Π½ΠΎΡΡΠΈΡΠΈΡΠ°Π½Π΅ Π½Π° ΡΠ°Π²ΡΠΎΠ»ΠΎΠ³ΠΈΡΠ½ΠΈ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρ ΠΏΠΎΠ±ΠΈΡΠΎΠ²Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ ΠΈ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ° ΠΈ Π·Π° ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΡΠΈΡΠ°Π½Π΅ Π½Π° Π²ΠΈΠ½Π°Π³ΠΈ Π²Π΅ΡΠ½ΠΈ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ, ΠΏΡΠΈ ΠΊΠΎΠΈΡΠΎ ΠΏΠΎΠ±ΠΈΡΠΎΠ²Π°ΡΠ° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ ΠΠΠ ΡΠ΅ ΠΏΡΠΈΠ»Π°Π³Π° ΠΊΡΠΌ Π½Π΅ΠΎΡΡΠΈΡΠ°ΡΠ΅Π»Π½ΠΎ ΡΠΈΡΠ»ΠΎ.
- β-Wbitwise-ΡΡΠ»ΠΎΠ²Π½ΠΈ-ΡΠΊΠΎΠ±ΠΈβ ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π°Π²Π° Π·Π° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ ΠΏΡΠΈ ΡΠΌΠ΅ΡΠ²Π°Π½Π΅ Π½Π° Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΈ Π (&) ΠΈ ΠΠΠ (|) Ρ ΡΡΠ»ΠΎΠ²Π½ΠΈΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ (?:).
- β-Wmisleading-indentationβ Π΅ Π°Π½Π°Π»ΠΎΠ³ Π½Π° ΠΏΡΠΎΠ²Π΅ΡΠΊΠ°ΡΠ° ΡΡΡ ΡΡΡΠΎΡΠΎ ΠΈΠΌΠ΅ ΠΎΡ GCC, ΠΊΠΎΡΡΠΎ ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π°Π²Π° Π·Π° ΠΈΠ·ΡΠ°Π·ΠΈ Ρ ΠΎΡΡΡΡΠΏ, ΡΡΠΊΠ°Ρ ΡΠ° ΡΠ°ΡΡ ΠΎΡ Π±Π»ΠΎΠΊ if/else/for/while, Π½ΠΎ Π²ΡΡΡΠ½ΠΎΡΡ ΡΠ΅ Π½Π΅ ΡΠ° Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈ Π² ΡΠΎΠ·ΠΈ Π±Π»ΠΎΠΊ .
- ΠΠΎΠ³Π°ΡΠΎ ΡΠ΅ ΠΏΠΎΡΠΎΡΠΈ β-Wextraβ, ΠΏΡΠΎΠ²Π΅ΡΠΊΠ°ΡΠ° β-Wdeprecated-copyβ Π΅ Π°ΠΊΡΠΈΠ²ΠΈΡΠ°Π½Π°, ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π°Π²Π°ΠΉΠΊΠΈ Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠΈ
"ΠΏΡΠ΅ΠΌΠ΅ΡΡΠ²Π°Π½Π΅" ΠΈ "ΠΊΠΎΠΏΠΈΡΠ°Π½Π΅" Π² ΠΊΠ»Π°ΡΠΎΠ²Π΅ Ρ ΠΈΠ·ΡΠΈΡΠ½Π° Π΄Π΅ΡΠΈΠ½ΠΈΡΠΈΡ Π½Π° Π΄Π΅ΡΡΡΡΠΊΡΠΎΡ. - ΠΡΠΎΠ²Π΅ΡΠΊΠΈΡΠ΅ β-Wtautological-overlap-compareβ, β-Wsizeof-pointer-divβ, β-Wtautological-compareβ, β-Wrange-loop-analysisβ ΡΠ° ΡΠ°Π·ΡΠΈΡΠ΅Π½ΠΈ.
- ΠΡΠΎΠ²Π΅ΡΠΊΠΈΡΠ΅ "-Wbitwise-op-parentheses" ΠΈ "-Wlogical-op-parentheses" ΡΠ° Π΄Π΅Π°ΠΊΡΠΈΠ²ΠΈΡΠ°Π½ΠΈ ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅.
- Π ΠΊΠΎΠ΄Π° Π½Π° C ΠΈ C++ Π°ΡΠΈΡΠΌΠ΅ΡΠΈΡΠ½ΠΈΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Ρ ΡΠΊΠ°Π·Π°ΡΠ΅Π» ΡΠ° ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈ ΡΠ°ΠΌΠΎ Π² ΠΌΠ°ΡΠΈΠ²ΠΈ. ΠΠ΅Π·ΠΈΠ½ΡΠ΅ΠΊΡΠΈΡΠ°ΡΠΎΡΠΎ ΡΡΠ΅Π΄ΡΡΠ²ΠΎ Π·Π° Π½Π΅Π΄Π΅ΡΠΈΠ½ΠΈΡΠ°Π½ΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² ΡΠ΅ΠΆΠΈΠΌ "-fsanitize=pointer-overflow" Π²Π΅ΡΠ΅ ΡΠ»Π°Π²Ρ ΡΠ»ΡΡΠ°ΠΈ ΠΊΠ°ΡΠΎ Π΄ΠΎΠ±Π°Π²ΡΠ½Π΅ Π½Π° Π½Π΅Π½ΡΠ»Π΅Π²ΠΎ ΠΎΡΠΌΠ΅ΡΡΠ²Π°Π½Π΅ ΠΊΡΠΌ Π½ΡΠ»Π΅Π² ΡΠΊΠ°Π·Π°ΡΠ΅Π» ΠΈΠ»ΠΈ ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ Π½Π° Π½ΡΠ»Π΅Π² ΡΠΊΠ°Π·Π°ΡΠ΅Π» ΠΏΡΠΈ ΠΈΠ·Π²Π°ΠΆΠ΄Π°Π½Π΅ Π½Π° ΡΡΠ»ΠΎ ΡΠΈΡΠ»ΠΎ ΠΎΡ Π½Π΅Π½ΡΠ»Π΅Π² ΡΠΊΠ°Π·Π°ΡΠ΅Π».
- Π Π΅ΠΆΠΈΠΌΡΡ "-fsanitize=implicit-conversion" (Implicit Conversion Sanitizer) Π΅ Π°Π΄Π°ΠΏΡΠΈΡΠ°Π½ Π·Π° ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΡΠΈΡΠ°Π½Π΅ Π½Π° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π·Π° ΡΠ²Π΅Π»ΠΈΡΠ°Π²Π°Π½Π΅ ΠΈ Π½Π°ΠΌΠ°Π»ΡΠ²Π°Π½Π΅ Π·Π° ΡΠΈΠΏΠΎΠ²Π΅ Ρ ΡΠ°Π·ΠΌΠ΅Ρ Π½Π° Π±ΠΈΡΠΎΠ²Π΅ΡΠ΅, ΠΏΠΎ-ΠΌΠ°Π»ΡΠΊ ΠΎΡ ΡΠΎΠ·ΠΈ Π½Π° ΡΠΈΠΏΠ° "int".
- ΠΡΠΈ ΠΈΠ·Π±ΠΎΡ Π½Π° x86 ΡΠ΅Π»Π΅Π²ΠΈ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠΈ "-march=skylake-avx512", "-march=icelake-client", "-march=icelake-server", "-march=cascadelake" ΠΈ "-march=cooperlake" ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅ Π²ΡΠ² Π²Π΅ΠΊΡΠΎΡΠΈΠ·ΠΈΡΠ°Π½ΠΈ ΠΊΠΎΠ΄ΡΡ Π΅ ΡΠΏΡΡΠ» Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° 512-Π±ΠΈΡΠΎΠ²ΠΈ zmm ΡΠ΅Π³ΠΈΡΡΡΠΈ, Ρ ΠΈΠ·ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π½Π° Π΄ΠΈΡΠ΅ΠΊΡΠ½ΠΎΡΠΎ ΠΈΠΌ ΡΠΊΠ°Π·Π°Π½ΠΈΠ΅ Π² ΠΈΠ·Ρ ΠΎΠ΄Π½ΠΈΡ ΠΊΠΎΠ΄. ΠΡΠΈΡΠΈΠ½Π°ΡΠ° Π΅, ΡΠ΅ ΡΠ΅ΡΡΠΎΡΠ°ΡΠ° Π½Π° ΠΏΡΠΎΡΠ΅ΡΠΎΡΠ° Π½Π°ΠΌΠ°Π»ΡΠ²Π° ΠΏΡΠΈ ΠΈΠ·Π²ΡΡΡΠ²Π°Π½Π΅ Π½Π° 512-Π±ΠΈΡΠΎΠ²ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ, ΠΊΠΎΠ΅ΡΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΏΠΎΠ²Π»ΠΈΡΠ΅ Π½Π΅Π³Π°ΡΠΈΠ²Π½ΠΎ Π½Π° ΡΡΠ»ΠΎΡΡΠ½Π°ΡΠ° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡ. ΠΠ° Π΄Π° ΠΏΡΠΎΠΌΠ΅Π½ΠΈΡΠ΅ Π½ΠΎΠ²ΠΎΡΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅, Π΅ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π΅Π½Π° ΠΎΠΏΡΠΈΡΡΠ° "-mprefer-vector-width=512".
- ΠΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° ΡΠ»Π°Π³Π° "-flax-vector-conversions" Π΅ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ Π½Π° GCC: ΠΈΠΌΠΏΠ»ΠΈΡΠΈΡΠ½ΠΈΡΠ΅ Π²Π΅ΠΊΡΠΎΡΠ½ΠΈ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ²Π°Π½ΠΈΡ Π½Π° Π±ΠΈΡΠΎΠ²Π΅ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠ΅Π»ΠΈ ΡΠΈΡΠ»Π° ΠΈ Π²Π΅ΠΊΡΠΎΡΠΈ Ρ ΠΏΠ»Π°Π²Π°ΡΠ° Π·Π°ΠΏΠ΅ΡΠ°Ρ ΡΠ° Π·Π°Π±ΡΠ°Π½Π΅Π½ΠΈ. ΠΠ° Π΄Π° ΡΠ΅ ΠΏΡΠ΅ΠΌΠ°Ρ
Π½Π΅ ΡΠΎΠ²Π° ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅, ΡΠ΅ ΠΏΡΠ΅Π΄Π»Π°Π³Π° Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΡΠ»Π°Π³ΡΡ
"-flax-vector-conversions=all", ΠΊΠΎΠ΅ΡΠΎ Π΅ ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅. - ΠΠΎΠ΄ΠΎΠ±ΡΠ΅Π½Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π·Π° MIPS ΠΏΡΠΎΡΠ΅ΡΠΎΡΠΈ ΠΎΡ ΡΠ΅ΠΌΠ΅ΠΉΡΡΠ²ΠΎΡΠΎ Octeon. ΠΠΎΠ±Π°Π²Π΅Π½ Π΅ "octeon+" ΠΊΡΠΌ ΡΠΏΠΈΡΡΠΊΠ° Ρ Π²Π°Π»ΠΈΠ΄Π½ΠΈ ΡΠΈΠΏΠΎΠ²Π΅ ΠΏΡΠΎΡΠ΅ΡΠΎΡΠΈ.
- ΠΡΠΈ Π°ΡΠ΅ΠΌΠ±Π»ΠΈΡΠ°Π½Π΅ Π² ΠΌΠ΅ΠΆΠ΄ΠΈΠ½Π΅Π½ ΠΊΠΎΠ΄ Π½Π° WebAssembly Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ½ΠΎ ΡΠ΅ ΠΈΠ·Π²ΠΈΠΊΠ²Π° ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΎΡΡΡ wasm-opt, Π°ΠΊΠΎ Π΅ Π½Π°Π»ΠΈΡΠ΅Π½ Π² ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ°.
- ΠΠ° ΡΠΈΡΡΠ΅ΠΌΠΈ, Π±Π°Π·ΠΈΡΠ°Π½ΠΈ Π½Π° Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ°ΡΠ° RISC-V, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° ΡΠ΅Π³ΠΈΡΡΡΠΈ, ΡΡΡ ΡΠ°Π½ΡΠ²Π°ΡΠΈ ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈ Ρ ΠΏΠ»Π°Π²Π°ΡΠ° Π·Π°ΠΏΠ΅ΡΠ°Ρ, Π΅ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΎ Π² ΡΡΠ»ΠΎΠ²Π½ΠΈ Π±Π»ΠΎΠΊΠΎΠ²Π΅ Π½Π° Π²Π³ΡΠ°Π΄Π΅Π½ΠΈ Π²ΠΌΡΠΊΠ²Π°Π½ΠΈΡ Π½Π° Π°ΡΠ΅ΠΌΠ±Π»Π΅Ρ.
- ΠΠΎΠ±Π°Π²Π΅Π½ΠΈ ΡΠ° Π½ΠΎΠ²ΠΈ ΡΠ»Π°Π³ΠΎΠ²Π΅ Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΎΡΠ°: "-fgnuc-version" Π·Π° Π·Π°Π΄Π°Π²Π°Π½Π΅ Π½Π° ΡΡΠΎΠΉΠ½ΠΎΡΡΡΠ° Π½Π° Π²Π΅ΡΡΠΈΡΡΠ° Π·Π° "__GNUC__" ΠΈ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΈ ΠΌΠ°ΠΊΡΠΎΡΠΈ; "-fmacro-prefix-map=OLD=NEW" Π·Π° Π·Π°ΠΌΡΠ½Π° Π½Π° ΠΏΡΠ΅ΡΠΈΠΊΡΠ° Π½Π° Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡΡΠ° OLD Ρ NEW Π² ΠΌΠ°ΠΊΡΠΎΡΠΈ ΠΊΠ°ΡΠΎ "__FILE__"; "-fpatchable-function-entry=N[,M]" Π·Π° Π³Π΅Π½Π΅ΡΠΈΡΠ°Π½Π΅ Π½Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ Π±ΡΠΎΠΉ NOP ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ ΠΏΡΠ΅Π΄ΠΈ ΠΈ ΡΠ»Π΅Π΄ Π²Ρ
ΠΎΠ΄Π½Π°ΡΠ° ΡΠΎΡΠΊΠ° Π½Π° ΡΡΠ½ΠΊΡΠΈΡΡΠ°. ΠΠ° RISC-V
Π΄ΠΎΠ±Π°Π²Π΅Π½Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π·Π° ΡΠ»Π°Π³ΠΎΠ²Π΅ΡΠ΅ "-ffixed-xX", "-mcmodel=medany" ΠΈ "-mcmodel=medlow". - ΠΠΎΠ±Π°Π²Π΅Π½Π° Π΅ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π·Π° Π°ΡΡΠΈΠ±ΡΡΠ° '__attribute__((target(βbranch-protection=..."))), ΡΠΈΠΉΡΠΎ Π΅ΡΠ΅ΠΊΡ Π΅ ΠΏΠΎΠ΄ΠΎΠ±Π΅Π½ Π½Π° ΠΎΠΏΡΠΈΡΡΠ°
-mbranch-Π·Π°ΡΠΈΡΠ° . - ΠΠ° ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ°ΡΠ° Π½Π° Windows, ΠΊΠΎΠ³Π°ΡΠΎ ΡΠ΅ ΡΠΊΠ°Π·Π²Π° ΡΠ»Π°Π³ΡΡ β-cfguardβ, ΡΠ΅ ΠΏΡΠΈΠ»Π°Π³Π° Π·Π°ΠΌΠ΅ΡΡΠ²Π°Π½Π΅ Π½Π° ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈΡΠ΅ Π·Π° ΡΠ΅Π»ΠΎΡΡΡΠ° Π½Π° ΠΏΠΎΡΠΎΠΊΠ° Π½Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ (Control Flow Guard) Π·Π° ΠΈΠ½Π΄ΠΈΡΠ΅ΠΊΡΠ½ΠΈ ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½ΠΈΡ Π½Π° ΡΡΠ½ΠΊΡΠΈΠΈ. ΠΠ° Π΄Π° Π΄Π΅Π°ΠΊΡΠΈΠ²ΠΈΡΠ°ΡΠ΅ ΠΏΠΎΠ΄ΠΌΡΠ½Π°ΡΠ° Π½Π° ΠΏΡΠΎΠ²Π΅ΡΠΊΠ°, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ ΡΠ»Π°Π³Π° β-cfguard-nochecksβ ΠΈΠ»ΠΈ ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΎΡΠ° β__declspec(guard(nocf))β.
- ΠΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° Π°ΡΡΠΈΠ±ΡΡΠ° gnu_inline Π΅ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ Π½Π° GCC Π² ΡΠ»ΡΡΠ°ΠΈΡΠ΅, ΠΊΠΎΠ³Π°ΡΠΎ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π±Π΅Π· ΠΊΠ»ΡΡΠΎΠ²Π°ΡΠ° Π΄ΡΠΌΠ° "extern".
- ΠΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈΡΠ΅, ΡΠ²ΡΡΠ·Π°Π½ΠΈ Ρ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ°ΡΠ° Π½Π° OpenCL ΠΈ CUDA, ΡΠ° ΡΠ°Π·ΡΠΈΡΠ΅Π½ΠΈ. ΠΠΎΠ±Π°Π²Π΅Π½Π° Π΅ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π·Π° Π½ΠΎΠ²ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ Π½Π° OpenMP 5.0.
- ΠΠΎΠ±Π°Π²Π΅Π½Π° Π΅ ΠΎΠΏΡΠΈΡ Standard ΠΊΡΠΌ ΠΏΠΎΠΌΠΎΡΠ½Π°ΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ° clang-format, ΠΊΠΎΡΡΠΎ Π²ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π΄Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΠ΅ Π²Π΅ΡΡΠΈΡΡΠ° Π½Π° ΡΡΠ°Π½Π΄Π°ΡΡΠ° C++, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ ΠΏΡΠΈ Π°Π½Π°Π»ΠΈΠ·ΠΈΡΠ°Π½Π΅ ΠΈ ΡΠΎΡΠΌΠ°ΡΠΈΡΠ°Π½Π΅ Π½Π° ΠΊΠΎΠ΄ (ΠΠ°ΠΉ-Π½ΠΎΠ²ΠΈ, Auto, c++03, c++11, c++14, c++17, c++20 ).
- ΠΠΎΠ±Π°Π²Π΅Π½ΠΈ ΡΠ° Π½ΠΎΠ²ΠΈ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΠΊΡΠΌ ΡΡΠ°ΡΠΈΡΠ½ΠΈΡ Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡ: alpha.cplusplus.PlacementNew Π·Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π΅ Π΄Π°Π»ΠΈ ΠΈΠΌΠ° Π΄ΠΎΡΡΠ°ΡΡΡΠ½ΠΎ ΠΌΡΡΡΠΎ Π·Π° ΡΡΡ ΡΠ°Π½Π΅Π½ΠΈΠ΅, fuchsia.HandleChecker Π·Π° ΠΎΡΠΊΡΠΈΠ²Π°Π½Π΅ Π½Π° ΡΠ΅ΡΠΎΠ²Π΅, ΡΠ²ΡΡΠ·Π°Π½ΠΈ Ρ ΠΌΠ°Π½ΠΈΠΏΡΠ»Π°ΡΠΎΡΠΈ Π½Π° Fuchsia, security.insecureAPI.decodeValueOfObjCType Π·Π° ΠΎΡΠΊΡΠΈΠ²Π°Π½Π΅ Π½Π° ΠΏΠΎΡΠ΅Π½ΡΠΈΠ°Π»Π½ΠΎ ΠΏΡΠ΅ΠΏΡΠ»Π²Π°Π½Π΅ Π½Π° Π±ΡΡΠ΅ΡΠ° ΠΏΡΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° [NSCoder decodeValueOfObjCType :at:] .
- ΠΠ΅Π·ΠΈΠ½ΡΠ΅ΠΊΡΠ°Π½ΡΡΡ Π·Π° Π½Π΅Π΄Π΅ΡΠΈΠ½ΠΈΡΠ°Π½ΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ (UBSan) ΡΠ°Π·ΡΠΈΡΠΈ ΡΠ²ΠΎΠΈΡΠ΅ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ Π·Π° ΠΏΡΠ΅ΠΏΡΠ»Π²Π°Π½Π΅ Π½Π° ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ, Π·Π° Π΄Π° ΡΠ»Π°Π²Ρ ΠΏΡΠΈΠ»Π°Π³Π°Π½Π΅ΡΠΎ Π½Π° Π½Π΅Π½ΡΠ»Π΅Π²ΠΈ ΠΎΡΠΌΠ΅ΡΡΠ²Π°Π½ΠΈΡ ΠΊΡΠΌ NULL ΡΠΊΠ°Π·Π°ΡΠ΅Π»ΠΈ ΠΈΠ»ΠΈ ΠΏΡΠΎΠΈΠ·ΡΠΈΡΠ°ΡΠΎΡΠΎ Π΄ΠΎΠ±Π°Π²ΡΠ½Π΅ Π½Π° NULL ΠΎΡΠΌΠ΅ΡΡΠ²Π°Π½Π΅ Π½Π° ΡΠΊΠ°Π·Π°ΡΠ΅Π».
- Π Π»ΠΈΠ½ΡΠ΅Ρ Π΄ΡΡΠ½-ΠΏΠΎΠ΄ΡΠ΅Π΄Π΅Π½
Π΄ΠΎΠ±Π°Π²ΠΈ Π³ΠΎΠ»ΡΠΌΠ° ΡΠ°ΡΡ ΠΎΡ Π½ΠΎΠ²ΠΈ ΡΠ΅ΠΊΠΎΠ²Π΅.
ΠΡΠ½ΠΎΠ²Π½Π°ΡΠ°
- ΠΡΠΌ ΡΠ°ΠΌΠΊΠ°ΡΠ°
ΠΡΠΈΠΏΠΈΡΠ²Π°Ρ ΠΠΎΠ±Π°Π²Π΅Π½ΠΈ ΡΠ° Π½ΠΎΠ²ΠΈ ΠΌΠ΅ΠΆΠ΄ΡΠΏΡΠΎΡΠ΅Π΄ΡΡΠ½ΠΈ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ ΠΈ Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡΠΈ. ΠΡΠ΅Π΄ΡΠΊΠ°Π·Π²Π° ΡΠ΅ ΡΡΡΡΠΎΡΠ½ΠΈΠ΅ΡΠΎ Π½Π° 19 ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ Π°ΡΡΠΈΠ±ΡΡΠ°, Π²ΠΊΠ»ΡΡΠΈΡΠ΅Π»Π½ΠΎ 12 Π°ΡΡΠΈΠ±ΡΡΠ°, 12 LLVM IR ΠΈ 7 Π°Π±ΡΡΡΠ°ΠΊΡΠ½ΠΈ Π°ΡΡΠΈΠ±ΡΡΠ°, ΠΊΠ°ΡΠΎ ΠΆΠΈΠ·Π½Π΅Π½ΠΎΡΡ. - ΠΠΎΠ±Π°Π²Π΅Π½ΠΈ ΡΠ° Π½ΠΎΠ²ΠΈ ΠΌΠ°ΡΡΠΈΡΠ½ΠΈ ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ, Π²Π³ΡΠ°Π΄Π΅Π½ΠΈ Π² ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΎΡΠ° (
ΠΡΡΡΠ΅ΡΠ½ΠΈ Ρ Π°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠΈ ), ΠΊΠΎΠΈΡΠΎ ΡΠ΅ Π·Π°ΠΌΠ΅Π½ΡΡ Ρ Π΅ΡΠ΅ΠΊΡΠΈΠ²Π½ΠΈ Π²Π΅ΠΊΡΠΎΡΠ½ΠΈ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡ. - ΠΡΡ
Π° Π½Π°ΠΏΡΠ°Π²Π΅Π½ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠ±ΡΠΎΠΉΠ½ΠΈ ΠΏΠΎΠ΄ΠΎΠ±ΡΠ΅Π½ΠΈΡ Π² Π±Π΅ΠΊΠ΅Π½Π΄Π° Π·Π° X86, AArch64, ARM, SystemZ, MIPS, AMDGPU ΠΈ PowerPC Π°ΡΡ
ΠΈΡΠ΅ΠΊΡΡΡΠΈ. ΠΠΎΠ±Π°Π²Π΅Π½Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π½Π° ΠΏΡΠΎΡΠ΅ΡΠΎΡΠ°
Cortex-A65, Cortex-A65AE, Neoverse E1 ΠΈ Neoverse N1. ΠΠ° ARMv8.1-M ΠΏΡΠΎΡΠ΅ΡΡΡ Π½Π° Π³Π΅Π½Π΅ΡΠΈΡΠ°Π½Π΅ Π½Π° ΠΊΠΎΠ΄ Π΅ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠ°Π½ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ ΡΠ΅ ΠΏΠΎΡΠ²ΠΈ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π·Π° ΡΠΈΠΊΠ»ΠΈ Ρ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»Π½ΠΈ ΡΠ°Π·Ρ ΠΎΠ΄ΠΈ) ΠΈ Π΅ Π΄ΠΎΠ±Π°Π²Π΅Π½Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π·Π° Π°Π²ΡΠΎΠ²Π΅ΠΊΡΠΎΡΠΈΠ·Π°ΡΠΈΡ Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° ΡΠ°Π·ΡΠΈΡΠ΅Π½ΠΈΠ΅ΡΠΎ MVE. ΠΠΎΠ΄ΠΎΠ±ΡΠ΅Π½Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π½Π° MIPS Octeon Π½Π° ΠΏΡΠΎΡΠ΅ΡΠΎΡΠ°. ΠΠ° PowerPC Π΅ Π°ΠΊΡΠΈΠ²ΠΈΡΠ°Π½Π° Π²Π΅ΠΊΡΠΎΡΠΈΠ·Π°ΡΠΈΡΡΠ° Π½Π° ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΏΠΎΠ΄ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΡΠ° MASSV (Mathematical Acceleration SubSystem), Π³Π΅Π½Π΅ΡΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° ΠΊΠΎΠ΄ Π΅ ΠΏΠΎΠ΄ΠΎΠ±ΡΠ΅Π½ΠΎ ΠΈ Π΄ΠΎΡΡΡΠΏΡΡ Π΄ΠΎ ΠΏΠ°ΠΌΠ΅ΡΡΠ° ΠΎΡ ΡΠΈΠΊΠ»ΠΈ Π΅ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠ°Π½. ΠΠ° x86 ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ°ΡΠ° Π½Π° Π²Π΅ΠΊΡΠΎΡΠ½ΠΈ ΡΠΈΠΏΠΎΠ²Π΅ v2i32, v4i16, v2i16, v8i8, v4i8 ΠΈ v2i8 Π΅ ΠΏΡΠΎΠΌΠ΅Π½Π΅Π½Π°. - ΠΠΎΠ΄ΠΎΠ±ΡΠ΅Π½ Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡ Π½Π° ΠΊΠΎΠ΄ Π·Π° WebAssembly. ΠΠΎΠ±Π°Π²Π΅Π½Π° Π΅ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π·Π° TLS (Thread-Local Storage) ΠΈ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ atomic.fence. ΠΠΎΠ΄Π΄ΡΡΠΆΠΊΠ°ΡΠ° Π½Π° SIMD Π΅ Π·Π½Π°ΡΠΈΡΠ΅Π»Π½ΠΎ ΡΠ°Π·ΡΠΈΡΠ΅Π½Π°. ΠΠ±Π΅ΠΊΡΠ½ΠΈΡΠ΅ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ Π½Π° WebAssembly Π²Π΅ΡΠ΅ ΠΈΠΌΠ°Ρ ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡΡΠ° Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ ΡΠΈΠ³Π½Π°ΡΡΡΠΈ Π½Π° ΡΡΠ½ΠΊΡΠΈΠΈ Ρ ΠΌΠ½ΠΎΠ³ΠΎ ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈ.
- ΠΠ½Π°Π»ΠΈΠ·Π°ΡΠΎΡΡΡ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΏΡΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° ΡΠΈΠΊΠ»ΠΈ
MemorySSA , ΠΊΠΎΠ΅ΡΠΎ Π²ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π΄Π° Π΄Π΅ΡΠΈΠ½ΠΈΡΠ°ΡΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Ρ ΠΏΠ°ΠΌΠ΅Ρ. MemorySSA ΠΌΠΎΠΆΠ΅ Π΄Π° Π½Π°ΠΌΠ°Π»ΠΈ Π²ΡΠ΅ΠΌΠ΅ΡΠΎ Π·Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°Π½Π΅ ΠΈ ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π²ΠΌΠ΅ΡΡΠΎ AliasSetTracker Π±Π΅Π· Π·Π°Π³ΡΠ±Π° Π½Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡ. - ΠΠ΅Π±ΡΠ³Π΅ΡΡΡ LLDB ΠΈΠΌΠ° Π·Π½Π°ΡΠΈΡΠ΅Π»Π½ΠΎ ΠΏΠΎΠ΄ΠΎΠ±ΡΠ΅Π½Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π·Π° ΡΠΎΡΠΌΠ°ΡΠ° DWARF v5. ΠΠΎΠ΄ΠΎΠ±ΡΠ΅Π½Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π·Π° ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ Ρ MinGW
ΠΈ Π΄ΠΎΠ±Π°Π²Π΅Π½Π° ΠΏΡΡΠ²ΠΎΠ½Π°ΡΠ°Π»Π½Π° Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ Π·Π° ΠΎΡΡΡΡΠ°Π½ΡΠ²Π°Π½Π΅ Π½Π° Π³ΡΠ΅ΡΠΊΠΈ Π² ΠΈΠ·ΠΏΡΠ»Π½ΠΈΠΌΠΈ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ Π½Π° Windows Π·Π° ARM ΠΈ ARM64 Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠΈ. ΠΠΎΠ±Π°Π²Π΅Π½ΠΈ ΠΎΠΏΠΈΡΠ°Π½ΠΈΡ Π½Π° ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π½ΠΈΡΠ΅ ΠΎΠΏΡΠΈΠΈ ΠΏΡΠΈ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ½ΠΎ Π΄ΠΎΠ²ΡΡΡΠ²Π°Π½Π΅ Π½Π° Π²ΡΠ²Π΅ΠΆΠ΄Π°Π½Π΅ ΡΡΠ΅Π· Π½Π°ΡΠΈΡΠΊΠ°Π½Π΅ Π½Π° tab. -
Π Π°Π·ΡΠΈΡΠ΅Π½ΠΎ ΠΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Π½Π° LLD Π»ΠΈΠ½ΠΊΠ΅Ρ. ΠΠΎΠ΄ΠΎΠ±ΡΠ΅Π½Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π·Π° ELF ΡΠΎΡΠΌΠ°Ρ, Π²ΠΊΠ»ΡΡΠΈΡΠ΅Π»Π½ΠΎ ΠΎΡΠΈΠ³ΡΡΡΠ²Π°Π½Π΅ Π½Π° ΠΏΡΠ»Π½Π° ΡΡΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡ Π½Π° glob ΡΠ°Π±Π»ΠΎΠ½ΠΈ Ρ GNU Π»ΠΈΠ½ΠΊΠ΅Ρ, Π΄ΠΎΠ±Π°Π²ΡΠ½Π΅ Π½Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π·Π° ΠΊΠΎΠΌΠΏΡΠ΅ΡΠΈΡΠ°Π½ΠΈ ΡΠ΅ΠΊΡΠΈΠΈ Π·Π° ΠΎΡΡΡΡΠ°Π½ΡΠ²Π°Π½Π΅ Π½Π° Π³ΡΠ΅ΡΠΊΠΈ ".zdebug", Π΄ΠΎΠ±Π°Π²ΡΠ½Π΅ Π½Π° ΡΠ²ΠΎΠΉΡΡΠ²ΠΎΡΠΎ PT_GNU_PROPERTY Π·Π° Π΄Π΅ΡΠΈΠ½ΠΈΡΠ°Π½Π΅ Π½Π° ΡΠ΅ΠΊΡΠΈΡΡΠ° .note.gnu.property (ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π² Π±ΡΠ΄Π΅ΡΠ΅ Linux ΡΠ΄ΡΠ°),
ΠΠ½Π΅Π΄ΡΠ΅Π½ΠΈ ΡΠ° ΡΠ΅ΠΆΠΈΠΌΠΈΡΠ΅ β-z noseparate-codeβ, β-z ΠΎΡΠ΄Π΅Π»Π΅Π½-ΠΊΠΎΠ΄β ΠΈ β-z ΠΎΡΠ΄Π΅Π»Π½ΠΈ-Π·Π°ΡΠ΅ΠΆΠ΄Π°Π΅ΠΌΠΈ ΡΠ΅Π³ΠΌΠ΅Π½ΡΠΈβ. ΠΠΎΠ΄ΠΎΠ±ΡΠ΅Π½Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π·Π° MinGW ΠΈ WebAssembly.
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: opennet.ru