XNUMX๊ฐ์๊ฐ์ ๊ฐ๋ฐ ๋์
์ ๋ฆด๋ฆฌ์ค์ ์ฃผ์ ๋ณ๊ฒฝ ์ฌํญ์
- ์ถ์ ๊ตฌ๋ฌธ ํธ๋ฆฌ๋ฅผ ๋ณต์ํ๋ ๊ธฐ๋ฅ์ด ์ถ๊ฐ๋์์ต๋๋ค(
AST ) ์์๋ C++ ์ฝ๋์ ๋ํ ์ค๋ฅ ์ง๋จ์ ์ฌ์ฉํ ์ ์์ผ๋ฉฐ clang-tidy ๋ฐ clangd์ ๊ฐ์ ์ธ๋ถ ์ ํธ๋ฆฌํฐ์ ์ถ๊ฐ ์ ๋ณด๋ฅผ ์ ๊ณตํฉ๋๋ค. ์ด ๊ธฐ๋ฅ์ C++ ์ฝ๋์ ๋ํด ๊ธฐ๋ณธ์ ์ผ๋ก ํ์ฑํ๋์ด ์์ผ๋ฉฐ "-Xclang -f[no-]recovery-ast" ์ต์ ์ ํตํด ์ ์ด๋ฉ๋๋ค. - ์๋ก์ด ์ง๋จ ๋ชจ๋๊ฐ ์ถ๊ฐ๋์์ต๋๋ค.
- "-Wpointer-to-int-cast"๋ ๊ฐ๋ฅํ ๋ชจ๋ ๊ฐ์ ์์ฉํ์ง ์๋ ์ ์ ์ ํ int์ ๋ํ ํฌ์ธํฐ ์บ์คํ ์ ๋ํ ๊ฒฝ๊ณ ๊ทธ๋ฃน์ ๋๋ค.
- "-Wuninitialized-const-reference" - "const" ์์ฑ์ด ์๋ ์ฐธ์กฐ ์ธ์๋ฅผ ํ์ฉํ๋ ํจ์ ๋งค๊ฐ๋ณ์์ ์ด๊ธฐํ๋์ง ์์ ๋ณ์๋ฅผ ์ ๋ฌํ๋ ๊ฒ์ ๋ํ ๊ฒฝ๊ณ ์ ๋๋ค.
- "-Wimplicit-const-int-float-conversion" - ์ค์ ์์๋ฅผ ์ ์ ์ ํ์ผ๋ก ์์์ ์ผ๋ก ๋ณํํ๋ ๊ฒ์ ๋ํ ๊ฒฝ๊ณ ๊ฐ ๊ธฐ๋ณธ์ ์ผ๋ก ํ์ฑํ๋ฉ๋๋ค.
- ARM ํ๋ซํผ์ ๊ฒฝ์ฐ ์ปดํ์ผ๋ฌ์ ๋ด์ฅ๋ C ํจ์๊ฐ ์ ๊ณต๋ฉ๋๋ค(
๋ด์ฌ ), ํจ์จ์ ์ธ ๋ฒกํฐ ๋ช ๋ น์ด Arm v8.1-M MVE ๋ฐ CDE๋ก ๋์ฒด๋์์ต๋๋ค. ์ฌ์ฉ ๊ฐ๋ฅํ ๊ธฐ๋ฅ์ ํค๋ ํ์ผ arm_mve.h ๋ฐ arm_cde.h์ ์ ์๋์ด ์์ต๋๋ค. -
์ถ๊ฐ๋จ ํ์ฅ๋ ์ ์ ์ ํ ์ธํธ _ExtInt(N)๋ฅผ ์ฌ์ฉํ๋ฉด XNUMX์ ๊ฑฐ๋ญ์ ๊ณฑ์ด ์๋ ์ ํ์ ์์ฑํ ์ ์์ผ๋ฉฐ FPGA/HLS์์ ํจ์จ์ ์ผ๋ก ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.์๋ฅผ ๋ค๋ฉด , _ExtInt(7)์ 7๋นํธ๋ก ๊ตฌ์ฑ๋ ์ ์ํ์ ์ ์ํฉ๋๋ค. - ARM SVE(Scalable Vector Extension) ๋ช
๋ น์ ๊ธฐ๋ฐ์ผ๋ก ๋ด์ฅ C ํจ์์ ๋ํ ์ง์์ ์ ์ํ๋ ๋งคํฌ๋ก๊ฐ ์ถ๊ฐ๋์์ต๋๋ค.
__ARM_FEATURE_SVE, __ARM_FEATURE_SVE_BF16,
__ARM_FEATURE_SVE_MATMUL_FP32, __ARM_FEATURE_SVE_MATMUL_FP64,
__ARM_FEATURE_SVE_MATMUL_INT8,
__ARM_FEATURE_SVE2, __ARM_FEATURE_SVE2_AES,
__ARM_FEATURE_SVE2_BITPERM,
__ARM_FEATURE_SVE2_SHA3,
__ARM_FEATURE_SVE2_SM4. ์๋ฅผ ๋ค์ด __ARM_FEATURE_SVE ๋งคํฌ๋ก๋ ๋ช ๋ น์ค ์ต์ "-march=armv64-a+sve"๋ฅผ ์ค์ ํ์ฌ AArch8 ์ฝ๋๋ฅผ ์์ฑํ ๋ ์ ์๋ฉ๋๋ค. - "-O" ํ๋๊ทธ๋ ์ด์ "-O1" ๋์ "-O2" ์ต์ ํ ๋ชจ๋๋ก ์๋ณ๋ฉ๋๋ค.
- ์๋ก์ด ์ปดํ์ผ๋ฌ ํ๋๊ทธ๊ฐ ์ถ๊ฐ๋์์ต๋๋ค.
- "-fstack-clash-protection" - ๋ณดํธ๋ฅผ ํ์ฑํํฉ๋๋ค.
์คํ๊ณผ ํ์ ๊ต์ฐจ์ . - "-ffp-Exception-behavior={ignore,maytrap,strict}" - ๋ถ๋ ์์์ ์ซ์์ ๋ํ ์์ธ ์ฒ๋ฆฌ๊ธฐ ๋ชจ๋๋ฅผ ์ ํํ ์ ์์ต๋๋ค.
- "-ffp-model={precise,strict,fast}" - ๋ถ๋ ์์์ ์ซ์์ ๋ํ ์ผ๋ จ์ ํน์ ์ต์ ์ ๋ํ ์ก์ธ์ค๋ฅผ ๋จ์ํํฉ๋๋ค.
- "-fpch-codegen" ๋ฐ "-fpch-debuginfo"๋ ์ฝ๋ ๋ฐ debuginfo์ ๋ํ ๋ณ๋์ ๊ฐ์ฒด ํ์ผ์ ์ฌ์ฉํ์ฌ ๋ฏธ๋ฆฌ ์ปดํ์ผ๋ ํค๋(PCH)๋ฅผ ์์ฑํฉ๋๋ค.
- ์ปค๋ฒ๋ฆฌ์ง ํ ์คํธ ํ์ดํธ๋ฆฌ์คํธ์ ๋ธ๋๋ฆฌ์คํธ๋ฅผ ํ์ธํ๊ธฐ ์ํ "-fsanitize-coverage-allowlist" ๋ฐ "-fsanitize-coverage-blocklist".
- "-mtls-size={12,24,32,48}" TLS(์ค๋ ๋ ๋ก์ปฌ ์ ์ฅ์) ํฌ๊ธฐ๋ฅผ ์ ํํฉ๋๋ค.
- ์คํ์ ์ธ RISC-V ํ์ฅ์ ํ์ฑํํ๋ ค๋ฉด "-menable-experimental-extension"์ ์ฌ์ฉํ์ธ์.
- "-fstack-clash-protection" - ๋ณดํธ๋ฅผ ํ์ฑํํฉ๋๋ค.
- C์ ๊ธฐ๋ณธ ๋ชจ๋๋ "-fno-common"์ด๋ฉฐ, ์ด๋ฅผ ํตํด ์ผ๋ถ ํ๋ซํผ์์ ์ ์ญ ๋ณ์์ ๋ณด๋ค ํจ์จ์ ์ผ๋ก ์ก์ธ์คํ ์ ์์ต๋๋ค.
- ๊ธฐ๋ณธ ๋ชจ๋ ์บ์๊ฐ /tmp์์ ~/.cache ๋๋ ํ ๋ฆฌ๋ก ์ด๋๋์์ต๋๋ค. ์ฌ์ ์ํ๋ ค๋ฉด "-fmodules-cache-path=" ํ๋๊ทธ๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
- ๊ธฐ๋ณธ C ์ธ์ด ํ์ค์ด gnu11์์ gnu17๋ก ์ ๋ฐ์ดํธ๋์์ต๋๋ค.
- GNU C ํ์ฅ์ ๋ํ ์๋น ์ง์ ์ถ๊ฐ "
asm ์ธ๋ผ์ธ ยป ์ด์ ๋ธ๋ฌ ์ฝ์ ๋ฌผ์ ์ถ๊ฐํฉ๋๋ค. ํ์ฅ ํ๋ก๊ทธ๋จ์ ์์ง ๋ถ์ ์ค์ด์ง๋ง ์ด๋ค ๋ฐฉ์์ผ๋ก๋ ์ฒ๋ฆฌ๋์ง ์์ต๋๋ค. - OpenCL ๋ฐ CUDA ์ง์๊ณผ ๊ด๋ จ๋ ๊ธฐ๋ฅ์ด ํ์ฅ๋์์ต๋๋ค. OpenCL 2.0 ๋ธ๋ก ์ง๋จ์ ๋ํ ์ง์์ด ์ถ๊ฐ๋๊ณ ์๋ก์ด OpenMP 5.0 ๊ธฐ๋ฅ์ด ๊ตฌํ๋์์ต๋๋ค.
- extern "C" ๋ฐ extern "C++" ๋ธ๋ก ๋ด ์ ๋ ฌ์ ์ํด clang-format ์ ํธ๋ฆฌํฐ์ IndentExternBlock ์ต์ ์ด ์ถ๊ฐ๋์์ต๋๋ค.
- ์ ์ ๋ถ์๊ธฐ๋ C++์์ ์์๋ ์์ฑ์์ ์ฒ๋ฆฌ๋ฅผ ๊ฐ์ ํ์ต๋๋ค. ์ ๊ธ์ ํ์ธํ๋ alpha.core.C11Lock ๋ฐ alpha.fuchsia.Lock, putenv์ ์์ ํ์ง ์์ ์ฌ์ฉ์ ๊ฐ์งํ๋ alpha.security.cert.pos.34c, ์ ์ ์๋ ์ ํ์ ๋ฌธ์ ๋ฅผ ๊ฐ์งํ๋ webkit.NoUncountedMemberChecker ๋ฐ webkit.RefCntblBaseVirtualDtor๋ฅผ ์ถ๊ฐํ์ต๋๋ค. .cplusplus .SmartPtr์ null ์ค๋งํธ ํฌ์ธํฐ ์ญ์ฐธ์กฐ๋ฅผ ํ์ธํฉ๋๋ค.
- ๋ฆฐํฐ์์ clang-tidy
์ถ๊ฐ ์๋ก์ด ์ํ์ ์๋น ๋ถ๋ถ. - clangd ์บ์ฑ ์๋ฒ(Clang Server)์ ์ฑ๋ฅ์ด ํฅ์๋๊ณ ์๋ก์ด ์ง๋จ ๊ธฐ๋ฅ์ด ์ถ๊ฐ๋์์ต๋๋ค.
์ฃผ์
- ๋น๋ ์์คํ ์ด Python 3์ ์ฌ์ฉํ๋๋ก ์ ํ๋์์ต๋๋ค. Python 3์ ์ฌ์ฉํ ์ ์๋ ๊ฒฝ์ฐ Python 2๋ฅผ ์ฌ์ฉํ๋๋ก ๋กค๋ฐฑํ ์ ์์ต๋๋ค.
- Go ์ธ์ด(llgo)์ฉ ์ปดํ์ผ๋ฌ๊ฐ ํฌํจ๋ ํ๋ฐํธ ์๋๋ ๋ฆด๋ฆฌ์ค์์ ์ ์ธ๋๋ฉฐ ํฅํ ์ฌ๊ตฌ์ฑ๋ ์ ์์ต๋๋ค.
- ๋ฒกํฐํ ํธ์ถ์ ์ํ ์ค์นผ๋ผ ํจ์์ ๋ฒกํฐ ํจ์ ๊ฐ์ ๋งคํ์ ์ค๋ช ํ๊ธฐ ์ํด ๋ฒกํฐ-ํจ์-abi-๋ณํ ์์ฑ์ด IR(์ค๊ฐ ํํ)์ ์ถ๊ฐ๋์์ต๋๋ค. llvm::VectorType์๋ llvm::FixedVectorType๊ณผ llvm::ScalableVectorType์ด๋ผ๋ ๋ ๊ฐ์ง ๋ณ๋์ ๋ฒกํฐ ์ ํ์ด ์์ต๋๋ค.
- udef ๊ฐ์ ๊ธฐ์ค์ผ๋ก ๋ถ๊ธฐํ๊ณ undef ๊ฐ์ ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํจ์์ ์ ๋ฌํ๋ ๊ฒ์ ์ ์๋์ง ์์ ๋์์ผ๋ก ์ธ์๋ฉ๋๋ค. ์์
memset/memcpy/memmove๋ undef ํฌ์ธํฐ ์ ๋ฌ์ ํ์ฉํ์ง๋ง ํฌ๊ธฐ๊ฐ ์๋ ๋งค๊ฐ๋ณ์๊ฐ XNUMX์ธ ๊ฒฝ์ฐ. - LLJIT์๋ LLJIT::initialize ๋ฐ LLJIT::deinitialize ๋ฉ์๋๋ฅผ ํตํด ์ ์ ์ด๊ธฐํ๋ฅผ ์ํํ๊ธฐ ์ํ ์ง์์ด ์ถ๊ฐ๋์์ต๋๋ค. StaticLibraryDefinitionGenerator ํด๋์ค๋ฅผ ์ฌ์ฉํ์ฌ JITDylib์ ์ ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ถ๊ฐํ๋ ๊ธฐ๋ฅ์ด ๊ตฌํ๋์์ต๋๋ค. ๋ค์์ ๋ํ C API๋ฅผ ์ถ๊ฐํ์ต๋๋ค.
ORCv2 (JIT ์ปดํ์ผ๋ฌ ๊ตฌ์ถ์ ์ํ API) - Cortex-A64, Cortex-A34, Cortex-A77 ๋ฐ Cortex-X78 ํ๋ก์ธ์์ ๋ํ ์ง์์ด AArch1 ์ํคํ ์ฒ์ ๋ฐฑ์๋์ ์ถ๊ฐ๋์์ต๋๋ค. RMv8.2-ECV(Enhanced Counter Virtualization), ARMv16-FGT(Fine Grained Traps), ARMv16-AMU(Activity Monitors virtualization)๋ฅผ ํฌํจํ ARMv8.6-BF8.6(BFloat8.6) ๋ฐ ARMv8.6-A ํ์ฅ์ด ๊ตฌํ๋์์ต๋๋ค. ๋ฐ ARMv8.0-DGH(๋ฐ์ดํฐ ์์ง ํํธ). SVE ๋ฒกํฐ ๋ช ๋ น์ด์ ๋ํ ๋ด์ฅ ํจ์ ๋ฐ์ธ๋ฉ์ ์ํ ์ฝ๋๋ฅผ ์์ฑํ๋ ๊ธฐ๋ฅ์ด ์ ๊ณต๋ฉ๋๋ค.
- Cortex-M55, Cortex-A77, Cortex-A78 ๋ฐ Cortex-X1 ํ๋ก์ธ์์ ๋ํ ์ง์์ด ARM ์ํคํ
์ฒ์ ๋ฐฑ์๋์ ์ถ๊ฐ๋์์ต๋๋ค. ๊ตฌํ๋ ํ์ฅ
Armv8.6-A ํ๋ ฌ ๊ณฑ์ ๋ฐ RMv8.2-AA32BF16 BFloat16. - POWER10 ํ๋ก์ธ์์ ๋ํ ์ฝ๋ ์์ฑ ์ง์์ด PowerPC ์ํคํ ์ฒ์ ๋ฐฑ์๋์ ์ถ๊ฐ๋์์ต๋๋ค. ๋ฃจํ ์ต์ ํ๊ฐ ํ์ฅ๋์์ผ๋ฉฐ ๋ถ๋ ์์์ ์ง์์ด ๊ฐ์ ๋์์ต๋๋ค.
- RISC-V ์ํคํ ์ฒ์ ๋ฐฑ์๋๋ ์์ง ๊ณต์์ ์ผ๋ก ์น์ธ๋์ง ์์ ์คํ์ ์ธ ํ์ฅ ๋ช ๋ น ์ธํธ๋ฅผ ์ง์ํ๋ ํจ์น๋ฅผ ํ์ฉํฉ๋๋ค.
- AVR ์ํคํ ์ฒ์ ๋ฐฑ์๋๋ ์คํ ๋ฒ์ฃผ์์ ๊ธฐ๋ณธ ๋ฐฐํฌํ์ ํฌํจ๋ ์์ ๋ฒ์ฃผ๋ก ์ ํ๋์์ต๋๋ค.
- x86 ์ํคํ
์ฒ์ ๋ฐฑ์๋๋ Intel AMX ๋ฐ TSXLDTRK ๋ช
๋ น์ด๋ฅผ ์ง์ํฉ๋๋ค. ๊ณต๊ฒฉ์ ๋ํ ๋ณดํธ ๊ธฐ๋ฅ์ด ์ถ๊ฐ๋์์ต๋๋ค.
LVI (๋ก๋ ๊ฐ ์ฃผ์ ) ๋ฐ ์ผ๋ฐ์ ์ธ ์ถ์ธก ์คํ ๋ถ์์ฉ ์ต์ ๋ฉ์ปค๋์ฆ์ ๊ตฌํํ์ฌ CPU์์ ์์ ์ ์ถ์ธก ์คํ์ผ๋ก ์ธํ ๊ณต๊ฒฉ์ ์ฐจ๋จํฉ๋๋ค. - SystemZ ์ํคํ ์ฒ์ ๋ฐฑ์๋์ MemorySanitizer ๋ฐ LeakSanitizer์ ๋ํ ์ง์์ด ์ถ๊ฐ๋์์ต๋๋ค.
- Libc++์ ์ํ ์์๊ฐ ํฌํจ๋ ํค๋ ํ์ผ์ ๋ํ ์ง์์ด ์ถ๊ฐ๋์์ต๋๋ค.
. -
ํผ์ง๋ LLD ๋ง์ปค ๊ธฐ๋ฅ. ์ถ๊ฐ๋ ์ต์ "--lto-emit-asm", "--lto-whole-program-visibility", "-print-archive-stats", "-shuffle-sections", "๋ฅผ ํฌํจํ์ฌ ELF ํ์์ ๋ํ ์ง์์ด ํฅ์๋์์ต๋๋ค. -thinlto- ๋จ์ผ ๋ชจ๋", "-unique", "-rosegment", "-threads=N". ์ถ์ ์ ํ์ผ์ ์ ์ฅํ๋ "--time-trace" ์ต์ ์ด ์ถ๊ฐ๋์์ต๋๋ค. ๊ทธ๋ฌ๋ฉด Chrome์ chrome://tracing ์ธํฐํ์ด์ค๋ฅผ ํตํด ๋ถ์ํ ์ ์์ต๋๋ค.
์ถ์ฒ : opennet.ru