Unsized Rvalues 特性已经被merge到master
Unsized Rvalues 是RFC 1909中定义的特性,该特性允许本地变量、函数参数和一些表达式具有unsized类型。具体实现是将临时值存储在可变大小的栈空间中。
利用内部实现的alloca_unsized_indirect函数在栈上动态分配内存。
实现该特性的动机在于,在某些地方可以直接传递unsize类型,而不需要使用trait Object,比如Box来包装它。可能有些人会理解错,以为它是取代trait Object功能的,其实非也。
比如可以实现 VLA(variable-length array)数组
extern "C" {
fn random() -> usize;
}
fn foo(n: usize) {
let x = [0u8; n]; // x: [u8]
let x = [0u8; n + (random() % 100)]; // x: [u8]
let x = [0u8; 42]; // x: [u8; 42], like today
let x = [0u8; random() % 100]; //~ ERROR constant evaluation error
}
foo函数中头两行x定义,会返回[u8]类型,它们将在运行时对长度进行求值。 第三行,和之前一样,在编译时求值,最后一行出错是因为不支持CTFE
可以看rust源码中test/run-pass/unsized-locals/下的相关示例,但估计还得等几个小时才能尝试
ndarray-csv 轻松将CSV读入二维数组里
cargo-debstatus可以遍历debian包中所有依赖项
使用gezz实现游戏Ludum Dare
作者把他实现游戏过程中的得失记录了下来
使用Rust编写语言vm系列文章
已经更新到了 part 9
gfx-hal指南系列文章00: 小乌龟作画
gfx-hal是gfx-rs中包含的组件,gix的硬件抽象层
1
共 0 条评论, 1 页
评论区
写评论还没有评论