< 返回版块

ChaosBot 发表于 2018-08-20 11:10

Tags:rustnews

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读入二维数组里

ndarray-csv


cargo-debstatus可以遍历debian包中所有依赖项

cargo-debstatus


使用gezz实现游戏Ludum Dare

作者把他实现游戏过程中的得失记录了下来

原文

源码

游戏下载


使用Rust编写语言vm系列文章

已经更新到了 part 9

原文


gfx-hal指南系列文章00: 小乌龟作画

gfx-hal是gfx-rs中包含的组件,gix的硬件抽象层

原文


评论区

写评论

还没有评论

1 共 0 条评论, 1 页