13.0๊ฐ์๊ฐ์ ๊ฐ๋ฐ ๋์ LLVM XNUMX ํ๋ก์ ํธ๊ฐ ์ถ์๋์์ต๋๋ค. ์ด๋ ํ๋ก๊ทธ๋จ์ RISC ์ ์ฌ ๊ฐ์ ๋ช ๋ น์ด(๋ค๋จ๊ณ ์ต์ ํ ์์คํ ์ ๊ฐ์ถ ์ ์์ค ๊ฐ์ ๋จธ์ )์ ์ค๊ฐ ๋นํธ์ฝ๋๋ก ์ปดํ์ผํ๋ GCC ํธํ ํดํท(์ปดํ์ผ๋ฌ, ์ต์ ํ ํ๋ก๊ทธ๋จ, ์ฝ๋ ์์ฑ๊ธฐ)์ ๋๋ค. ์์ฑ๋ ์์ฌ์ฝ๋๋ ํ๋ก๊ทธ๋จ ์คํ ์์ ์ JIT ์ปดํ์ผ๋ฌ๋ฅผ ์ฌ์ฉํ์ฌ ๊ธฐ๊ณ์ด ๋ช ๋ น์ด๋ก ์ง์ ๋ณํ๋ ์ ์์ต๋๋ค.
Clang 13.0์ ๊ฐ์ ์ฌํญ:
- ๋ณด์ฅ๋ ๊ผฌ๋ฆฌ ํธ์ถ(ํจ์ ๋งจ ๋์์ ์๋ธ๋ฃจํด์ ํธ์ถํ๊ณ , ์๋ธ๋ฃจํด์ด ์๊ธฐ ์์ ์ ํธ์ถํ๋ ๊ฒฝ์ฐ ๊ผฌ๋ฆฌ ์ฌ๊ท๋ฅผ ์์ฑํ๋ ๊ธฐ๋ฅ)์ด ์ง์๋ฉ๋๋ค. ๋ณด์ฅ๋ ๊ผฌ๋ฆฌ ํธ์ถ์ C++์ "[[clang::musttail]]" ์์ฑ๊ณผ C์ "__attribute__((musttail))" ์์ฑ์ "return" ํํ์์ ์ฌ์ฉํ์ฌ ์ง์๋ฉ๋๋ค. ์ด ๊ธฐ๋ฅ์ ์ฝ๋๋ฅผ ํ๋ซ ๋ฐ๋ณต์ผ๋ก ์ ๊ฐํ์ฌ ์คํ ๊ณต๊ฐ์ ์ ์ฝํ๋ ์ต์ ํ๋ฅผ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค.
- ์ด์ C++11 ์คํ์ผ์ ์์ฑ ์ ์๊ฐ "[[]]" ํ์์ ์ฌ์ฉํ์ฌ clang "using" ์ ์ธ ๋ฐ ํ์ฅ์์ ์ง์๋ฉ๋๋ค.
- ์ฌ์ฉ์ ์ฝ๋์์ ์์ฝ๋ ์๋ณ์๋ฅผ ์ง์ ํ ๋ ๊ฒฝ๊ณ ๋ฅผ ์ถ๋ ฅํ๊ธฐ ์ํด "-Wreserved-identifier" ํ๋๊ทธ๋ฅผ ์ถ๊ฐํ์ต๋๋ค.
- ๋งค๊ฐ๋ณ์๋ ๋ณ์๊ฐ ์ค์ ๋์์ง๋ง ์ฌ์ฉ๋์ง ์๋ ๊ฒฝ์ฐ ๊ฒฝ๊ณ ๋ฅผ ์ถ๋ ฅํ๊ธฐ ์ํด "-Wunused-but-set-parameter" ๋ฐ "-Wunused-but-set-variable" ํ๋๊ทธ๋ฅผ ์ถ๊ฐํ์ต๋๋ค.
- ๋บ์ ์ฐ์ฐ์์ ๋ ํฌ์ธํฐ๋ฅผ ์ฌ์ฉํ์ฌ ์ฝ๋๊ฐ ์ ์๋์ง ์์ ๋์์ ์ด๋ํ ์ ์๋ ๊ฒฝ์ฐ ๊ฒฝ๊ณ ๋ฅผ ์ถ๋ ฅํ๊ธฐ ์ํด "-Wnull-pointer-subtraction" ํ๋๊ทธ๋ฅผ ์ถ๊ฐํ์ต๋๋ค.
- ์ฒ๋ฆฌ ์ค์ธ ํ์ผ์ ์ ์๋ ๊ฐ ํจ์์ ์คํ ํ๋ ์ ํฌ๊ธฐ์ ๋ํ ์ ๋ณด๋ฅผ ๋ด๊ณ ์๋ ์ถ๊ฐ ".su" ํ์ผ์ ๊ฐ ์ฝ๋ ํ์ผ์ ์์ฑํ๊ธฐ ์ํด "-fstack-usage" ํ๋๊ทธ๋ฅผ ์ถ๊ฐํ์ต๋๋ค.
- ์ ์ ๋ถ์๊ธฐ์ ์๋ก์ด ์ถ๋ ฅ ์ ํ์ธ "sarif-html"์ด ์ถ๊ฐ๋์์ต๋๋ค. ์ด ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ฉด HTML ๋ฐ Sarif ํ์์ผ๋ก ๋ณด๊ณ ์๋ฅผ ์์ฑํ ์ ์์ต๋๋ค. allocClassWithName์ด๋ผ๋ ์๋ก์ด ๊ฒ์ฌ๊ฐ ์ถ๊ฐ๋์์ต๋๋ค. "-analyzer-display-progress" ์ต์ ์ ์ง์ ํ๋ฉด ๊ฐ ํจ์์ ๋ถ์ ์๊ฐ์ด ์ถ๋ ฅ๋ฉ๋๋ค. ์ค๋งํธ ํฌ์ธํฐ ๋ถ์๊ธฐ(alpha.cplusplus.SmartPtr)์ ์ค๋น๊ฐ ๊ฑฐ์ ์๋ฃ๋์์ต๋๋ค.
- OpenCL ์ง์ ๊ด๋ จ ๊ธฐ๋ฅ์ด ํ์ฅ๋์์ต๋๋ค. ์๋ก์ด ํ์ฅ์ cl_khr_integer_dot_product, cl_khr_extended_bit_ops, __cl_clang_bitfields ๋ฐ __cl_clang_non_portable_kernel_param_types์ ๋ํ ์ง์์ด ์ถ๊ฐ๋์์ต๋๋ค. OpenCL 3.0 ์ฌ์ ๊ตฌํ์ด ๊ณ์๋์์ต๋๋ค. C ์ธ์ด์ ๊ฒฝ์ฐ, ๋ค๋ฅธ ๋ฒ์ ์ ๋ช ์์ ์ผ๋ก ์ ํํ์ง ์๋ ํ ๊ธฐ๋ณธ์ ์ผ๋ก OpenCL 1.2 ์ฌ์์ด ์ฌ์ฉ๋ฉ๋๋ค. C++์ ๊ฒฝ์ฐ, ".clcpp" ํ์ฅ์๋ฅผ ๊ฐ์ง ํ์ผ์ ๋ํ ์ง์์ด ์ถ๊ฐ๋์์ต๋๋ค.
- OpenMP 5.1 ์ฌ์์ ์ ์๋ ๋ฃจํ ๋ณํ ์ง์๋ฌธ( "#pragma omp unrol" ๋ฐ "#pragma omp tile")์ ๋ํ ์ง์์ด ๊ตฌํ๋์์ต๋๋ค.
- clang-format ์ ํธ๋ฆฌํฐ๊ฐ ๋ค์ ์ต์ ์ผ๋ก ์ ๋ฐ์ดํธ๋์์ต๋๋ค. SpacesInLineCommentPrefix๋ ์ฃผ์ ์์ ๊ณต๋ฐฑ ์๋ฅผ ๊ฒฐ์ ํ๊ณ , IndentAccessModifiers, LambdaBodyIndentation, PPIndentWidth๋ ๋ ์ฝ๋, ๋๋ค ํํ์ ๋ฐ ์ ์ฒ๋ฆฌ๊ธฐ ์ง์๋ฌธ์ ์ ๋ ฌ์ ์ ์ดํฉ๋๋ค. ํค๋ ํ์ผ ๋ชฉ๋ก ์ ๋ ฌ ๊ธฐ๋ฅ(SortIncludes)์ด ํ์ฅ๋์์ต๋๋ค. JSON ํ์ผ ํ์ ์ง์ ์ง์์ด ์ถ๊ฐ๋์์ต๋๋ค.
- clang-tidy linter์ ์๋ก์ด ๊ฒ์ฌ ํญ๋ชฉ์ด ๋๋์ผ๋ก ์ถ๊ฐ๋์์ต๋๋ค.
LLVM 13.0์ ์ฃผ์ ํ์ ์ฌํญ:
- ะะพะฑะฐะฒะปะตะฝะฐ ะพะฟัะธั ยซ-ehcontguardยป ะดะปั ะธัะฟะพะปัะทะพะฒะฐะฝะธั ัะตั ะฝะพะปะพะณะธะธ CET (Windows Control-flow Enforcement Technology) ะดะปั ะทะฐัะธัั ะฝะฐ ััะฐะฟะต ะพะฑัะฐะฑะพัะบะธ ะธัะบะปััะตะฝะธะน ะพั ะฒัะฟะพะปะฝะตะฝะธั ัะบัะฟะปะพะธัะพะฒ, ะฟะพัััะพะตะฝะฝัั ั ะธัะฟะพะปัะทะพะฒะฐะฝะธะตะผ ะฟัะธัะผะพะฒ ะฒะพะทะฒัะฐัะฝะพ-ะพัะธะตะฝัะธัะพะฒะฐะฝะฝะพะณะพ ะฟัะพะณัะฐะผะผะธัะพะฒะฐะฝะธั (ROP, Return-Oriented Programming).
- debuginfo-test ํ๋ก์ ํธ์ ์ด๋ฆ์ด cross-project-tests๋ก ๋ณ๊ฒฝ๋์์ผ๋ฉฐ, ๋๋ฒ๊ทธ ์ ๋ณด์ ๊ตญํ๋์ง ์๊ณ ๋ค์ํ ํ๋ก์ ํธ์ ๊ตฌ์ฑ ์์๋ฅผ ํ ์คํธํ๋๋ก ์ค๊ณ๋์์ต๋๋ค.
- ๋น๋ ์์คํ ์ ์ฌ๋ฌ ๋ฐฐํฌํ์ ๋น๋ํ ์ ์๋ ์ง์์ ์ ๊ณตํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ๊ฐ๋ฐ์๋ฅผ ์ํ ์ ํธ๋ฆฌํฐ๊ฐ ์๋ ๋ฐฐํฌํ๊ณผ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์๋ ๋ฐฐํฌํ์ ๋น๋ํ ์ ์์ต๋๋ค.
- AArch64 ์ํคํ ์ฒ์ ๋ฐฑ์๋๋ ์ด์ ๋ธ๋ฌ์์ Armv9-A RME(Realm Management Extension) ๋ฐ SME(Scalable Matrix Extension) ํ์ฅ์ ์ง์ํ๋๋ก ๊ตฌํ๋ฉ๋๋ค.
- Hexagon ์ํคํ ์ฒ ๋ฐฑ์๋์ ISA V68/HVX์ ๋ํ ์ง์์ด ์ถ๊ฐ๋์์ต๋๋ค.
- x86 ๋ฐฑ์๋๋ AMD Zen 3 ํ๋ก์ธ์์ ๋ํ ์ง์์ด ํฅ์๋์์ต๋๋ค.
- AMDGPU ๋ฐฑ์๋์ GFX1013 RDNA2 APU์ ๋ํ ์ง์์ด ์ถ๊ฐ๋์์ต๋๋ค.
- ะ Libc++ ะฟัะพะดะพะปะถะตะฝะฐ ัะตะฐะปะธะทะฐัะธั ะฝะพะฒัั ะฒะพะทะผะพะถะฝะพััะตะน ััะฐะฝะดะฐััะพะฒ C++20 ะธ C++2b, ะฒ ัะพะผ ัะธัะปะต ะทะฐะฒะตััะตะฝะฐ ัะตะฐะปะธะทะฐัะธั ะฑะธะฑะปะธะพัะตะบะธ ยซconceptsยป. ะะปั ะฟะปะฐััะพัะผั Windows ะฝะฐ ะฑะฐะทะต MinGW ะดะพะฑะฐะฒะปะตะฝะฐ ะฟะพะดะดะตัะถะบะฐ std::filesystem. ะ ะฐะทะดะตะปะตะฝั ะทะฐะณะพะปะพะฒะพัะฝัะต ัะฐะนะปั <algorithm>, <iterator> ะธ <utility>. ะะพะฑะฐะฒะปะตะฝะฐ ัะฑะพัะพัะฝะฐั ะพะฟัะธั LIBCXX_ENABLE_INCOMPLETE_FEATURES ะดะปั ะพัะบะปััะตะฝะธั ะทะฐะณะพะปะพะฒะพัะฝัั ัะฐะนะปะพะฒ ั ะฝะต ะฟะพะปะฝะพัััั ัะตะฐะปะธะทะพะฒะฐะฝะฝะพะน ััะฝะบัะธะพะฝะฐะปัะฝะพัััั.
- LLD ๋ง์ปค๊ฐ ๋น ์๋์ Aarch64 ํ๋ก์ธ์๋ฅผ ์ง์ํ๋๋ก ํ์ฅ๋์์ผ๋ฉฐ, Mach-O ๋ฐฑ์๋๊ฐ ๊ฐ์ ๋์ด ์ผ๋ฐ ํ๋ก๊ทธ๋จ ๋งํฌ๊ฐ ๊ฐ๋ฅํด์ก์ต๋๋ค. LLD๋ฅผ ์ฌ์ฉํ์ฌ Glibc๋ฅผ ๋งํฌํ๋ ๋ฐ ํ์ํ ๊ฐ์ ์ฌํญ๋ ํฌํจ๋์์ต๋๋ค.
- llvm-mca(๋จธ์ ์ฝ๋ ๋ถ์๊ธฐ) ์ ํธ๋ฆฌํฐ๊ฐ ARM Cortex-A55์ ๊ฐ์ ์์ํ ์ํผ์ค์นผ๋ผ ํ์ดํ๋ผ์ธ ํ๋ก์ธ์๋ฅผ ์ง์ํ๋๋ก ์ ๋ฐ์ดํธ๋์์ต๋๋ค.
- AArch64 ํ๋ซํผ์ฉ LLDB ๋๋ฒ๊ฑฐ๋ ์ด์ ํฌ์ธํฐ ์ธ์ฆ, MTE(MemTag, ๋ฉ๋ชจ๋ฆฌ ํ๊น ํ์ฅ) ๋ฉ์ปค๋์ฆ ๋ฐ SVE ๋ ์ง์คํฐ๋ฅผ ์๋ฒฝํ๊ฒ ์ง์ํฉ๋๋ค. ๊ฐ ๋ฉ๋ชจ๋ฆฌ ํ ๋น ์์ ์ ํ๊ทธ๋ฅผ ๋ฐ์ธ๋ฉํ๊ณ , ์ ํจํ ํ๊ทธ์ ๋ฐ์ธ๋ฉ๋์ด์ผ ํ๋ ๋ฉ๋ชจ๋ฆฌ์ ์ก์ธ์คํ ๋ ํฌ์ธํฐ๋ฅผ ํ์ธํ๋ ๋ช ๋ น์ด ์ถ๊ฐ๋์์ต๋๋ค.
- LLDB ๋๋ฒ๊ฑฐ์ Fortran ํ๋ฐํธ์๋ Flang์ด ํ๋ก์ ํธ์์ ์์ฑ๋ ๋ฐ์ด๋๋ฆฌ ์ด์ ๋ธ๋ฆฌ์ ์ถ๊ฐ๋์์ต๋๋ค.
์ถ์ฒ : opennet.ru
