16.0๊ฐ์๊ฐ์ ๊ฐ๋ฐ ๋์ LLVM XNUMX ํ๋ก์ ํธ์ ์ถ์๊ฐ ๋ฐํ๋์์ต๋๋ค. ์ด๋ ํ๋ก๊ทธ๋จ์ RISC์ ๊ฐ์ ๊ฐ์ ๋ช ๋ น์ด์ ์ค๊ฐ ๋นํธ์ฝ๋(๋ฎ์ ์์ค์ ๊ฐ์ ๋จธ์ )๋ก ์ปดํ์ผํ๋ GCC ํธํ ํดํท(์ปดํ์ผ๋ฌ, ์ตํฐ๋ง์ด์ ๋ฐ ์ฝ๋ ์์ฑ๊ธฐ)์ ๋๋ค. ๋ค๋จ๊ณ ์ต์ ํ ์์คํ ). ์์ฑ๋ ์์ฌ์ฝ๋๋ JIT ์ปดํ์ผ๋ฌ๋ฅผ ์ฌ์ฉํ์ฌ ํ๋ก๊ทธ๋จ ์คํ ์ ์ง์ ๊ธฐ๊ณ์ด ๋ช ๋ น์ด๋ก ๋ณํ๋ ์ ์์ต๋๋ค.
Clang 16.0์ ์ฃผ์ ๊ฐ์ ์ฌํญ:
- ๊ธฐ๋ณธ C++/ObjC++ ํ์ค์ gnu++17(์ด์ gnu++14)์ ๋๋ค. ์ด๋ GNU ํ์ฅ์ด ํฌํจ๋ C++17 ๊ธฐ๋ฅ์ด ๊ธฐ๋ณธ์ ์ผ๋ก ์ง์๋๋ค๋ ์๋ฏธ์ ๋๋ค. ์ด์ ๋์์ ๋ฐํํ๋ ค๋ฉด "-std=gnu++14" ์ต์ ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
- C++20 ํ์ค๊ณผ ๊ด๋ จ๋ ๊ณ ๊ธ ๊ธฐ๋ฅ์ ๊ตฌํํ์ต๋๋ค.
- ์กฐ๊ฑด๋ถ๋ก ์ฌ์ํ ํน์ ๋ฉค๋ฒ ํจ์,
- ๋๋ค ํจ์์์ ๊ตฌ์กฐํ๋ ๋ฐ์ธ๋ฉ ์บก์ฒ,
- ํํ์ ๋ด๋ถ์ ํญ๋ฑ ์ฐ์ฐ์,
- ์ผ๋ถ ์ํฉ์์ typename ํค์๋๋ฅผ ์๋ตํ๋ ์ต์
- ๊ดํธ ์์ ์ ํจํ ์ง๊ณ ์ด๊ธฐํ("Aggr(val1, val2)").
- ํฅํ C++2b ํ์ค์ ์ ์๋ ๊ธฐ๋ฅ์ด ๊ตฌํ๋์์ต๋๋ค.
- ๋ณตํฉ ํํ์ ๋์ ๋ ์ด๋ธ์ ๋ฐฐ์นํ๋ ๊ฒ์ด ํ์ฉ๋ฉ๋๋ค.
- ์ ์ ์ฐ์ฐ์(),
- ์ ์ ์ฐ์ฐ์[],
- char8_t ์ ํ๊ณผ์ ํธํ์ฑ์ด ๋ณด์ฅ๋ฉ๋๋ค.
- "\N{...}"์ ์ฌ์ฉํ ์ ์๋ ๋ฌธ์ ๋ฒ์๊ฐ ํ์ฅ๋์์ต๋๋ค.
- constexpr๋ก ์ ์ธ๋ ํจ์์ "์ ์ constexpr"๋ก ์ ์ธ๋ ๋ณ์๋ฅผ ์ฌ์ฉํ๋ ๊ธฐ๋ฅ์ด ์ถ๊ฐ๋์์ต๋๋ค.
- ํฅํ C ํ์ค C2x์ ์ ์๋ ๊ธฐ๋ฅ์ด ๊ตฌํ๋์์ต๋๋ค.
- '-Wunused-label' ๊ฒฝ๊ณ ๋ฅผ ๋นํ์ฑํํ๋ ค๋ฉด '[[maybe_unused]]' ์์ฑ์ ๋ผ๋ฒจ์ ์ ์ฉํ ์ ์์ต๋๋ค.
- ๋ณตํฉ ํํ์ ๋ด์ ์ด๋ ์์น์๋ ๋ ์ด๋ธ์ ๋ฐฐ์นํ ์ ์์ต๋๋ค.
- typeof ๋ฐ typeof_unqual ์ฐ์ฐ์๊ฐ ์ถ๊ฐ๋์์ต๋๋ค.
- ๋ชจ๋ ํฌ์ธํฐ ์ ํ์ผ๋ก ๋ณํํ ์ ์๊ณ ์ ์ ๋ฐ void* ์ ํ์ ๋ฐ์ธ๋ฉ๋์ง ์์ NULL์ ๋ณํ์ ๋ํ๋ผ ์ ์๋ null ํฌ์ธํฐ๋ฅผ ์ ์ํ๋ ์๋ก์ด ์ ํ nullptr_t ๋ฐ nullptr ์์์ ๋๋ค.
- C2x ๋ชจ๋์์๋ ๊ฐ๋ณ ๊ฐ์์ ์ธ์(variadic)๋ฅผ ์ฌ์ฉํ์ฌ va_start ๋งคํฌ๋ก๋ฅผ ํธ์ถํ๋ ๊ฒ์ด ํ์ฉ๋ฉ๋๋ค.
- C99, C11 ๋ฐ C17 ์ค์ ๋ชจ๋์์ ๊ธฐ๋ณธ ์ต์ "-Wimplicit-function-declaration" ๋ฐ "-Wimplicit-int"๋ ์ด์ ๊ฒฝ๊ณ ๋์ ์ค๋ฅ๋ฅผ ์์ฑํฉ๋๋ค.
- ์ด์ C++ ๋ชจ๋์์ "void *"(์: "void func(void *p) { *p; }")๋ฅผ ๊ฐ์ ์ ์ผ๋ก ์ฌ์ฉํ๋ฉด ISO C++, GCC, ICC ๋ฐ MSVC์ ์ ์ฌํ ์ค๋ฅ๊ฐ ์์ฑ๋ฉ๋๋ค.
- ์ด์ Microsoft ์คํ์ผ ์ธ๋ผ์ธ ์ด์ ๋ธ๋ฆฌ ๋ธ๋ก์์ ๋นํธ ํ๋๋ฅผ ๋ช ๋ น์ด ํผ์ฐ์ฐ์(์: "__asm โโโโ{ mov eax, s.bf }")๋ก ์ง์ ํ๋ฉด ์ค๋ฅ๊ฐ ์์ฑ๋ฉ๋๋ค.
- ์๋ก ๋ค๋ฅธ ๋ชจ๋์ ๋์ผํ ์ด๋ฆ์ ๊ฐ์ง ์๋ก ๋ค๋ฅธ ๊ตฌ์กฐ ๋ฐ ๊ณต์ฉ์ฒด์ ์กด์ฌ์ ๋ํ ์ง๋จ์ด ์ถ๊ฐ๋์์ต๋๋ค.
- OpenCL ๋ฐ OpenMP ์ง์๊ณผ ๊ด๋ จ๋ ๊ธฐ๋ฅ์ด ํ์ฅ๋์์ต๋๋ค. OpenCL ์ปค๋ ์ธ์์ ์ฌ์ฉ๋๋ C++ ํ ํ๋ฆฟ์ ๋ํ ์ง๋จ์ด ํฅ์๋์์ต๋๋ค. AMDGPU์ ๋ํ ํ์ ๋ธ๋ก ์ง์์ด ํฅ์๋์์ต๋๋ค. nounwind ์์ฑ์ ๋ชจ๋ ํจ์์ ์์์ ์ผ๋ก ์ถ๊ฐ๋ฉ๋๋ค. ๋ด์ฅ ๊ธฐ๋ฅ์ ๋ํ ์ง์์ด ํฅ์๋์์ต๋๋ค.
- CLANG_CRASH_DIAGNOSTICS_DIR ํ๊ฒฝ ๋ณ์๋ฅผ ์ฌ์ฉํ์ฌ ์ถฉ๋ ์ง๋จ ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋๋ ๋๋ ํฐ๋ฆฌ๋ฅผ ์ ์ํ๋ ๊ธฐ๋ฅ์ด ์ถ๊ฐ๋์์ต๋๋ค.
- ์ ๋์ฝ๋ ์ง์์ด ์ ๋์ฝ๋ 15.0 ์ฌ์์ผ๋ก ์ ๋ฐ์ดํธ๋์์ต๋๋ค. "โ"(์: "double xโโโ")๊ณผ ๊ฐ์ ์ผ๋ถ ์ํ ๊ธฐํธ๋ ์๋ณ์์ ํ์ฉ๋ฉ๋๋ค.
- ์ฌ๋ฌ ๊ตฌ์ฑ ํ์ผ ๋ก๋์ ๋ํ ์ง์์ด ์ถ๊ฐ๋์์ต๋๋ค(๊ธฐ๋ณธ ๊ตฌ์ฑ ํ์ผ์ด ๋จผ์ ๋ก๋๋ ๋ค์ "--config=" ํ๋๊ทธ๋ฅผ ํตํด ์ง์ ๋ ํ์ผ์ด ๋ก๋๋๋ฉฐ ์ด์ ์ฌ๋ฌ ๋ฒ ์ง์ ํ ์ ์์). ๊ตฌ์ฑ ํ์ผ์ ๊ธฐ๋ณธ ๋ก๋ ์์๊ฐ ๋ณ๊ฒฝ๋์์ต๋๋ค. clang์ด ํ์ผ์ ๋จผ์ ๋ก๋ํ๋ ค๊ณ ์๋ํฉ๋๋ค. - .cfg, ์ฐพ์ง ๋ชปํ ๊ฒฝ์ฐ ๋ ๊ฐ์ ํ์ผ ๋ก๋๋ฅผ ์๋ํฉ๋๋ค. .cfg ๋ฐ .cfg. ๊ธฐ๋ณธ์ ์ผ๋ก ๊ตฌ์ฑ ํ์ผ ๋ก๋๋ฅผ ๋นํ์ฑํํ๊ธฐ ์ํด "--no-default-config" ํ๋๊ทธ๊ฐ ์ถ๊ฐ๋์์ต๋๋ค.
- ๋ฐ๋ณต ๊ฐ๋ฅํ ๋น๋๋ฅผ ๋ณด์ฅํ๊ธฐ ์ํด __DATE__, __TIME__ ๋ฐ __TIMESTAMP__ ๋งคํฌ๋ก์ ํ์ฌ ๋ ์ง ๋ฐ ์๊ฐ ๊ฐ์ SOURCE_DATE_EPOCH ํ๊ฒฝ ๋ณ์์ ์ง์ ๋ ์๊ฐ์ผ๋ก ๋ฐ๊ฟ ์ ์์ต๋๋ค.
- ์์ ์ปจํ ์คํธ์์ ์ฌ์ฉํ ์ ์๋ ๋ด์ฅ ํจ์(buildin)๊ฐ ์๋์ง ํ์ธํ๊ธฐ ์ํด "__has_constexpr_builtin" ๋งคํฌ๋ก๊ฐ ์ถ๊ฐ๋์์ต๋๋ค.
- ์ ๋ ฌ๋ ์ฝ๋ฃจํด ํ๋ ์ ํ ๋น์ ์ํ ์๋ก์ด ์ปดํ์ผ ํ๋๊ทธ "-fcoro-aligned-allocation"์ ์ถ๊ฐํ์ต๋๋ค.
- "-fstrict-flex-arrays=" ํ๋๊ทธ๋ ๊ตฌ์กฐ(๊ตฌ์กฐ ๋์ ํฌ๊ธฐ๊ฐ ๋ฌดํํ ๋ฐฐ์ด์ธ ์ ์ฐํ ๋ฐฐ์ด ๋ฉค๋ฒ)์ ์ ์ฐํ ๋ฐฐ์ด ์์๋ฅผ ํ์ธํ๋ ์ธ ๋ฒ์งธ ์์ค์ ๋ํ ์ง์์ ๊ตฌํํฉ๋๋ค. ์ธ ๋ฒ์งธ ์์ค์์๋ "[]" ํฌ๊ธฐ(์: "int b[]")๋ง ์ ์ฐํ ๋ฐฐ์ด๋ก ์ฒ๋ฆฌ๋์ง๋ง "[0]" ํฌ๊ธฐ(์: "int b[0]")๋ ์ ์ฐํ ๋ฐฐ์ด๋ก ์ฒ๋ฆฌ๋ฉ๋๋ค. ์๋๋ค.
- ํ์ค C++ ๋ชจ๋์ ๋ํ ๋จ์ผ ๋จ๊ณ ์ปดํ์ผ ๋ชจ๋ธ์ ํ์ฑํํ๊ธฐ ์ํด "-fmodule-output" ํ๋๊ทธ๊ฐ ์ถ๊ฐ๋์์ต๋๋ค.
- ์คํ ํ๋ ์ ๋ ์ด์์ ๋ฌธ์ ๋ฅผ ์ง๋จํ๋ ๋ฐ ๋์์ด ๋๋ "-Rpass-analytic=stack-frame-layout" ๋ชจ๋๋ฅผ ์ถ๊ฐํ์ต๋๋ค.
- AArch1์์ ์ ๊ณตํ๋ ๊ธฐ๋ฅ์ ํน์ ๋ฒ์ ์ ์ ํํ๊ธฐ ์ํด ์๋ก์ด ์์ฑ __attribute__((target_version("cpu_features")))๋ฅผ ์ถ๊ฐํ๊ณ __attribute__((target_clones("cpu_features2","cpu_features64",...)) ์์ฑ์ ๊ธฐ๋ฅ์ ํ์ฅํ์ต๋๋ค. CPU.
- ํ์ฅ๋ ์ง๋จ ๋๊ตฌ:
- ๋จ์ผ ๋นํธ ๋ถํธ ์๋ ๋นํธ ํ๋์ ํ๋๋ฅผ ํ ๋นํ ๋ ์์์ ์๋ฆผ์ ๊ฐ์งํ๊ธฐ ์ํด "-Wsingle-bit-bitfield-constant-conversion" ๊ฒฝ๊ณ ๋ฅผ ์ถ๊ฐํ์ต๋๋ค.
- ์ด๊ธฐํ๋์ง ์์ constexpr ๋ณ์์ ์ง๋จ์ด ํ์ฅ๋์์ต๋๋ค.
- ํจ์ ์ ํ ์บ์คํ ๊ณผ ๊ด๋ จ๋ ์ ์ฌ์ ์ธ ๋ฌธ์ ๋ฅผ ์๋ณํ๊ธฐ ์ํด "-Wcast-function-type-strict" ๋ฐ "-Win Compatible-function-pointer-types-strict" ๊ฒฝ๊ณ ๋ฅผ ์ถ๊ฐํ์ต๋๋ค.
- ๋ด๋ณด๋ด๊ธฐ ๋ธ๋ก์์ ์ฌ๋ฐ๋ฅด์ง ์๊ฑฐ๋ ์์ฝ๋ ๋ชจ๋ ์ด๋ฆ์ ์ฌ์ฉํ๋ ๊ฒ์ ๋ํ ์ง๋จ์ ์ถ๊ฐํ์ต๋๋ค.
- ์ ์์์ ๋๋ฝ๋ "auto" ํค์๋ ๊ฐ์ง ๊ธฐ๋ฅ์ด ํฅ์๋์์ต๋๋ค.
- "-Winteger-overflow" ๊ฒฝ๊ณ ๊ตฌํ์๋ ์ค๋ฒํ๋ก๋ก ์ด์ด์ง๋ ์ถ๊ฐ ์ํฉ์ ๋ํ ๊ฒ์ฌ๊ฐ ์ถ๊ฐ๋์์ต๋๋ค.
- Loongson 64 464 ํ๋ก์ธ์์ ์ฌ์ฉ๋๋ LoongArch ๋ช ๋ น์ด ์ธํธ ์ํคํ ์ฒ(-march=loongarch3 ๋๋ -march=la5000)์ ๋ํ ์ง์์ ๊ตฌํํ๊ณ MIPS ๋ฐ RISC-V์ ์ ์ฌํ ์๋ก์ด RISC ISA๋ฅผ ๊ตฌํํฉ๋๋ค.
LLVM 16.0์ ์ฃผ์ ํ์ ์ฌํญ:
- LLVM ์ฝ๋๋ C++17 ํ์ค์ ์ ์๋ ์์๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
- LLVM ๊ตฌ์ถ์ ์ํ ํ๊ฒฝ ์๊ตฌ ์ฌํญ์ด ์ฆ๊ฐํ์ต๋๋ค. ์ด์ ๋น๋ ๋๊ตฌ๋ C++17 ํ์ค์ ์ง์ํด์ผ ํฉ๋๋ค. ๋น๋ํ๋ ค๋ฉด ์ต์ํ GCC 7.1, Clang 5.0, Apple Clang 10.0 ๋๋ Visual Studio 2019 16.7์ด ํ์ํฉ๋๋ค.
- AArch64 ์ํคํ ์ฒ์ ๋ฐฑ์๋๋ Cortex-A715, Cortex-X3 ๋ฐ Neoverse V2 CPU, RME MEC(Memory Encryption Contexts)์ฉ ์ด์ ๋ธ๋ฌ, Armv8.3 ํ์ฅ(๋ณต์์) ๋ฐ Function Multi Versioning์ ๋ํ ์ง์์ ์ถ๊ฐํฉ๋๋ค.
- ARM ์ํคํ ์ฒ์ ๋ฐฑ์๋์์๋ Armv2, Armv2A, Armv3 ๋ฐ Armv3M ๋์ ํ๋ซํผ์ ๋ํ ์ง์์ด ์ค๋จ๋์ด ์ฌ๋ฐ๋ฅธ ์ฝ๋ ์์ฑ์ด ๋ณด์ฅ๋์ง ์์ต๋๋ค. ๋ณต์์ ์์ ์ง์นจ์ ๋ํ ์ฝ๋๋ฅผ ์์ฑํ๋ ๊ธฐ๋ฅ์ด ์ถ๊ฐ๋์์ต๋๋ค.
- X86 ์ํคํ ์ฒ์ ๋ฐฑ์๋์๋ ISA(๋ช ๋ น ์งํฉ ์ํคํ ์ฒ) AMX-FP16, CMPCCXADD, AVX-IFMA, AVX-VNNI-INT8, AVX-NE-CONVERT์ ๋ํ ์ง์์ด ์ถ๊ฐ๋์์ต๋๋ค. RDMSRLIST, RMSRLIST ๋ฐ WRMSRNS ์ง์นจ์ ๋ํ ์ง์์ด ์ถ๊ฐ๋์์ต๋๋ค. "-mcpu=raptorlake", "-mcpu=meteorlake", "-mcpu=emeraldrapids", "-mcpu=sierraforest", "-mcpu=graniterapids" ๋ฐ "-mcpu=grandridge" ์ต์ ์ ๊ตฌํํ์ต๋๋ค.
- LoongArch ํ๋ซํผ์ ๋ํ ๊ณต์ ์ง์์ด ์ถ๊ฐ๋์์ต๋๋ค.
- MIPS, PowerPC ๋ฐ RISC-V ์ํคํ ์ฒ๋ฅผ ์ํ ํฅ์๋ ๋ฐฑ์๋
- LLDB ๋๋ฒ๊ฑฐ์ LoongArch ์ํคํ ์ฒ์ฉ 64๋นํธ ์คํ ํ์ผ ๋๋ฒ๊น ์ง์์ด ์ถ๊ฐ๋์์ต๋๋ค. COFF ๋๋ฒ๊ทธ ๊ธฐํธ ์ฒ๋ฆฌ๊ฐ ๊ฐ์ ๋์์ต๋๋ค. ๋ก๋๋ Windows ๋ชจ๋ ๋ชฉ๋ก์์ ์ค๋ณต DLL ํํฐ๋ง์ ์ ๊ณตํ์ต๋๋ค.
- Libc++ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ์ฃผ์ ์์ ์ C++20 ๋ฐ C++23 ํ์ค์ ์๋ก์ด ๊ธฐ๋ฅ์ ๋ํ ์ง์์ ๊ตฌํํ๋ ๋ฐ ์ค์ ์ ๋์์ต๋๋ค.
- LDD ๋ง์ปค๋ ์ฃผ์ ์ฌ๋ฐฐ์น ์ค์บ๋๊ณผ ์น์ ์ด๊ธฐํ ์์ ์ ๋ณ๋ ฌํํ์ฌ ์ฐ๊ฒฐ ์๊ฐ์ ํฌ๊ฒ ์ค์ ๋๋ค. ZSTD ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ์ฌ ์น์ ์์ถ์ ๋ํ ์ง์์ด ์ถ๊ฐ๋์์ต๋๋ค.
์ถ์ฒ : opennet.ru