- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想在带有 no_std
的 crate 中使用 Box
。这可能吗?到目前为止,我的简单尝试都没有奏效。
这个编译(但使用标准库):
fn main() {
let _: Box<[u8]> = Box::new([0; 10]);
}
这不是:
#![no_std]
fn main() {
let _: Box<[u8]> = Box::new([0; 10]);
}
( Playground )
但是,查看 Rust 源代码,我看到 Box
是在 liballoc 中定义的,并带有警告
This library, like libcore, is not intended for general usage, but rather as a building block of other libraries. The types and interfaces in this library are reexported through the standard library, and should not be used through this library.
因为 Box
不依赖于 std 而只是为它重新导出,看来我只需要找出将它导入我的代码的正确方法。 (尽管这似乎不被推荐。)
最佳答案
您必须导入 the alloc
crate :
#![no_std]
extern crate alloc;
use alloc::boxed::Box;
fn main() {
let _: Box<[u8]> = Box::new([0; 10]);
}
alloc
crate 是编译器提供的(就像非 no_std
环境中的 std
一样),所以你不需要拉它来自 crates.io 或在 Cargo.toml
中指定。自 Rust 1.36 ( stabilization PR ) 以来, crate 是稳定的。
请注意,由于缺少 lang_items
,它会编译为一个库,而不是二进制文件。不幸的是,编译一个 no_std
二进制文件仍然需要 Rust nightly。
关于rust - 是否可以将 Box 与 no_std 一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37843379/
我有一个存储指向某些数据的原始指针的结构: struct Foo { x: *const T } impl Foo { fn new(x: &[T]) -> Foo {
我想做这样的事情: let x = 123; let mut buf = [0 as u8; 20]; format_to!(x --> buf); assert_eq!(&buf[..3], &b"
如何在不使用 std 的情况下实现以下示例? let text = format!("example {:.1} test {:x} words {}", num1, num2, num3); tex
我想做这样的事情: let x = 123; let mut buf = [0 as u8; 20]; format_to!(x --> buf); assert_eq!(&buf[..3], &b"
我写了一个 Rust 库。我听说过 no_std 功能,并注意到我的库没有使用 std 中 core 未提供的任何内容和 alloc .所以理论上我可以只添加 #![no_std] 属性并更改一些导入
我正在开发一个使用 #![no_std] 的项目,我希望能够派生出有用的特性,例如 Copy 和 Clone 。我尝试将 pub use core::prelude::*; 添加到项目根目录和我实际想
我正在为 Rust 中的编程语言实现编写运行时。我计划在这个运行时中链接我生成的编译代码,所以为了保持二进制文件小我不想依赖 std . 当我尝试 cargo test我的运行时,我收到错误提示 st
在标准的 Rust 代码中,vec! 宏位于序曲中,无需手动使其可见。我正在开发一个不使用标准库并设置 #![no_std] 的库,因此前奏也不可见。 在测试代码中,我使用了标准库中的功能,因此我有一
我正在尝试使用 #![no_std] 集编写一些 Rust。我试图一次遍历 str 一个字符;然而,通常的技术似乎都不起作用。当我尝试通过 str 提供的函数访问字符时,例如for c in s.ch
我想在带有 no_std 的 crate 中使用 Box。这可能吗?到目前为止,我的简单尝试都没有奏效。 这个编译(但使用标准库): fn main() { let _: Box = Box:
我正在尝试建立一个与 dueboot 非常相似的项目.即嵌入式 ARM 上的 Rust。现在,我只能编译 Rust 代码,但无法编译。 我基本上完全从那个项目中复制了 rust 代码,但是我并不完全理
我正在尝试在 Tock OS 嵌入式操作系统上实现 future 。我正在尝试使用 Tokio在 #[no_std] 环境中。 我的 Cargo.toml 文件如下所示: [package] name
我想启动一个Rust no_std项目,所以我只是创建了一个新的商品包,并在main.rs中写了以下几行: #![feature(lang_items, start)] #![no_std] exte
我对无堆链表的尝试缺少什么? 我的目标是让下面的代码在堆栈上生成序列 [1, 2, 3],然后在单独的行上打印这些值 ,而不使用 Box 或其他任何东西需要堆或 std 或 malloc。 我浏览了
我正在尝试使用 GCC 6.1.0 和 rustc 1.11 在 Windows 中使用 C 语言构建一个调用 Rust 函数的最小程序,最好使用 #![no_std] 编译。 0-nightly (
我正在尝试使用rand或rand_core生成随机数。根据the documentation,可以使用#![no_std]启用default-features = false用法。因此,我尝试对ran
在示例中,hs 从 std 重新导出 HashSet。但它编译时没有错误或警告。为什么? #![no_std] pub use hs::HashSet; pub fn new() -> HashSet
在示例中,hs 从 std 重新导出 HashSet。但它编译时没有错误或警告。为什么? #![no_std] pub use hs::HashSet; pub fn new() -> HashSet
this question的所有答案关于将数组从 C 传递给 Rust 使用 std::slice::from_raw_parts将原始 C 指针和一些长度信息转换为 Rust。在嵌入式上下文中(在我
我正在尝试创建一个嵌入友好的可执行文件(占用空间小,不依赖于 Rust 标准库),它使用一个已经支持 no_std 构建的库 (wasmi)。 Rust 的新手,我只是将指令拼凑在一起,但它的要点似乎
我是一名优秀的程序员,十分优秀!