7장. 컴파일러 및 개발 도구
다음 장에서는 RHEL 8과 RHEL 9 간의 컴파일러 및 개발 툴에 대한 주요 변경 사항을 설명합니다.
7.1. LLVM, Rust 및 Go에 대한 주요 변경 사항 링크 복사링크가 클립보드에 복사되었습니다!
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 릴리스 노트를 참조하십시오.
LLVM Toolset은 롤링 애플리케이션 스트림이며 최신 버전만 지원됩니다. 자세한 내용은 Red Hat Enterprise Linux Application Streams 라이프 사이클 문서를 참조하십시오.
rust Toolset rebased to 버전 1.84.0
rust Toolset이 1.84.0 버전으로 업데이트되었습니다. 이전에 사용 가능한 버전 1.79.0 이후 주요 개선 사항은 다음과 같습니다.
-
새로운
LazyCell및LazyLock유형은 처음 사용할 때까지 초기화를 지연합니다. 이렇게 하면 각 인스턴스에 초기화 기능이 포함된 이전OnceCell및OnceLock유형이 확장됩니다. - 표준 라이브러리의 새로운 정렬 구현은 런타임 성능을 개선하고 시간을 컴파일합니다. 또한 비교자가 총 순서를 생성하지 않는 경우를 탐지하여 정렬되지 않은 데이터를 반환하는 대신 패닉을 발생시킵니다.
-
불투명 반환 유형에 대한 정확한 캡처가 추가되었습니다. 새로운
use<..> 구문은 부정확한 반환 형식에 사용되는 일반 매개변수와 수명을 지정합니다. const코드의 많은 새로운 기능이 추가되었습니다. 예를 들면 다음과 같습니다.- 부동 소수점 지원
-
인라인 어셈블리에 대한
constimmediates - 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::PanicInfo및std::panic::PanicInfo는 이제 다른 유형입니다. -
extern "C"함수가 이제 uncaught panics에서 중단됩니다. ABI 경계를 벗어나지 않도록 하는 대신extern "C-unwind"를 사용하십시오.
rust Toolset은 롤링 애플리케이션 스트림이며 Red Hat은 최신 버전만 지원합니다. 자세한 내용은 Red Hat Enterprise Linux Application Streams 라이프 사이클 문서를 참조하십시오.
Go Toolset을 버전 1.23로 업데이트
Go Toolset이 1.23 버전으로 업데이트되었습니다. 주요 개선 사항은 다음과 같습니다.
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 버전에 너무 새로운 기호에 대한 참조를 나타내는stdversionAnalyzer가 포함되어 있습니다. -
cmd및cgo기능은-ldflags옵션을 지원하여 C 링커에 플래그를 전달합니다.go명령은 매우 큰CGO_LDFLAGS환경 변수를 사용할 때인수 목록을 너무 긴오류를 방지하기 위해 이 플래그를 자동으로 사용합니다. -
추적유틸리티는 부분적으로 손상된 추적을 허용하고 추적 데이터를 복구하려고 합니다. 이는 충돌의 경우 추적이 충돌로 이어질 수 있기 때문에 특히 유용합니다. -
처리되지 않은 패닉 또는 기타 치명적인 오류 후에 런타임에서 출력한 역추적은
goroutine의 스택 추적을 첫 번째goroutine과 구별하기 위해 들여쓰기를 전달합니다. - profile-guided 최적화 사용에 대한 컴파일러 빌드 시간 오버헤드가 한 자리 백분율로 단축되었습니다.
-
새로운
-bindnow링커 플래그를 사용하면 동적으로 연결된 ELF 바이너리를 빌드할 때 즉시 함수 바인딩을 사용할 수 있습니다. -
//go:linknamelinker 지시문은 더 이상 표준 라이브러리의 내부 기호와 해당 정의에서//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 라이프 사이클 문서를 참조하십시오.