2016-06-15 24 views
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]); 
} 

Playground

しかし、錆のソースコードを見て、私は見ます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のようではなく、バイナリとしてコンパイルされること:(。これはお勧めできませんされるように見せかけにもかかわらず)

答えて

1

あなたはallocクレートをインポートする必要があります。

+0

'#![feature(alloc)] 'のように見えますが、これは永遠に安定しています。安定版の 'no_std'で' Box'を使う方法はありますか? –

+0

いいえ、ありません。しかし、動的割り当て( 'Box'ではなく)をしたい場合は、' libc :: malloc'を使うことができます。 – malbarbo

+0

@AndrewStraw *永遠に安定していない* - 機能のポイントは、証明されている間に存在し、その後すべての人に向けられることです。 AFAIK、安定したリリースでは決して利用できないという唯一の目的のために存在するRustには何も**ありません。それは単なる時間と有用性の問題です。 – Shepmaster

関連する問題