GCC 13 컴파일러 μ œν’ˆκ΅° μΆœμ‹œ

13.1λ…„κ°„μ˜ 개발 끝에 무료 GCC 컴파일러 λͺ¨μŒμΈ GCC 13이 μΆœμ‹œλ˜μ—ˆμŠ΅λ‹ˆλ‹€. μ΄λŠ” μƒˆλ‘œμš΄ GCC 13.0.x 브랜치의 첫 번째 μ£Όμš” λ¦΄λ¦¬μŠ€μž…λ‹ˆλ‹€. μƒˆλ‘œμš΄ 릴리슀 번호 체계에 따라 개발 μ€‘μ—λŠ” 버전 13.1이 μ‚¬μš©λ˜μ—ˆμœΌλ©°, GCC 14.0이 μΆœμ‹œλ˜κΈ° 직전에 GCC 14.1의 λΆ„κΈ°κ°€ 이미 λ§Œλ“€μ–΄μ‘ŒλŠ”λ°, μ΄λŠ” λ‹€μŒ μ£Όμš” 릴리슀인 GCC XNUMX의 기반이 될 κ²ƒμž…λ‹ˆλ‹€.

μ£Όμš” λ³€κ²½ 사항 :

  • GCCμ—λŠ” 이제 Modula-2 ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄λ‘œ ν”„λ‘œκ·Έλž¨μ„ λΉŒλ“œν•˜κΈ° μœ„ν•œ ν”„λŸ°νŠΈμ—”λ“œκ°€ ν¬ν•¨λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€. PIM2, PIM3, PIM4 λ°©μ–Έκ³Ό ν•΄λ‹Ή 언어에 λŒ€ν•œ 승인된 ISO ν‘œμ€€μ„ μ€€μˆ˜ν•˜λŠ” 건좕법이 μ§€μ›λ©λ‹ˆλ‹€.
  • gccrs(GCC Rust) ν”„λ‘œμ νŠΈμ—μ„œ μ€€λΉ„ν•œ Rust μ–Έμ–΄ 컴파일러 κ΅¬ν˜„μ„ κ°–μΆ˜ ν”„λŸ°νŠΈμ—”λ“œκ°€ GCC μ†ŒμŠ€ νŠΈλ¦¬μ— μΆ”κ°€λ˜μ—ˆμŠ΅λ‹ˆλ‹€. ν˜„μž¬ ν˜•νƒœμ˜ ν¬νŠΈμ—”λ“œλŠ” μ‹€ν—˜μš©μœΌλ‘œ ν‘œμ‹œλ˜μ–΄ 있으며 기본적으둜 λΉ„ν™œμ„±ν™”λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€. ν”„λŸ°νŠΈμ—”λ“œκ°€ μ€€λΉ„λ˜λ©΄(λ‹€μŒ 릴리슀 μ˜ˆμ •) LLVM μž‘μ—…μ„ μ‚¬μš©ν•˜μ—¬ λΉŒλ“œλœ rustc 컴파일러λ₯Ό μ„€μΉ˜ν•˜μ§€ μ•Šκ³ λ„ ν‘œμ€€ GCC νˆ΄μ²΄μΈμ„ μ‚¬μš©ν•˜μ—¬ Rust ν”„λ‘œκ·Έλž¨μ„ μ»΄νŒŒμΌν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • LTO(Link Time Optimization) λ©”μ»€λ‹ˆμ¦˜μ€ μ—¬λŸ¬ μŠ€λ ˆλ“œμ—μ„œ 병렬 λΉŒλ“œ 싀행을 μ΅œμ ν™”ν•˜κΈ° μœ„ν•΄ GNU make ν”„λ‘œμ νŠΈμ—μ„œ κ΄€λ¦¬ν•˜λŠ” jobserverλ₯Ό μ§€μ›ν•˜λ„λ‘ ν™•μž₯λ˜μ—ˆμŠ΅λ‹ˆλ‹€. GCCμ—μ„œ jobserverλŠ” 전체 ν”„λ‘œκ·Έλž¨(WPA, 전체 ν”„λ‘œκ·Έλž¨ 뢄석)의 λ§₯λ½μ—μ„œ LTO μ΅œμ ν™” 쀑에 μž‘μ—…μ„ λ³‘λ ¬ν™”ν•˜λŠ” 데 μ‚¬μš©λ©λ‹ˆλ‹€. 기본적으둜 λͺ…λͺ…λœ νŒŒμ΄ν”„(--jobserver-style=fifo)λŠ” jobserver와 ν†΅μ‹ ν•˜λŠ” 데 μ‚¬μš©λ©λ‹ˆλ‹€.
  • 정적 뢄석기(-fanalyzer)λŠ” "-Wanalyzer-out-of-bounds", "-Wanalyzer-allocation-size", "-Wanalyzer-deref-before-check", "-Wanalyzer-infinite-recursion", "-Wanalyzer-jump-through-null", "-Wanalyzer-va-list-leak"λ₯Ό ν¬ν•¨ν•˜μ—¬ 20개의 μƒˆλ‘œμš΄ 진단 검사λ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€.
  • JSON을 기반으둜 SARIF ν˜•μ‹μœΌλ‘œ 진단 κ²°κ³Όλ₯Ό 좜λ ₯ν•˜λŠ” κΈ°λŠ₯을 κ΅¬ν˜„ν–ˆμŠ΅λ‹ˆλ‹€. μƒˆλ‘œμš΄ ν˜•μ‹μ€ 정적 뢄석 κ²°κ³Ό(GCC-fanalyzer)λ₯Ό μ–»λŠ” 데 μ‚¬μš©ν•  수 있으며, κ²½κ³  및 였λ₯˜μ— λŒ€ν•œ 정보λ₯Ό μ–»λŠ” 데도 μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. "-fdiagnostics-format=sarif-stderr|sarif-file|json-stderr|json|json-file" μ˜΅μ…˜μ„ 톡해 ν™œμ„±ν™”λ˜λ©°, "json" μ˜΅μ…˜μ΄ ν¬ν•¨λœ 경우 JSON ν˜•μ‹μ˜ GCC νŠΉμ • λ³€ν˜•μœΌλ‘œ 좜λ ₯λ©λ‹ˆλ‹€.
  • C23 C ν‘œμ€€μ— μ •μ˜λœ μ—¬λŸ¬ κΈ°λŠ₯이 κ΅¬ν˜„λ˜μ—ˆμŠ΅λ‹ˆλ‹€. μ—¬κΈ°μ—λŠ” 널 포인터λ₯Ό μ •μ˜ν•˜κΈ° μœ„ν•œ nullptr μƒμˆ˜, κ°€λ³€ 리슀트의 μ‚¬μš© κ°„μ†Œν™”, μ—΄κ±°ν˜•μ˜ κΈ°λŠ₯ ν™•μž₯, noreturn 속성, 객체 μ •μ˜ μ‹œ constexpr 및 auto μ‚¬μš© ν—ˆμš©, typeof 및 typeof_unqual μ—°μ‚°μž, μƒˆλ‘œμš΄ alignas, alignof, bool, false, static_assert, thread_local 및 true ν‚€μ›Œλ“œ, μ΄ˆκΈ°ν™” 쀑에 빈 κ΄„ν˜Έ μ§€μ • ν—ˆμš© 등이 μžˆμŠ΅λ‹ˆλ‹€.
  • C++23 ν‘œμ€€μ— μ •μ˜λœ 일뢀 κΈ°λŠ₯이 κ΅¬ν˜„λ˜μ—ˆμŠ΅λ‹ˆλ‹€. μ—¬κΈ°μ—λŠ” 볡합 ν‘œν˜„μ‹μ˜ 끝에 λ ˆμ΄λΈ”μ„ λΆ™μ΄λŠ” κΈ°λŠ₯, char8_t μœ ν˜•κ³Όμ˜ ν˜Έν™˜μ„±, #warning μ „μ²˜λ¦¬κΈ° μ§€μ‹œμ–΄, κ΅¬λΆ„λœ (\u{}, \o{}, \x{}) μ΄μŠ€μΌ€μ΄ν”„ μ‹œν€€μŠ€μ™€ 이름이 μ§€μ •λœ ('\N{LATIN CAPITAL LETTER A}') μ΄μŠ€μΌ€μ΄ν”„ μ‹œν€€μŠ€, 정적 μ—°μ‚°μž(), 정적 μ—°μ‚°μž[], ν‘œν˜„μ‹ λ‚΄μ˜ 등식 μ—°μ‚°μž, constexpr μ‚¬μš©μ— λŒ€ν•œ 일뢀 μ œν•œ 제거, μ†ŒμŠ€ ν…μŠ€νŠΈμ—μ„œ UTF-8 지원 등이 μžˆμŠ΅λ‹ˆλ‹€.
  • libstdc++λŠ” 헀더 파일 지원을 μΆ”κ°€ν•˜λŠ” λ“± C++20 및 C++23 ν‘œμ€€μ— λŒ€ν•œ μ‹€ν—˜μ  지원을 κ°œμ„ ν–ˆμŠ΅λ‹ˆλ‹€. 및 std::format, 헀더 파일 κΈ°λŠ₯이 ν™•μž₯λ˜μ—ˆμŠ΅λ‹ˆλ‹€. , μΆ”κ°€ 뢀동 μ†Œμˆ˜μ  μœ ν˜• μΆ”κ°€, 헀더 파일 κ΅¬ν˜„ 그리고 .
  • 파일 μ„€λͺ…μžκ°€ μ •μˆ˜ λ³€μˆ˜λ‘œ μ „λ‹¬λœλ‹€λŠ” 것을 λ¬Έμ„œν™”ν•˜κΈ° μœ„ν•΄ μƒˆλ‘œμš΄ ν•¨μˆ˜ 속성이 μΆ”κ°€λ˜μ—ˆμŠ΅λ‹ˆλ‹€: "__attribute__((fd_arg(N)))", "__attribute__((fd_arg_read(N)))", 및 "__attribute__((fd_arg_write(N)))". μ§€μ •λœ 속성은 정적 뢄석기(-fanalyzer)μ—μ„œ 파일 μ„€λͺ…μžμ™€ κ΄€λ ¨λœ 잘λͺ»λœ μž‘μ—…μ„ κ°μ§€ν•˜λŠ” 데 μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • μ»΄νŒŒμΌλŸ¬μ—κ²Œ ν‘œν˜„μ‹μ΄ 참이며 μ»΄νŒŒμΌλŸ¬κ°€ ν‘œν˜„μ‹μ„ ν‰κ°€ν•˜μ§€ μ•Šκ³ λ„ 이 사싀을 μ‚¬μš©ν•  수 μžˆλ‹€λŠ” 것을 μ•Œλ €μ£ΌλŠ” 데 μ‚¬μš©ν•  수 μžˆλŠ” μƒˆλ‘œμš΄ 속성 "__attribute__((assume(EXPR)))"κ°€ μΆ”κ°€λ˜μ—ˆμŠ΅λ‹ˆλ‹€.
  • κ΅¬μ‘°μ²΄μ—μ„œ μœ μ—°ν•œ λ°°μ—΄ μš”μ†Œλ₯Ό μ²˜λ¦¬ν•  λ•Œ λ™μž‘μ„ μ„ νƒν•˜κΈ° μœ„ν•΄ "-fstrict-flex-arrays=[level]" ν”Œλž˜κ·Έλ₯Ό μΆ”κ°€ν–ˆμŠ΅λ‹ˆλ‹€(μœ μ—°ν•œ λ°°μ—΄ 멀버, ꡬ쑰체 끝에 μžˆλŠ” μ •μ˜λ˜μ§€ μ•Šμ€ 크기의 λ°°μ—΄, 예: "int b[]").
  • μ—΄κ±°ν˜•κ³Ό μ •μˆ˜ν˜•μ΄ μΌμΉ˜ν•˜μ§€ μ•ŠλŠ” 경우 κ²½κ³ λ₯Ό 좜λ ₯ν•˜κΈ° μœ„ν•΄ "-Wenum-int-mismatch" ν”Œλž˜κ·Έλ₯Ό μΆ”κ°€ν–ˆμŠ΅λ‹ˆλ‹€.
  • Fortran ν”„λŸ°νŠΈμ—”λ“œλŠ” 마무리 지원을 μ™„λ²½ν•˜κ²Œ κ΅¬ν˜„ν•©λ‹ˆλ‹€.
  • Go μ–Έμ–΄μ˜ ν”„λŸ°νŠΈμ—”λ“œλŠ” 일반 ν•¨μˆ˜μ™€ μœ ν˜•μ„ μ§€μ›ν•˜λ„λ‘ μ—…λ°μ΄νŠΈλ˜μ—ˆμœΌλ©°, 이제 Go 1.18 μ–Έμ–΄μ˜ νŒ¨ν‚€μ§€μ™€ ν˜Έν™˜λ©λ‹ˆλ‹€.
  • AArch64 μ•„ν‚€ν…μ²˜μ˜ λ°±μ—”λ“œλŠ” Ampere-1A(ampere1a), Arm Cortex-A715(cortex-a715), Arm Cortex-X1C(cortex-x1c), Arm Cortex-X3(cortex-x3), Arm Neoverse V2(neoverse-v2) CPU에 λŒ€ν•œ 지원을 κ΅¬ν˜„ν•©λ‹ˆλ‹€. "-march=" μ˜΅μ…˜μ— "-march=" 인수 "armv9.1-a", "armv9.2-a" 및 "armv9.3-a"에 λŒ€ν•œ 지원이 μΆ”κ°€λ˜μ—ˆμŠ΅λ‹ˆλ‹€. FEAT_LRCPC, FEAT_CSSC 및 FEAT_LSE2 ν”„λ‘œμ„Έμ„œ ν™•μž₯에 λŒ€ν•œ 지원이 μΆ”κ°€λ˜μ—ˆμŠ΅λ‹ˆλ‹€.
  • ARM μ•„ν‚€ν…μ²˜ λ°±μ—”λ“œλŠ” 이제 STAR-MC1(star-mc1), Arm Cortex-X1C(cortex-x1c), Arm Cortex-M85(cortex-m85) CPUλ₯Ό μ§€μ›ν•©λ‹ˆλ‹€.
  • x86 λ°±μ—”λ“œλŠ” 이제 Intel Raptor Lake, Meteor Lake, Sierra Forest, Grand Ridge, Emerald Rapids, Granite Rapids 및 AMD Zen 4(znver4) ν”„λ‘œμ„Έμ„œλ₯Ό μ§€μ›ν•©λ‹ˆλ‹€. μ œμ•ˆλœ Intel ν”„λ‘œμ„Έμ„œ λͺ…λ Ήμ–΄ μ„ΈνŠΈ μ•„ν‚€ν…μ²˜ ν™•μž₯ AVX-IFMA, AVX-VNNI-INT8, AVX-NE-CONVERT, CMPccXADD, AMX-FP16, PREFETCHI, RAO-INT 및 AMX-COMPLEXλ₯Ό κ΅¬ν˜„ν•©λ‹ˆλ‹€. SSE2κ°€ μžˆλŠ” μ‹œμŠ€ν…œμ˜ C 및 C++의 경우 __bf16 μœ ν˜•μ΄ μ œκ³΅λ©λ‹ˆλ‹€.
  • AMD Radeon GPU μ½”λ“œ 생성(GCN) λ°±μ—”λ“œλŠ” 이제 OpenMP/OpenACC μ„±λŠ₯을 κ°œμ„ ν•˜κΈ° μœ„ν•΄ AMD Instinct MI200 가속기λ₯Ό μ‚¬μš©ν•  수 μžˆλ„λ‘ μ§€μ›ν•©λ‹ˆλ‹€. SIMD λͺ…λ Ήμ–΄λ₯Ό μ‚¬μš©ν•˜μ—¬ 벑터화λ₯Ό κ°œμ„ ν–ˆμŠ΅λ‹ˆλ‹€.
  • LoongArch ν”Œλž«νΌμ˜ λ°±μ—”λ“œ κΈ°λŠ₯이 크게 ν™•μž₯λ˜μ—ˆμŠ΅λ‹ˆλ‹€.
  • RISC-V λ°±μ—”λ“œλŠ” 이제 T-Head의 XuanTie C906(thead-c906) CPU에 λŒ€ν•œ 지원을 μΆ”κ°€ν•©λ‹ˆλ‹€. RISC-V Vector Extension Intrinsic 0.11 사양에 μ •μ˜λœ 벑터 ν”„λ‘œμ„Έμ„œμ— λŒ€ν•œ 지원이 κ΅¬ν˜„λ˜μ—ˆμŠ΅λ‹ˆλ‹€. 30개의 RISC-V 사양 ν™•μž₯에 λŒ€ν•œ 지원이 μΆ”κ°€λ˜μ—ˆμŠ΅λ‹ˆλ‹€.
  • -shared μ˜΅μ…˜μœΌλ‘œ 곡유 객체λ₯Ό λΉŒλ“œν•  λ•Œ -Ofast, -ffast-math λ˜λŠ” -funsafe-math-optimizationsκ°€ ν™œμ„±ν™”λœ 경우 뢀동 μ†Œμˆ˜μ  ν™˜κ²½μ„ μΆ”κ°€ν•œ ν›„ μ‹œμž‘ μ½”λ“œ μΆ”κ°€κ°€ μ€‘λ‹¨λ˜μ—ˆμŠ΅λ‹ˆλ‹€.
  • DWARF 디버그 ν˜•μ‹μ— λŒ€ν•œ 지원은 거의 λͺ¨λ“  κ΅¬μ„±μ—μ„œ κ΅¬ν˜„λ©λ‹ˆλ‹€.
  • Zstandard μ•Œκ³ λ¦¬μ¦˜μ„ μ‚¬μš©ν•˜μ—¬ 디버그 정보λ₯Ό μ••μΆ•ν•˜κΈ° μœ„ν•΄ "-gz=zstd" μ˜΅μ…˜μ΄ μΆ”κ°€λ˜μ—ˆμŠ΅λ‹ˆλ‹€. λ ˆκ±°μ‹œ 디버그 정보 μ••μΆ• λͺ¨λ“œ "-gz=zlib-gnu"에 λŒ€ν•œ 지원이 μ€‘λ‹¨λ˜μ—ˆμŠ΅λ‹ˆλ‹€.
  • OpenMP 5.2(Open Multi-Processing)에 λŒ€ν•œ 초기 지원을 μΆ”κ°€ν•˜κ³ , 곡유 λ©”λͺ¨λ¦¬μ™€ 벑터화 μž₯치(SIMD)λ₯Ό κ°–μΆ˜ λ©€ν‹° μ½”μ–΄ 및 ν•˜μ΄λΈŒλ¦¬λ“œ(CPU+GPU/DSP) μ‹œμŠ€ν…œμ— 병렬 ν”„λ‘œκ·Έλž˜λ° 방법을 μ μš©ν•˜κΈ° μœ„ν•œ API와 방법을 μ •μ˜ν•˜λŠ” OpenMP 5.0 및 5.1 ν‘œμ€€μ˜ κ΅¬ν˜„μ„ κ³„μ†ν–ˆμŠ΅λ‹ˆλ‹€.
  • 1980λ…„λŒ€μ— λ§Œλ“€μ–΄μ Έ dbx λ””λ²„κ±°μ—μ„œ μ‚¬μš©λ˜λ˜ λ ˆκ±°μ‹œ 디버그 정보 μ €μž₯ ν˜•μ‹μΈ "STABS"( -gstabs 및 -gxcoff μ˜΅μ…˜μœΌλ‘œ ν™œμ„±ν™”)에 λŒ€ν•œ 지원이 μ€‘λ‹¨λ˜μ—ˆμŠ΅λ‹ˆλ‹€.
  • Solaris 11.3에 λŒ€ν•œ 지원이 μ€‘λ‹¨λ˜μ—ˆμŠ΅λ‹ˆλ‹€(이 ν”Œλž«νΌμ„ μ§€μ›ν•˜λŠ” μ½”λ“œλŠ” ν–₯ν›„ λ¦΄λ¦¬μŠ€μ—μ„œ 제거될 μ˜ˆμ •μž…λ‹ˆλ‹€).

좜처 : opennet.ru

μ½”λ©˜νŠΈλ₯Ό μΆ”κ°€