< 返回版块

PsiACE 发表于 2024-06-08 01:41

文章 - 从零开始构建数据类型

“从零开始” 构建意味着使用不安全的方法手动初始化每个字段,例如在 MaybeUninit 中,然后调用assume_init() 。文章详细介绍了如何使用 offset_of! 宏来逐步构建结构体或数组的每个字段,甚至是嵌套字段,并通过具体代码示例展示了这一过程。

use core::mem::{MaybeUninit, offset_of};

let mut out = MaybeUninit::<Example>::uninit();

let val = unsafe {
    let ptr: *mut Example = out.as_mut_ptr();
    ptr.byte_add(offset_of!(Example, a)).cast::<u32>().write(5u32);
    ptr.byte_add(offset_of!(Example, b)).cast::<u8>().write(6u8);
    ptr.byte_add(offset_of!(Example, c)).cast::<i64>().write(7i64);
    out.assume_init()
};

println!("{val:#?}");

Building Plain Old Data from Scratch: https://onevariable.com/blog/pods-from-scratch/

文章 - 静态大小、动态大小和其他。

这篇文章讨论了作者在开发 Rust 到 .NET 编译器时遇到的一个复杂的编程错误,展示了编译器开发中错误调试的挑战和复杂性。

文章中提到,由于编译器的一个假设错误,任何尝试格式化字符串的 Rust 程序都会崩溃。作者探索了导致这一问题的原因,包括标签处理错误和对枚举类型的错误假设。

此外,作者还讨论了在 Mono 和 CoreCLR 中处理调试信息的不同方式,以及解决这些问题的方法。最终,通过插入运行时检查和改进调试信息处理,逐步揭示问题的根本原因。

Statically Sized, dynamically sized, and other.: https://fractalfir.github.io/generated_html/rustc_codegen_clr_v0_1_3.html

This Week In Rust 550

新一期的 Rust 周报速递发布,快来看看有哪些内容你曾经关注过 :)

This Week In Rust 550: https://this-week-in-rust.org/blog/2024/06/05/this-week-in-rust-550/


From 日报小组 PsiACE

社区学习交流平台订阅:

评论区

写评论

还没有评论

1 共 0 条评论, 1 页