15.0๊ฐ์๊ฐ์ ๊ฐ๋ฐ ๋์ LLVM XNUMX ํ๋ก์ ํธ๊ฐ ์ถ์๋์์ต๋๋ค. ์ด๋ ํ๋ก๊ทธ๋จ์ RISC ์ ์ฌ ๊ฐ์ ๋ช ๋ น์ด(๋ค๋จ๊ณ ์ต์ ํ ์์คํ ์ ๊ฐ์ถ ์ ์์ค ๊ฐ์ ๋จธ์ )์ ์ค๊ฐ ๋นํธ์ฝ๋๋ก ์ปดํ์ผํ๋ GCC ํธํ ํดํท(์ปดํ์ผ๋ฌ, ์ต์ ํ ํ๋ก๊ทธ๋จ, ์ฝ๋ ์์ฑ๊ธฐ)์ ๋๋ค. ์์ฑ๋ ์์ฌ์ฝ๋๋ ํ๋ก๊ทธ๋จ ์คํ ์์ ์ JIT ์ปดํ์ผ๋ฌ๋ฅผ ์ฌ์ฉํ์ฌ ๊ธฐ๊ณ์ด ๋ช ๋ น์ด๋ก ์ง์ ๋ณํ๋ ์ ์์ต๋๋ค.
Clang 15.0์ ์ฃผ์ ๊ฐ์ ์ฌํญ:
- x86 ๊ธฐ๋ฐ ์์คํ ์ ๊ฒฝ์ฐ, "-fzero-call-used-regs" ํ๋๊ทธ๊ฐ ์ถ๊ฐ๋์์ต๋๋ค. ์ด ํ๋๊ทธ๋ ํจ์์์ ์ฌ์ฉ๋๋ ๋ชจ๋ CPU ๋ ์ง์คํฐ๋ฅผ ํจ์์์ ์ ์ด๊ถ์ ๋ฐํํ๊ธฐ ์ ์ 20์ผ๋ก ์ด๊ธฐํํฉ๋๋ค. ์ด ์ต์ ์ ํจ์์ ์ ๋ณด ์ ์ถ์ ๋ฐฉ์งํ๊ณ ์ ์ฉ ์ฌ๋ก์์ ROP(Return-Oriented Programming) ๊ฐ์ ฏ์ ๊ตฌ์ฑํ๋ ๋ฐ ์ ํฉํ ๋ธ๋ก ์๋ฅผ ์ฝ XNUMX% ์ค์ด๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค.
- C ์ฝ๋์์ ๊ตฌ์กฐ์ฒด ๋ ์ด์์์ ๋ฌด์์์ฑ์ ๊ตฌํํ์ฌ ์ ์ฉ๋ ๊ฒฝ์ฐ ๊ตฌ์กฐ์ฒด์์ ๋ฐ์ดํฐ ์ถ์ถ์ ๋์ฑ ์ด๋ ต๊ฒ ๋ง๋ค์์ต๋๋ค. ๋ฌด์์์ฑ์ randomize_layout ๋ฐ no_randomize_layout ์์ฑ์ ์ฌ์ฉํ์ฌ ํ์ฑํ ๋ฐ ๋นํ์ฑํํ ์ ์์ผ๋ฉฐ, "-frandomize-layout-seed" ๋๋ "-frandomize-layout-seed-file" ํ๋๊ทธ๋ฅผ ์ฌ์ฉํ์ฌ ์๋๋ฅผ ์ค์ ํด์ผ ํฉ๋๋ค.
- ํ๋๊ทธ "-fstrict-flex-arrays= ์ถ๊ฐ๋จ "๋ ๊ตฌ์กฐ์ฒด(Flexible Array Members, ๊ตฌ์กฐ์ฒด ๋์ ์๋ ํฌ๊ธฐ๊ฐ ์ ์๋์ง ์์ ๋ฐฐ์ด)์์ ์ ์ฐํ ๋ฐฐ์ด ์์์ ๊ฒฝ๊ณ๋ฅผ ์ ์ดํ๋ โโ๋ฐ ์ฌ์ฉํ ์ ์์ต๋๋ค. 0(๊ธฐ๋ณธ๊ฐ)์ผ๋ก ์ค์ ํ๋ฉด ๋ฐฐ์ด์ด ์๋ ๊ตฌ์กฐ์ฒด์ ๋ง์ง๋ง ์์๋ ํญ์ ์ ์ฐํ ๋ฐฐ์ด๋ก ์ฒ๋ฆฌ๋๊ณ , 1 - ํฌ๊ธฐ [], [0] ๋ฐ [1]๋ง ์ ์ฐํ ๋ฐฐ์ด๋ก ์ฒ๋ฆฌ๋๊ณ , 2 - ํฌ๊ธฐ [] ๋ฐ [0]๋ง ์ ์ฐํ ๋ฐฐ์ด๋ก ์ฒ๋ฆฌ๋ฉ๋๋ค.
- DirectX์์ ์ ฐ์ด๋๋ฅผ ์์ฑํ๋ ๋ฐ ์ฌ์ฉ๋๋ C ์ ์ฌ ์ธ์ด์ธ HLSL(High-Level Shader Language)์ ๋ํ ์คํ์ ์ง์์ด ์ถ๊ฐ๋์์ต๋๋ค.
- ๊ณ ์ ๊ธธ์ด ๋ฐ ๊ฐ๋ณ ๊ธธ์ด ๋ฐฐ์ด๊ณผ ๊ด๋ จ๋ ์ธ์์ ํธํ๋์ง ์๋ ์ ์ธ์ผ๋ก ํจ์๋ฅผ ๋ค์ ์ ์ํ๋ ๊ฒ์ ๋ํด ๊ฒฝ๊ณ ํ๋ "-Warray-parameter" ์ต์ ์ด ์ถ๊ฐ๋์์ต๋๋ค.
- MSVC์์ ํธํ์ฑ์ด ํฅ์๋์์ต๋๋ค. MSVC์์ ์ ๊ณต๋๋ "#pragma function"(์ปดํ์ผ๋ฌ๊ฐ ์ธ๋ผ์ธ ํ์ฅ ๋์ ํจ์ ํธ์ถ์ ์์ฑํ๋๋ก ์ง์) ๋ฐ "#pragma alloc_text"(ํจ์ ์ฝ๋๊ฐ ํฌํจ๋ ์น์ ์ด๋ฆ์ ์ ์)์ ๋ํ ์ง์์ด ์ถ๊ฐ๋์์ต๋๋ค. MSVC ํธํ ํ๋๊ทธ์ธ /JMC ๋ฐ /JMC์ ๋ํ ์ง์์ด ์ถ๊ฐ๋์์ต๋๋ค.
- ํฅํ C2X ๋ฐ C++23 ํ์ค ์ง์์ ์ํ ์์
์ด ๊ณ์๋์์ต๋๋ค. C ์ธ์ด์ ๊ฒฝ์ฐ, noreturn ์์ฑ, false ๋ฐ true ํค์๋, ํน์ ๋นํธ ์ฌ๋์ ์ ์๋ฅผ ์ํ _BitInt(N) ํ์
, *_WIDTH ๋งคํฌ๋ก, UTF-8 ์ธ์ฝ๋ฉ ๋ฌธ์๋ฅผ ์ํ u8 ์ ๋์ฌ๊ฐ ๊ตฌํ๋์์ต๋๋ค.
C++์ ๊ฒฝ์ฐ ๋ค์์ด ๊ตฌํ๋์ด ์์ต๋๋ค: ๋ชจ๋ ๋ณํฉ, ํจ์ ๋ฉค๋ฒ์ ABI ๊ฒฉ๋ฆฌ, ๋ชจ๋์์ ๋น์ง์ญ ๋ณ์์ ์์ ์๋ ๋์ ์ด๊ธฐํ, ๋ค์ฐจ์ ์ธ๋ฑ์ค ์ฐ์ฐ์, auto(x), ๋น๋ฌธ์์ ๋ณ์, constexpr๋ก ์ ์ธ๋ ํจ์์ goto ๋ฐ ๋ ์ด๋ธ, ๊ตฌ๋ถ ๊ธฐํธ๊ฐ ์๋ ์ด์ค์ผ์ดํ ์ํ์ค, ๋ช ๋ช ๋ ์ด์ค์ผ์ดํ ๋ฌธ์.
- OpenCL ๋ฐ OpenMP ์ง์ ๊ด๋ จ ๊ธฐ๋ฅ์ด ํ์ฅ๋์์ต๋๋ค. OpenCL ํ์ฅ ๊ธฐ๋ฅ์ธ cl_khr_subgroup_rotate์ ๋ํ ์ง์์ด ์ถ๊ฐ๋์์ต๋๋ค.
- x86 ์ํคํ ์ฒ์ ๊ฒฝ์ฐ, ๋ฌด์กฐ๊ฑด ์ง์ ์ ํ ์ฐ์ฐ ํ ๋ช ๋ น์ด์ ์ถ์ธก ์คํ์ผ๋ก ์ธํด ๋ฐ์ํ๋ ํ๋ก์ธ์ ์ทจ์ฝ์ ์ ๋ํ ๋ณดํธ ๊ธฐ๋ฅ์ด ์ถ๊ฐ๋์์ต๋๋ค. ์ด ๋ฌธ์ ๋ ์ ํ ๋ช ๋ น์ด ๋ฐ๋ก ๋ค์ ์ค๋ ๋ฉ๋ชจ๋ฆฌ ๋ช ๋ น์ด์ ์์ธก ์ฒ๋ฆฌ(SLS, Straight Line Speculation)๋ก ์ธํด ๋ฐ์ํฉ๋๋ค. ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด "-mharden-sls=[none|all|return|indirect-jmp]" ์ต์ ์ด ์ ์๋์์ต๋๋ค.
- SSE2 ํ์ฅ์ ์ง์ํ๋ ํ๋ซํผ์ ๊ฒฝ์ฐ _Float16 ์ ํ์ด ์ถ๊ฐ๋์์ต๋๋ค. ์ด ์ ํ์ AVX512-FP16 ๋ช ๋ น์ด์ ๋ํ ์ง์์ด ์๋ ๊ฒฝ์ฐ float ์ ํ์ ์ฌ์ฉํ์ฌ ์๋ฎฌ๋ ์ด์ ๋ฉ๋๋ค.
- AMD Zen2 ํ๋ก์ธ์๋ถํฐ ์ง์๋๋ RDPRU ๋ช ๋ น์ด ์ฌ์ฉ์ ์ ์ดํ๊ธฐ ์ํด "-m[no-]rdpru" ํ๋๊ทธ๊ฐ ์ถ๊ฐ๋์์ต๋๋ค.
- ๊ฐ์ ์ ํ์ ๋ํ ์ถ์ธก ์คํ ๋ฉ์ปค๋์ฆ์ ๊ฐ์ ์ ์ ๊ฑฐํ๋ ๋ช ๋ น์ด ์ํ์ค๋ฅผ ์ถ๊ฐํ์ฌ RETBLEED ์ทจ์ฝ์ ์ผ๋ก๋ถํฐ ๋ณดํธํ๊ธฐ ์ํด "-mfunction-return=thunk-extern" ํ๋๊ทธ๋ฅผ ์ถ๊ฐํ์ต๋๋ค.
LLVM 15.0์ ์ฃผ์ ํ์ ์ฌํญ:
- Cortex-M85 CPU, Armv9-A, Armv9.1-A ๋ฐ Armv9.2-A ์ํคํ ์ฒ, Armv8.1-M PACBTI-M ํ์ฅ์ ๋ํ ์ง์์ด ์ถ๊ฐ๋์์ต๋๋ค.
- DirectX ์ ฐ์ด๋์ ์ฌ์ฉ๋๋ DXIL(DirectX Intermediate Language) ํ์์ ์ง์ํ๋ DirectX์ฉ ์คํ์ฉ ๋ฐฑ์๋๋ฅผ ์ถ๊ฐํ์ต๋๋ค. ์ด์ ๋ธ๋ฆฌ ๊ณผ์ ์์ "-DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD=DirectX" ๋งค๊ฐ๋ณ์๋ฅผ ์ง์ ํ๋ฉด ๋ฐฑ์๋๊ฐ ํ์ฑํ๋ฉ๋๋ค.
- Libc++๋ "ํฌ๋งท" ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๊ตฌํ์ ์๋ฃํ๊ณ "๋ฒ์" ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์คํ์ ๋ฒ์ ์ ์ ๊ณตํ๋ ๋ฑ C++20 ๋ฐ C++2b ํ์ค์ ์๋ก์ด ๊ธฐ๋ฅ์ ๊ณ์ ๊ตฌํํ๊ณ ์์ต๋๋ค.
- x86, PowerPC ๋ฐ RISC-V ์ํคํ ์ฒ์ ๋ํ ๋ฐฑ์๋๊ฐ ๊ฐ์ ๋์์ต๋๋ค.
- LLD ๋ง์ปค์ LLDB ๋๋ฒ๊ฑฐ์ ๊ธฐ๋ฅ์ด ํ์ฅ๋์์ต๋๋ค.
์ถ์ฒ : opennet.ru
