在每晚的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!"?
我想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 而只是重新导出它,看来我只需要找出将其导入到我的代码中的正确方法。(尽管这似乎不推荐。)
我想做的事情如下:
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!(...),但没有内存分配器.我怎样才能做到这一点?
我目前正在学习 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)
另一个例子是?运算符,它似乎依赖于Result和Option类型。
可以在没有标准库的情况下编译使用这些运算符的代码吗?如果不是,那么 Rust 语言的哪些部分取决于标准库?甚至可以在没有它的情况下编译任何Rust 代码吗?
如何在不使用std的情况下实现以下示例?
let text = format!("example {:.1} test {:x} words {}", num1, num2, num3);
Run Code Online (Sandbox Code Playgroud)
text具有类型&str和num1,num2并num3具有任何数字类型.
我已经尝试使用numtoa和itoa/dtoa显示数字,但numtoa不支持浮动,itoa不支持no_std.我觉得在字符串中显示一个数字是相当普遍的,我可能会遗漏一些明显的东西.
我写了一个 Rust 库。我听说过这个no_std功能,并注意到我的库没有使用和std未提供的任何内容。所以理论上我可以只添加属性并更改一些导入。corealloc#![no_std]
但我想知道这如何影响我图书馆的用户。当然,我希望通过使用#![no_std],no_std环境中的用户也可以使用我的 crate。那当然好。但是:我的图书馆的用户对我的图书馆有什么不利no_std吗?例如,他们是否也被迫使用#![no_std]? 那会很糟糕。我想知道因为大多数 crate 隐藏no_std了 Cargo 功能背后的兼容性。我实际上在网上找不到关于这个问题的任何信息。
如果使用没有任何缺点#![no_std],那么每个可以工作的crate都std应该添加该属性,对吗?