0
no_std
の箱にBox
を使用したいと思います。これは可能ですか?これまでの私の単純な試みはうまくいきませんでした。no_stdでBoxを使用することはできますか?
これは、コンパイル(ただし、標準ライブラリを使用しています):
fn main() {
let _: Box<[u8]> = Box::new([0; 10]);
}
これにはない:
#![no_std]
fn main() {
let _: Box<[u8]> = Box::new([0; 10]);
}
しかし、錆のソースコードを見て、私は見ますBox
はliballocで警告付きで定義されています
このライブラリは、libcoreと同様に、一般的な使用目的ではなく、他のライブラリのビルディングブロックとして使用されます。このライブラリの型とインタフェースは、標準ライブラリを通して再輸出され、このライブラリを通して使用されるべきではありません。
Box
がSTDには依存しませんが、それだけのために再輸出されているので、私は唯一の私のコードにインポートする正しい方法を把握する必要がありように、それはそうです。
#![no_std]
#![feature(alloc)]
extern crate alloc;
use alloc::boxed::Box;
fn main() {
let _: Box<[u8]> = Box::new([0; 10]);
}
注これが見つからないためlang_items
のlibのようではなく、バイナリとしてコンパイルされること:(。これはお勧めできませんされるように見せかけにもかかわらず)
'#![feature(alloc)] 'のように見えますが、これは永遠に安定しています。安定版の 'no_std'で' Box'を使う方法はありますか? –
いいえ、ありません。しかし、動的割り当て( 'Box'ではなく)をしたい場合は、' libc :: malloc'を使うことができます。 – malbarbo
@AndrewStraw *永遠に安定していない* - 機能のポイントは、証明されている間に存在し、その後すべての人に向けられることです。 AFAIK、安定したリリースでは決して利用できないという唯一の目的のために存在するRustには何も**ありません。それは単なる時間と有用性の問題です。 – Shepmaster