6장. 컴파일러 및 개발 도구


다음 장에서는 RHEL 9과 RHEL 10 간의 컴파일러 및 개발 툴에 대한 주요 변경 사항을 설명합니다.

RHEL 10.0에서 사용 가능한 초기 버전

RHEL 10.0에서는 다음 시스템 툴체인 구성 요소를 사용할 수 있습니다.

  • GCC 14.2
  • glibc 2.39
  • Annobin 12.92
  • binutils 2.41

RHEL 10.0에서는 다음 성능 툴과 디버거를 사용할 수 있습니다.

  • GDB 14.2
  • Valgrind 3.24.0
  • SystemTap 5.2
  • Dyninst 12.3.0
  • elfutils 0.192
  • libabigail 2.6

RHEL 10.0에서는 다음과 같은 성능 모니터링 툴을 사용할 수 있습니다.

  • PCP 6.3.7
  • Grafana 10.2.6

RHEL 10.0에서는 다음과 같은 컴파일러 툴 세트를 사용할 수 있습니다.

  • LLVM Toolset 19.1.7
  • Rust Toolset 1.84.1
  • Go Toolset 1.23.2

RHEL 10은 버전 3.30.5에서 cmake 를 제공합니다.

RHEL 10은 cmake 버전 3.30.5와 함께 배포됩니다. 주요 변경 사항은 업스트림 릴리스 노트 를 참조하십시오.

RHEL 10은 버전 1.84.0에 Rust Toolset을 제공합니다.

RHEL 10은 버전 1.84.0의 Rust Toolset과 함께 배포됩니다. 이전에 사용 가능한 버전 1.79.0 이후 주요 개선 사항은 다음과 같습니다.

  • 새로운 LazyCellLazyLock 유형은 처음 사용할 때까지 초기화를 지연합니다. 이렇게 하면 각 인스턴스에 초기화 기능이 포함된 이전 OnceCellOnceLock 유형이 확장됩니다.
  • 표준 라이브러리의 새로운 정렬 구현은 런타임 성능을 개선하고 시간을 컴파일합니다. 또한 비교자가 총 순서를 생성하지 않는 경우를 탐지하여 정렬되지 않은 데이터를 반환하는 대신 패닉을 발생시킵니다.
  • 불투명 반환 유형에 대한 정확한 캡처가 추가되었습니다. 새로운 use<.. > 구문은 부정확한 반환 형식에 사용되는 일반 매개변수와 수명을 지정합니다.
  • const 코드의 많은 새로운 기능이 추가되었습니다. 예를 들면 다음과 같습니다.

    • 부동 소수점 지원
    • 인라인 어셈블리에 대한 const immediates
    • static에 대한 참조
    • 변경 가능한 참조 및 포인터
  • 안전하지 않은 코드에 대한 많은 새로운 기능이 추가되었습니다. 예를 들면 다음과 같습니다.

    • 엄격한 검증 API
    • &Raw 포인터 구문
    • 정적 문제 해결
    • 안전하지 않은 extern 블록에서 안전한 항목 선언
  • 카고 종속성 확인자는 이제 버전을 인식합니다. 종속성 크레이트가 지원되는 최소 Rust 버전을 지정하는 경우, 카르고는 최신 semver-compatible crate 버전을 사용하는 대신 종속성 그래프를 확인할 때 이 정보를 사용합니다.

호환성 노트:

  • WebAssembly 시스템 인터페이스(WASI) 대상은 rust-std-static-wasm32-wasi 에서 rust-std-wasm32-wasip1 로 변경됩니다. 명령줄에서 --target wasm32-wasip1 매개변수를 사용하여 WASI 대상을 선택할 수도 있습니다. 자세한 내용은 Rust의 WASI 대상 업스트림 블로그 게시물의 변경 사항을 참조하십시오.
  • split panic hook 및 panic 처리기 인수 core::panic::PanicInfostd::panic::PanicInfo 는 이제 다른 유형입니다.
  • 이제 uncaught panics을 중단하려면 ABI 경계를 넘어가지 않기 위해 extern "C" 대신 extern "C-unwind" 명령을 사용해야 합니다.

rust Toolset은 롤링 애플리케이션 스트림이며 Red Hat은 최신 버전만 지원합니다. 자세한 내용은 Red Hat Enterprise Linux Application Streams 라이프 사이클 문서를 참조하십시오.

LLVM Toolset은 19.1.7에 제공

LLVM Toolset은 버전 19.1.7이 제공됩니다.

LLVM 컴파일러의 주요 변경 사항:

  • 이제 LLVM에서 디버그 레코드를 사용하여 디버그 정보를 보다 효율적으로 표현합니다.

