diff --git a/1.9/ja/book/custom-allocators.md b/1.9/ja/book/custom-allocators.md index 289577dc..1cc9ff90 100644 --- a/1.9/ja/book/custom-allocators.md +++ b/1.9/ja/book/custom-allocators.md @@ -7,7 +7,10 @@ -メモリ割り当てが常に簡単に出来るとは限りません。ほとんどの場合、Rustが既定の方法でメモリ割り当てを行いますが、割り当て方法をカスタマイズする必要が出てくる場合があります。現在、コンパイラと標準ライブラリはコンパイル時に既定のグローバルアロケータを切り替えることが出来ます。詳細は [RFC 1183][rfc] に書かれていますが、ここではどのように独自のアロケータを作成するか順を追って説明します。 +メモリ割り当てが常に簡単にできるとは限りません。 +ほとんどの場合、Rustが既定の方法でメモリ割り当てを行いますが、割り当て方法をカスタマイズする必要が出てくる場合があります。 +現在、コンパイラと標準ライブラリはコンパイル時に既定のグローバルアロケータを切り替えることができます。 +詳細は [RFC 1183][rfc] に書かれていますが、ここではどのように独自のアロケータを作成するか順を追って説明します。 [rfc]: https://github.com/rust-lang/rfcs/blob/master/text/1183-swap-out-jemalloc.md @@ -17,24 +20,31 @@ - + -現在コンパイラは `alloc_system` と `alloc_jemalloc` (jemallocのないターゲットもあります)という2つの既定のアロケータを提供しています。これらのアロケータは単に普通のRustのクレートで、メモリの割り当てと解放の手続きを実装しています。標準ライブラリはどちらか一方を前提としてコンパイルされているわけではありません。コンパイラは生成する成果物の種類に応じてどちらのアロケータを使用するかをコンパイル時に決定します。 +現在コンパイラは `alloc_system` と `alloc_jemalloc` (jemallocのないターゲットもあります)という2つの既定のアロケータを提供しています。 +これらのアロケータは普通のRustのクレートで、メモリの割り当てと解放の手続きを実装しています。 +標準ライブラリはどちらか一方を前提としてコンパイルされているわけではありません。 +コンパイラは生成する成果物の種類に応じてどちらのアロケータを使用するかをコンパイル時に決定します。 -バイナリを生成する場合、既定では(もし可能なら) `alloc_jemalloc` を使用します。この場合、コンパイラは最後のリンクにまで影響力を持っているという意味で、「全世界を支配」しています。従ってアロケータの選択はコンパイラに委ねることができます。 +バイナリを生成する場合、既定では(もし可能なら) `alloc_jemalloc` を使用します。 +この場合、コンパイラは最後のリンクにまで影響力を持っているという意味で、「全世界を支配」しています。 +従ってアロケータの選択はコンパイラに委ねることができます。 -一方、動的あるいは静的ライブラリの場合、既定では `alloc_system` を使用します。他のアプリケーションや他の環境など、使用するアロケータの決定権がない世界において、Rustは「お客」に過ぎません。そのため、メモリの割り当てと解放を行うには、標準API(例えば `malloc` と `free` )に頼ることになります。 +一方、動的あるいは静的ライブラリの場合、既定では `alloc_system` を使用します。 +他のアプリケーションや他の環境など、使用するアロケータの決定権がない世界において、Rustは「お客」に過ぎません。 +そのため、メモリの割り当てと解放を行うには、標準API(例えば `malloc` と `free` )に頼ることになります。 # アロケータの切り替え @@ -42,7 +52,8 @@ -コンパイラによる既定の選択はほとんどの場合うまく動きますが、しばしば多少の調整が必要になることがあります。コンパイラのアロケータ選択を上書きするには、単に希望のアロケータとリンクするだけです。 +コンパイラによる既定の選択はほとんどの場合うまく動きますが、しばしば多少の調整が必要になることがあります。 +コンパイラのアロケータ選択を上書きするには、単に希望のアロケータとリンクするだけです。 ```rust,no_run #![feature(alloc_system)] @@ -59,7 +70,8 @@ fn main() { -この例で生成されるバイナリは既定のjemallocとリンクする代わりに、システムアロケータを使います。逆に既定でjemallocを使う動的ライブラリを生成するには次のようにします。 +この例で生成されるバイナリは既定のjemallocとリンクする代わりに、システムアロケータを使います。 +逆に既定でjemallocを使う動的ライブラリを生成するには次のようにします。 ```rust,ignore #![feature(alloc_jemalloc)] @@ -83,7 +95,9 @@ pub fn foo() { -時々jemallocとシステムアロケータの選択では足りず、全く新しいカスタムアロケータが必要になることがあります。この場合、アロケータAPI(例えば `alloc_system` や `alloc_jemalloc` と同様のもの)を実装した独自のクレートを書くことになります。例として、 `alloc_system` の簡素な注釈付きバージョンを見てみましょう。 +時々jemallocとシステムアロケータの選択では足りず、全く新しいカスタムアロケータが必要になることがあります。 +この場合、アロケータAPI(例えば `alloc_system` や `alloc_jemalloc` と同様のもの)を実装した独自のクレートを書くことになります。 +例として、 `alloc_system` の簡素な注釈付きバージョンを見てみましょう。 ```rust,no_run # // only needed for rustdoc --test down below @@ -165,7 +179,7 @@ pub extern fn __rust_usable_size(size: usize, _align: usize) -> usize { size } -# // just needed to get rustdoc to test this +# // only needed to get rustdoc to test this # fn main() {} # #[lang = "panic_fmt"] fn panic_fmt() {} # #[lang = "eh_personality"] fn eh_personality() {} @@ -174,6 +188,8 @@ pub extern fn __rust_usable_size(size: usize, _align: usize) -> usize { # #[no_mangle] pub extern fn rust_eh_unregister_frames () {} ``` +**TODO**:最後のコメントを翻訳する + このクレートをコンパイルすると、次のように使えるようになります。 @@ -198,11 +214,15 @@ fn main() { -* 1つの成果物は高々1つのアロケータとしかリンクすることはできません。バイナリ、dynlib、staticlibは必ず1つのアロケータとリンクする必要があり、もし明示的に指定されなければコンパイラがアロケータを選択します。一方、rlibはアロケータとリンクする必要はありません(リンクすることも可能です)。 +* 1つの成果物は高々1つのアロケータとしかリンクすることはできません。 + バイナリ、dynlib、staticlibは必ず1つのアロケータとリンクする必要があり、もし明示的に指定されなければコンパイラがアロケータを選択します。 + 一方、rlibはアロケータとリンクする必要はありません(リンクすることも可能です)。 -* アロケータを使うコードは `#![needs_allocator]` でタグ付けされます(例えば現時点での `liballoc` クレート)。また、 `#[allocator]` がついたクレートはアロケータを使うクレートに直接的にも間接的にも依存することが出来ません(例えば、循環依存は許されていません)。このためアロケータは原則としてlibcoreにしか依存しないようにする必要があります。 +* アロケータを使うコードは `#![needs_allocator]` でタグ付けされます(例えば現時点での `liballoc` クレート)。 + また、 `#[allocator]` がついたクレートはアロケータを使うクレートに直接的にも間接的にも依存することができません(例えば、循環依存は許されていません)。 + このためアロケータは原則としてlibcoreにしか依存しないようにする必要があります。 diff --git a/diff-1.6.0..1.9.0/src/doc/book/custom-allocators.md b/diff-1.6.0..1.9.0/src/doc/book/custom-allocators.md deleted file mode 100644 index 5808b25f..00000000 --- a/diff-1.6.0..1.9.0/src/doc/book/custom-allocators.md +++ /dev/null @@ -1,21 +0,0 @@ ---- a/src/doc/book/custom-allocators.md -+++ b/src/doc/book/custom-allocators.md -@@ -13,7 +13,7 @@ own allocator up and running. - - The compiler currently ships two default allocators: `alloc_system` and - `alloc_jemalloc` (some targets don't have jemalloc, however). These allocators --are just normal Rust crates and contain an implementation of the routines to -+are normal Rust crates and contain an implementation of the routines to - allocate and deallocate memory. The standard library is not compiled assuming - either one, and the compiler will decide which allocator is in use at - compile-time depending on the type of output artifact being produced. -@@ -134,7 +134,7 @@ pub extern fn __rust_usable_size(size: usize, _align: usize) -> usize { - size - } - --# // just needed to get rustdoc to test this -+# // only needed to get rustdoc to test this - # fn main() {} - # #[lang = "panic_fmt"] fn panic_fmt() {} - # #[lang = "eh_personality"] fn eh_personality() {} -diff --git a/src/doc/book/dining-philosophers.md b/src/doc/book/dining-philosophers.md