相关疑难解决方法(0)

在Rust中使用字符串文字更方便的连接

在每晚的Rust中,不再可能将字符串文字指定为带有"〜"字符的 String .

例如,在C++中,我使用用户定义的文字连接字符串文字,而不是std::string每次都提到的外壳:

inline std::string operator"" _s (const char* str, size_t size) {return std::string (str, size);}
foo ("Hello, "_s + "world!");
Run Code Online (Sandbox Code Playgroud)

在Rust中是否存在类似的功能,以使字符串文字连接不那么痛苦String::from_str ("Hello, ") + "world!"

rust

10
推荐指数
2
解决办法
7923
查看次数

是否可以将 Box 与 no_std 一起使用?

我想Box在板条箱中使用no_std。这可能吗?到目前为止我的简单尝试还没有奏效。

编译(但使用标准库):

fn main() {
    let _: Box<[u8]> = Box::new([0; 10]);
}
Run Code Online (Sandbox Code Playgroud)

这不会:

#![no_std]

fn main() {
    let _: Box<[u8]> = Box::new([0; 10]);
}
Run Code Online (Sandbox Code Playgroud)

游乐场

然而,查看 Rust 源代码,我发现Boxliballoc 中定义了警告

该库与 libcore 一样,不适合一般用途,而是作为其他库的构建块。该库中的类型和接口通过标准库重新导出,不应通过该库使用。

由于Box不依赖于 std 而只是重新导出它,看来我只需要找出将其导入到我的代码中的正确方法。(尽管这似乎不推荐。)

rust

9
推荐指数
1
解决办法
7582
查看次数

如何使用no_std将整数作为字符串写入字节数组?

我想做的事情如下:

let x = 123;
let mut buf = [0 as u8; 20];
format_to!(x --> buf);
assert_eq!(&buf[..3], &b"123"[..]);
Run Code Online (Sandbox Code Playgroud)

#![no_std]没有任何内存分配器.

据我所知,有一个core::fmt::Displayfor 的实现u64,我想尽可能使用它.

换句话说,我想做类似的事情format!(...),但没有内存分配器.我怎样才能做到这一点?

bare-metal rust

8
推荐指数
1
解决办法
1253
查看次数

可以在没有标准库的情况下编译 Rust 代码吗?

我目前正在学习 Rust。我主要使用The Rust Programming Language一书和这个很好的参考,它将 Rust 特性/语法与 C++ 等价物联系起来。

我很难理解核心语言在哪里停止而标准库从哪里开始。我遇到了很多似乎与编译器有特殊关系的运算符和/或特征。例如,Rust 有一个trait(据我所知就像一个接口)被调用Deref,让我们使用*运算符取消引用实现它的类型:

fn main() {
    let x = 5;
    let y = Box::new(x);

    assert_eq!(5, x);
    assert_eq!(5, *y);
}
Run Code Online (Sandbox Code Playgroud)

另一个例子是?运算符,它似乎依赖于ResultOption类型。

可以在没有标准库的情况下编译使用这些运算符的代码吗?如果不是,那么 Rust 语言的哪些部分取决于标准库?甚至可以在没有它的情况下编译任何Rust 代码吗?

rust

8
推荐指数
2
解决办法
756
查看次数

我该如何使用这种格式!在no_std环境中的宏?

如何在不使用std的情况下实现以下示例?

let text = format!("example {:.1} test {:x} words {}", num1, num2, num3);
Run Code Online (Sandbox Code Playgroud)

text具有类型&strnum1,num2num3具有任何数字类型.

我已经尝试使用numtoaitoa/dtoa显示数字,但numtoa不支持浮动,itoa不支持no_std.我觉得在字符串中显示一个数字是相当普遍的,我可能会遗漏一些明显的东西.

embedded macros formatting text rust

6
推荐指数
2
解决办法
1021
查看次数

将 `#![no_std]` 添加到库中时,该库的用户是否有任何缺点或复杂性?

我写了一个 Rust 库。我听说过这个no_std功能,并注意到我的库没有使用和std未提供的任何内容。所以理论上我可以只添加属性并更改一些导入。corealloc#![no_std]

但我想知道这如何影响我图书馆的用户。当然,我希望通过使用#![no_std]no_std环境中的用户也可以使用我的 crate。那当然好。但是:我的图书馆的用户对我的图书馆有什么不利no_std吗?例如,他们是否也被迫使用#![no_std]? 那会很糟糕。我想知道因为大多数 crate 隐藏no_std了 Cargo 功能背后的兼容性。我实际上在网上找不到关于这个问题的任何信息。

如果使用没有任何缺点#![no_std],那么每个可以工作的cratestd应该添加该属性,对吗?

rust

5
推荐指数
1
解决办法
1134
查看次数

标签 统计

rust ×6

bare-metal ×1

embedded ×1

formatting ×1

macros ×1

text ×1