Clang의 주요 업데이트:

  • C++14 sized deallocation은 기본적으로 활성화되어 있습니다.
  • C++17 지원이 완료되었습니다.
  • C++20 지원 개선, 특히 모듈, 개념 및 CTAD(Class Template Argument Deduction)가 추가되었습니다.
  • C23, C2c, C23 및 C2y 지원이 추가되었습니다.

자세한 내용은 LLVM 릴리스 노트 및 Clang 릴리스 노트를 참조하십시오.

버전 1.23에서 제공되는 Go Toolset

RHEL 10.0은 1.23 버전에서 Go Toolset을 제공합니다. 주요 개선 사항은 다음과 같습니다.

  • for-range 루프는 다음 유형의 Cryostat 함수를 허용합니다.

    • func(func() bool)
    • func(func(K) bool)
    • func(func(K, V) bool)

      Cryostat 인수 함수를 호출하면 for-range 루프에 대한 반복 값이 생성됩니다. 참조 링크는 업스트림 릴리스 노트 를 참조하십시오.

  • Go Toolchain은 Go 팀이 Go Toolchain 사용 및 작동 방식을 이해하는 데 도움이 되는 사용 및 중단 통계를 수집할 수 있습니다. 기본적으로 Go Telemetry는 Telemetry 데이터를 업로드하지 않고 로컬에만 저장합니다. 자세한 내용은 업스트림 Go Telemetry 설명서 를 참조하십시오.
  • go vet 하위 명령에는 참조 파일에서 사용하는 Go 버전에 너무 새로운 기호에 대한 참조를 나타내는 stdversion Analyzer가 포함되어 있습니다.
  • cmdcgo 기능은 -ldflags 옵션을 지원하여 C 링커에 플래그를 전달합니다. go 명령은 매우 큰 CGO_LDFLAGS 환경 변수를 사용할 때 인수 목록을 너무 긴 오류를 방지하기 위해 이 플래그를 자동으로 사용합니다.
  • 추적 유틸리티는 부분적으로 손상된 추적을 허용하고 추적 데이터를 복구하려고 합니다. 이는 충돌의 경우 추적이 충돌로 이어질 수 있기 때문에 특히 유용합니다.
  • 처리되지 않은 패닉 또는 기타 치명적인 오류 후에 런타임에서 출력한 역추적은 goroutine 의 스택 추적을 첫 번째 goroutine 과 구별하기 위해 들여쓰기를 전달합니다.
  • profile-guided 최적화 사용에 대한 컴파일러 빌드 시간 오버헤드가 한 자리 백분율로 단축되었습니다.
  • 새로운 -bindnow 링커 플래그를 사용하면 동적으로 연결된 ELF 바이너리를 빌드할 때 즉시 함수 바인딩을 사용할 수 있습니다.
  • //go:linkname linker 지시문은 더 이상 표준 라이브러리의 내부 기호와 해당 정의에서 //go:linkname 으로 표시되지 않는 런타임을 나타냅니다.
  • 프로그램이 더 이상 Timer 또는 Ticker 를 참조하지 않으면 가비지 컬렉션은 Stop 메서드가 호출되지 않은 경우에도 즉시 정리합니다. 타이머 또는 Ticker 와 연결된 타이머 채널이 이제 용량 0과 호환되지 않습니다. 이렇게 하면 Reset 또는 stop 메서드가 호출될 때마다 호출 후 오래된 값이 전송되거나 수신되지 않습니다.
  • 새로운 고유 패키지는 interning 또는 hash-consing 과 같은 표준 값을 위한 기능을 제공합니다.
  • 새로운 iter 패키지는 사용자 정의 Cryostat와 함께 작동하는 기본 정의를 제공합니다.
  • 슬라이스 패키지는 Cryostat와 함께 작동하는 몇 가지 새로운 기능을 도입합니다.
  • structs 패키지는 메모리 레이아웃과 같이 포함된 struct 유형의 속성을 수정하는 struct 필드에 대한 유형을 제공합니다.
  • 다음 패키지에서는 약간의 변경이 수행됩니다.

    • archive/tar
    • crypto/tls
    • crypto/x509
    • 데이터베이스/sql
    • debug/elf
    • 인코딩/진단
    • go/ast
    • go/types
    • math/rand/v2
    • net
    • net/http
    • net/http/httptest
    • net/netips
    • path/filepath
    • 반영
    • runtime/debug
    • runtime/pprof
    • runtime/trace
    • 슬라이스
    • sync
    • sync/atomic
    • syscall
    • testing/fstest
    • text/template
    • time
    • unicode/utf16

자세한 내용은 업스트림 릴리스 노트 를 참조하십시오.

