第 7 章 编译器和开发工具


下面的章节包含对 RHEL 8 和 RHEL 9 之间编译器和开发工具的最显著的更改。

7.1. LLVM、R Rust 和 Go 的显著变化

LLVM Toolset 已更新至 19.1.7

LLVM Toolset 已更新至版本 19.1.7。

LLVM 编译器的显著变化:

  • LLVM 现在使用 debug 记录,一个用于调试信息的更高效的表示。

Clang 的显著更新:

  • C++14 大小的重新分配现在默认启用。
  • C++17 支持已完成。
  • 添加了对 C++20 支持的改进,特别是围绕模块、概念和类模板参数推导(CTAD)。
  • 添加了对 C23、C2c、C23 和 C2y 支持的改进。

如需更多信息,请参阅 LLVM 发行注记Clang 发行注记

LLVM Toolset 是一个滚动应用程序流,只支持最新版本。如需更多信息,请参阅 Red Hat Enterprise Linux 应用程序流生命周期 文档。

Rust Toolset 已 rebase 到版本 1.84.0

Rust Toolset 已更新到版本 1.84.0。自之前可用的版本 1.79.0 以来的显著改进包括:

  • 新的 LazyCellLazyLock 类型延迟了初始化,直到第一次使用为止。它们使用每个实例中包含的初始化功能扩展了早期的 OnceCellOnceLock 类型。
  • 标准库中的新排序实现提高了运行时性能和编译时间。它们还会尝试检测比较器没有产生总顺序的情况,从而导致该 panic 而不是返回未排序的数据。
  • 添加了对不透明返回类型的精确捕获。新的 use<..> 语法指定了 impl Trait 返回类型中使用的通用参数和生命周期。
  • const 代码添加了许多新功能,例如:

    • 浮点支持
    • const 直接用于内联汇编
    • 对静态的引用
    • 可变参考和指针
  • unsafe 代码添加了许多新功能,例如:

    • 严格的来源 API
    • &raw 指针语法
    • 安全寻址静态
    • 在不安全的 extern 块中声明安全项目
  • Cargo 依赖项解析器现在是版本感知的。如果依赖项 crate 指定了其最低支持的 Rust 版本,则 Cargo 会在解析依赖关系图时使用此信息,而不是使用最新的兼容 semver 的 crate 版本。

兼容性备注:

  • WebAssembly 系统接口(WASI)目标从 rust-std-static-wasm32-wasi 改为 rust-std-static-wasm32-wasip1。您还可以通过在命令行上使用 --target wasm32-wasip1 参数来选择 WASI 目标。如需更多信息,请参阅 对 Rust 的 WASI 目标的更改 上游博客文章。
  • 拆分 panic 钩子和 panic 处理程序参数 core::panic::PanicInfostd::panic::PanicInfo 现在是不同的类型。
  • extern "C" 函数现在在未捕获的 panics 上中止。使用 extern "C-unwind" 来允许跨 ABI 边界的展开。

Rust Toolset 是一个滚动应用程序流,红帽只支持最新版本。如需更多信息,请参阅 Red Hat Enterprise Linux 应用程序流生命周期 文档。

Go Toolset 已 rebase 到版本 1.23

Go Toolset 已更新到版本 1.23。主要改进包括:

  • for-range 循环接受以下类型的迭代函数:

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

      调用迭代参数函数会为 for-range 循环创建迭代值。有关参考链接,请参阅 上游发行注记

  • Go Toolchain 可以收集使用情况和中断统计信息,以帮助 Go 团队了解 Go Toolchain 是如何使用和工作的。默认情况下,Go Telemetry 不会上传遥测数据,仅将其存储在本地。如需更多信息,请参阅 上游 Go Telemetry 文档
  • go vet 子命令包含 stdversion 分析器,它标记对在引用文件中使用的 Go 版本太新的符号的引用。
  • cmdcgo 功能支持 -ldflags 选项,来将标记传递给 C 链接器。当您使用非常大的 CGO_LDFLAGS 环境变量时,go 命令会自动使用这个标志来避免 argument list too long 错误。
  • trace 工具容忍部分破坏的跟踪,并尝试恢复跟踪数据。这在崩溃时特别有用,因为您可以获得导致崩溃的跟踪。
  • 在未处理的 panic 或其他致命错误之后,运行时打印的回溯带有缩进,以区分来自第一个 goroutinegoroutine 的堆栈追踪。
  • 使用配置文件引导的优化的编译器构建时间开销降低到个位数百分比。
  • 新的 -bindnow 链接器标志在构建动态链接的 ELF 二进制时启用立即函数绑定。
  • //go:linkname linker 指令不再引用标准库中的内部符号,以及在其定义中没有标记为 //go:linkname 的运行时。
  • 如果程序不再引用 TimerTicker,则垃圾回收会立即清理它们,即使还没有调用它们的 Stop 方法。与 TimerTicker 关联的计时器渠道现在没有缓冲,容量为 0。这确保每次调用 ResetStop 方法时,在调用后不会发送或接收过时的值。
  • 新的 unique 软件包为规范化值(如 interninghash-consing)提供了工具。
  • 新的 iter 软件包提供了基本定义,以与用户定义的迭代器一起工作。
  • slicesmaps 软件包引入了几个与迭代器一起使用的新功能。
  • 新的 structs 软件包为修改包含 struct 类型的属性(如内存布局)的 struct 字段提供类型。
  • 在以下软件包中进行了次要更改:

    • archive/tar
    • crypto/tls
    • crypto/x509
    • database/sql
    • debug/elf
    • encoding/binary
    • go/ast
    • go/types
    • math/rand/v2
    • net
    • net/http
    • net/http/httptest
    • net/netips
    • path/filepath
    • reflect
    • runtime/debug
    • runtime/pprof
    • runtime/trace
    • slices
    • sync
    • sync/atomic
    • syscall
    • testing/fstest
    • text/template
    • time
    • unicode/utf16

如需更多信息,请参阅 上游发行注记

Go Toolset 是一个滚动应用程序流,红帽只支持最新版本。如需更多信息,请参阅 Red Hat Enterprise Linux 应用程序流生命周期 文档。

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat