Rust 1.78 发布。 Borgo 语言结合了 Go 和 Rust 的优点

Rust 1.78 通用编程语言的发布已经发布,该语言由 Mozilla 项目创建,但现在由独立的非营利组织 Rust 基金会赞助开发。 该语言专注于内存安全,并提供了实现高作业并行性的方法,同时避免使用垃圾收集器和运行时(运行时减少为标准库的基本初始化和维护)。

Rust 的内存处理方法使开发人员在操作指针时避免错误,并防止由于低级内存处理而出现的问题,例如在内存区域被释放后访问它、取消引用空指针、缓冲区溢出等。 为了分发库、提供构建和管理依赖项,该项目开发了 Cargo 包管理器。 crates.io 存储库支持托管库。

Rust 在编译时通过引用检查、跟踪对象所有权、跟踪对象生命周期(范围)以及评估代码执行期间内存访问的正确性来提供内存安全。 Rust 还提供防止整数溢出的保护,要求在使用前初始化变量,更好地处理标准库中的错误,默认应用不可变引用和变量的概念,并提供强静态类型以最小化逻辑错误。

主要创新:

  • 提出了一个新的属性命名空间“#[diagnostic]”,提供了一种影响编译器生成的错误消息的方法。新空间中的第一个是“#[diagnostic::on_unimplemented]”属性,该属性可用于自定义在需要使用未针对该类型实现的特征的情况下抛出的错误消息。 #[diagnostic::on_unimplemented( message = "我的 `ImportantTrait<{A}>` 消息未针对 `{Self}` 实现", label = "我的标签", note = "注释 1", note = "注释2" )] 特征重要特征{} fn use_my_trait(_: impl 重要特征) {} fn main() { use_my_trait(String::new());错误[E32]:我的“ImportantTrait”消息` 未针对 `String` 实现 —> src/main.rs:0277:32 | 12 | 18 use_my_trait(String::new()); | ———— ^^^^^^^^^^^^^^ 我的标签 | | |此调用引入的界限所需 | =帮助:特征`ImportantTrait ` 未针对 `String` 实现 = 注:注 12 = 注:注 32
  • 现在可以将应用于不安全函数的预断言检查推迟到代码生成,从而无需在“#[cfg(debug_assertions)]”模式下构建标准库即可执行这些检查。要触发检查,现在只需为代码的测试或调试版本启用调试断言即可。
  • 标准库中影响指针和切片对齐的函数的行为现在可以在运行时预测,并且取决于输入数据。函数pointer::align_offset用于计算对齐指针的偏移量,现在仅在操作失败时才返回usize::MAX。函数 slice::align_to 和 slice::align_to_mut 都将切片转换为具有对齐的中间切片以及原始开始和结束切片的表示,现在始终返回最大的中间部分。
  • 以下内容已转移至稳定类别:
    • 实现标准输入读取(&S)
    • 允许对某些与 std::error::Error 相关的实现使用非静态(non-static)生命周期。
    • 实施实施?允许大小值。
    • 实现自对于 io:: 错误
  • Barrier::new() 函数已经稳定,可以在任何上下文中与“const”属性一起使用,而不是常量。
  • 对于目标平台 x86_64-pc-windows-msvc、i686-pc-windows-msvc、x86_64-pc-windows-gnu、i686-pc-windows-gnu、x86_64-pc-windows-gnullvm 和 i686-pc-windows-gnullvm现在至少需要 Windows 10 版本。
  • 第三级支持已针对 wasm32-wasip2、arm64ec-pc-windows-msvc、armv8r-none-eabihf 和 loongarch64-unknown-linux-musl 平台实现。第三级涉及基本支持,但没有自动化测试、发布官方构建或检查代码是否可以构建。
  • 对目标平台添加 wasm32-wasip1 的第二级支持已实现。第二级支持涉及装配保证。
  • 平台 wasm32-wasi-preview1-threads 已重命名为 wasm32-wasip1-threads。
  • 编译器已切换为使用 LLVM 18。当对 x18-86 和 x32-86 架构使用 LLVM 64 时,与 u128 和 i128 类型关联的 ABI 已更改。
  • 在 Cargo pact 管理器中,锁文件版本 4 (lockfile v4) 已经稳定。
  • Cargo 拥有稳定的全局缓存,其中包含有关最新数据使用情况的信息。缓存使用 SQLite 托管在 $CARGO_HOME/.global-cache 中,并自动更新以反映对索引、crate 文件、代码目录、git clone 和 git checkout 的最新更改。

此外,Borgo 编程语言试图比 Go 语言更具表现力,但又不如 Rust 语言复杂。 Borgo 结合了 Go 和 Rust 的最佳特性,弥补了每种语言的缺点。例如,Go 简单明了,但不提供高级类型安全功能。 Rust 语言提供了安全编程的工具,但过于复杂。该项目由 The Simple Haskell Handbook 的作者和 Quad CI 持续集成系统的开发者 Marco Sampellegrini 开发。

Rust 1.78 发布。 Borgo 语言结合了 Go 和 Rust 的优点

Borgo 使用静态类型、类似 Go 的类型和类似 Rust 的语法。 Borgo 代码中行尾的分号是可选的。 Borgo 代码被编译成与现有 Go 包完全兼容的 Go 表示形式。编译器代码是用 Rust 编写的,并根据 ISC 许可证分发。使用 fmt 枚举网络状态{ 正在加载,失败(int),成功(T), } struct Response { title:字符串,持续时间:int, } fn main() { let res = Response { title:“Hello world”,持续时间:0, } let state = NetworkState.Success(res) let msg = 匹配状态 { NetworkState.Loading => “仍在加载”, NetworkState.Failed(code) => fmt.Sprintf(“收到错误代码:%d”, code), NetworkState.Success (res) => res.title, } fmt.Println(msg) }

来源: opennet.ru

添加评论