Go Toolset은 롤링 애플리케이션 스트림이며 Red Hat은 최신 버전만 지원합니다. 자세한 내용은 Red Hat Enterprise Linux Application Streams 라이프 사이클 문서를 참조하십시오. LLVM Toolset은 롤링 애플리케이션 스트림이며 최신 버전만 지원됩니다. 자세한 내용은 Red Hat Enterprise Linux Application Streams 라이프 사이클 문서를 참조하십시오.

GCC 14의 기본값은 x86-64-v3입니다.

RHEL 10의 GCC 14는 기본적으로 x86-64-v3 마이크로 아키텍처 수준입니다. 이 수준은 AVX 및 AVX2 명령 세트 및 fused multiply-add (FMA) 명령 세트와 같은 특정 기능을 기본적으로 활성화합니다. 자세한 내용은 관련 문서를 참조하십시오.

GCC 14에서 C 코드 컴파일에 영향을 미치는 오류로 경고 변경

GCC 14부터는 암시적 int 유형, 암시적 함수 선언 및 정수로 포인터를 사용하는 것과 같은 몇 가지 C 경고가 오류로 증가했습니다. 이번 업데이트에서는 개발자가 이러한 경고를 무시한 경우 애플리케이션 빌드를 중단할 수 있습니다. 이제 개발자는 성공적인 컴파일을 위해 이러한 문제를 해결해야 합니다. 자세한 내용은 GCC 14 포트를 참조하십시오.

GCC는 IBM Power Systems에서 기본적으로 IEEE128 부동 소수점 형식을 사용합니다.

RHEL10에서 GCC는 이전 소프트웨어 전용 IBM-DOUBLE-DOUBLE 코드 대신 IBM Power Systems의 긴 두 배 부동 소수점 숫자 모두에 대해 기본적으로 IEEE128 부동 소수점 형식을 사용합니다. 결과적으로 긴 이중 부동 소수점 숫자를 사용하여 계산을 수행하는 C 또는 C++ 코드에서 성능 향상을 확인할 수 있습니다.As a result, you can notice performance improvements in C or C++ code that performs computations by using long double floating point numbers.

이 128비트 긴 이중 부동 소수점 ABI는 RHEL 8 및 이전 버전에서 사용되는 부동 소수점 ABI와 호환되지 않습니다. IEEE128 작업을 수행하기 위한 하드웨어 지침은 IBM POWER9 이후 사용할 수 있습니다.

systemd-resolvedsssdnscd 교체

nscd 캐싱 데몬이 RHEL 10에서 제거되었습니다. GNU C 라이브러리(glibc)는 사용 가능한 교체와 함께 계속 작동합니다.

  • DNS 캐싱이 필요한 경우 systemd 확인 서비스를 설치하고 활성화합니다.
  • 다른 이름 서비스에 캐싱이 필요한 경우 sssd 서비스를 설치하고 구성합니다.

Grafana, PCP 및 grafana-pcp 이제 Valkey 를 사용하여 데이터를 저장

RHEL 10에서 Valkey 키-값 저장소는 Redis 를 대체합니다. 결과적으로 Grafana, PCP 및 grafana-pcp 플러그인에서 이제 Valkey 를 사용하여 Redis 대신 데이터를 저장합니다. grafana-pcp 플러그인의 PCP Redis 데이터 소스 이름은 이제 PCP Valkey 로 지정됩니다.

TBB의 새 버전은 호환되지 않습니다.

RHEL 10에는 이전 RHEL 릴리스와 함께 배포된 버전과 호환되지 않는 Threading Building Blocks (TBB) 라이브러리 버전 2021.11.0이 포함되어 있습니다. RHEL 10에서 실행하려면 TBB를 사용하는 애플리케이션을 다시 빌드해야 합니다.

zlib-ng의 성능 개선 사항

zlib-ng 라이브러리는 상당한 성능 향상을 제공하며, 따라서 RHEL 10은 기존 zlib 구현을 zlib-ng 로 대체합니다.

zlib-ng 2.0.0을 사용한 벤치마크 결과:

  • 압축 해제는 zlib 보다 57% 빠릅니다.
  • 압축은 zlib 보다 400% 빠릅니다.

RHEL 10.0은 성능 개선 및 최적화가 더욱 중요한 최신 zlib-ng 2.2.3 버전을 제공합니다.

Red Hat build of OpenJDK 21은 RHEL 10의 기본 Java 구현입니다.

기본 RHEL 10 Java 구현은 OpenJDK 21입니다. OpenJDK 21 Java 런타임 환경과 OpenJDK 21 Java 소프트웨어 개발 키트를 제공하는 java-21-openjdk 패키지를 사용합니다. 자세한 내용은 OpenJDK 설명서 를 참조하십시오.

맨 위로 이동
Red Hat logoGithubredditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다. 최신 업데이트를 확인하세요.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

Theme

© 2025 Red Hat