Skip to content

Commit 3ae9205

Browse files
committed
Update ffi
1 parent 19a1803 commit 3ae9205

File tree

1 file changed

+13
-23
lines changed

1 file changed

+13
-23
lines changed

1.6/ja/book/ffi.md

Lines changed: 13 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ Cライブラリは、スレッドセーフでないインターフェイスを
7373
<!-- When declaring the argument types to a foreign function, the Rust compiler can -->
7474
<!-- not check if the declaration is correct, so specifying it correctly is part of -->
7575
<!-- keeping the binding correct at runtime. -->
76-
他言語関数について引数の型を宣言するとき、Rustのコンパイラはその宣言が正しいかどうかを確認することができません。それを正しく指定することは、実行時のバインディングを正しく保つことの一部です
76+
他言語関数について引数の型を宣言するとき、Rustのコンパイラはその宣言が正しいかどうかを確認することができません。それを正しく指定することは実行時にバインディングを正しく動作させるために必要なことです
7777

7878
<!-- The `extern` block can be extended to cover the entire snappy API: -->
7979
`extern` ブロックはsnappyのAPI全体をカバーするように拡張することができます。
@@ -148,8 +148,8 @@ pub fn validate_compressed_buffer(src: &[u8]) -> bool {
148148
<!-- `snappy_compress` function as an output parameter. An output parameter is also passed to retrieve -->
149149
<!-- the true length after compression for setting the length. -->
150150
`snappy_max_compressed_length` 関数は、圧縮後の結果を保持するために必要な最大の容量のベクタを割り当てるために使うことができます。
151-
そして、そのベクタは結果の引数として`snappy_compress`関数に渡されます。
152-
結果の引数は、長さをセットするために、圧縮後の本当の長さを取得するためにも渡されます。
151+
そして、そのベクタは結果を受け取るための引数として`snappy_compress`関数に渡されます。
152+
結果を受け取るための引数は、長さをセットするために、圧縮後の本当の長さを取得するためにも渡されます。
153153

154154
```rust
155155
# #![feature(libc)]
@@ -206,7 +206,6 @@ pub fn uncompress(src: &[u8]) -> Option<Vec<u8>> {
206206
dst.set_len(dstlen as usize);
207207
Some(dst)
208208
} else {
209-
# // None // SNAPPY_INVALID_INPUT
210209
None // SNAPPY_INVALID_INPUT
211210
}
212211
}
@@ -308,7 +307,7 @@ void trigger_callback() {
308307
<!-- the notification. This will allow the callback to unsafely access the -->
309308
<!-- referenced Rust object. -->
310309
これは、そのオブジェクトへの生ポインタをCライブラリに渡すことで実現できます。
311-
そして、Cのライブラリはその通知の中のRustのオブジェクトへのポインタを含むことができるようになります
310+
そして、CのライブラリはRustのオブジェクトへのポインタをその通知の中に含むことができるようになります
312311
これにより、そのコールバックは参照されるRustのオブジェクトにアンセーフな形でアクセスできるようになります。
313312
314313
<!-- Rust code: -->
@@ -442,7 +441,7 @@ void trigger_callback() {
442441
異なる `kind` の値はリンク時のネイティブライブラリの使われ方の違いを意味します。
443442
リンクの視点からすると、Rustコンパイラは2種類の生成物を作ります。
444443
部分生成物(rlib/staticlib)と最終生成物(dylib/binary)です。
445-
ネイティブダイナミックライブラリとフレームワークの依存関係は最終生成物の境界を伝えますが、スタティックライブラリの依存関係は全く伝えません。なぜなら、スタティックライブラリはその後に続く生成物に直接統合されてしまうからです。
444+
ネイティブダイナミックライブラリとフレームワークの依存関係は最終生成物を作るときまで伝播され解決されますが、スタティックライブラリの依存関係は全く伝えません。なぜなら、スタティックライブラリはその後に続く生成物に直接統合されてしまうからです。
446445
447446
<!-- A few examples of how this model can be used are: -->
448447
このモデルをどのように使うことができるのかという例は次のとおりです。
@@ -453,13 +452,13 @@ void trigger_callback() {
453452
<!-- Rust crate would declare a dependency via `#[link(name = "foo", kind = -->
454453
<!-- "static")]`. -->
455454
* ネイティブビルドの依存関係。
456-
ときどき、Rustのコードを書くときにC/C++のグルーが必要になりますが、ライブラリの形式でのC/C++のコードの配布はまさに重荷です
457-
このような場合、 `libfoo.a` からコードを得て、それからRustのクレートで `#[link(name = "foo", kind = "static")]` によって依存関係を宣言します。
455+
ときどき、Rustのコードを書くときにC/C++のグルーが必要になりますが、ライブラリの形式でのC/C++のコードの配布は重荷でしかありません
456+
このような場合、 コードは `libfoo.a` にアーカイブされ、それからRustのクレートで `#[link(name = "foo", kind = "static")]` によって依存関係を宣言します。
458457
459458
<!-- Regardless of the flavor of output for the crate, the native static library -->
460459
<!-- will be included in the output, meaning that distribution of the native static -->
461460
<!-- library is not necessary. -->
462-
クレートの出力の種類にかかわらず、ネイティブスタティックライブラリは出力に含まれます。これは、ネイティブスタティックライブラリの配布は不要だということを意味します。
461+
クレートの成果物の種類にかかわらず、ネイティブスタティックライブラリは成果物に含まれます。これは、ネイティブスタティックライブラリの配布は不要だということを意味します。
463462
464463
<!-- * A normal dynamic dependency. Common system libraries (like `readline`) are -->
465464
<!-- available on a large number of systems, and often a static copy of these -->
@@ -496,12 +495,12 @@ unsafe fn kaboom(ptr: *const i32) -> i32 { *ptr }
496495
この関数は `unsafe` ブロック又は他の `unsafe` な関数からのみ呼び出すことができます。
497496

498497
<!-- # Accessing foreign globals -->
499-
# 他言語のグローバルな値へのアクセス
498+
# 他言語のグローバル変数へのアクセス
500499

501500
<!-- Foreign APIs often export a global variable which could do something like track -->
502501
<!-- global state. In order to access these variables, you declare them in `extern` -->
503502
<!-- blocks with the `static` keyword: -->
504-
他言語APIはしばしばグローバルな状態を追跡するようなことをするためのグローバルな値をエクスポートします
503+
他言語APIはしばしばグローバルな状態を追跡するようなことをするためのグローバル変数をエクスポートします
505504
それらの値にアクセスするために、それらを `extern` ブロックの中で `static` キーワードを付けて宣言します。
506505

507506
```no_run
@@ -582,15 +581,6 @@ extern "stdcall" {
582581
これは `extern` ブロック全体に適用されます。
583582
サポートされているABIの規則は次のとおりです。
584583

585-
<!-- * `stdcall` -->
586-
<!-- * `aapcs` -->
587-
<!-- * `cdecl` -->
588-
<!-- * `fastcall` -->
589-
<!-- * `Rust` -->
590-
<!-- * `rust-intrinsic` -->
591-
<!-- * `system` -->
592-
<!-- * `C` -->
593-
<!-- * `win64` -->
594584
* `stdcall`
595585
* `aapcs`
596586
* `cdecl`
@@ -632,10 +622,10 @@ extern "stdcall" {
632622
<!-- checking or mutability rules is not guaranteed to be safe, so prefer using raw -->
633623
<!-- pointers (`*`) if that's needed because the compiler can't make as many -->
634624
<!-- assumptions about them. -->
635-
Rust独自のボックス( `Box<T>`はコンテンツオブジェクトを指すハンドルとして非ヌルポインタを使います
625+
Rust独自のボックス( `Box<T>`は包んでいるオブジェクトを指すハンドルとして非ヌルポインタを使います
636626
しかし、それらは内部のアロケータによって管理されるため、手で作るべきではありません。
637-
参照は型を直接指す非ヌルポインタとみなすことが間違いなくできます
638-
しかし、借用チェックやミュータブルについてのルールが破られた場合、安全性は保証されません。もしコンパイラが同数ほどそれらをみなすことができず、それが必要なときには、生ポインタ( `*` )を使いましょう。
627+
参照は型を直接指す非ヌルポインタとみなすことが安全にできます
628+
しかし、借用チェックやミュータブルについてのルールが破られた場合、安全性は保証されません。生ポインタについてはコンパイラは借用チェックやミュータブルほどには仮定を置かないので、必要なときには、生ポインタ( `*` )を使いましょう。
639629

640630
<!-- Vectors and strings share the same basic memory layout, and utilities are -->
641631
<!-- available in the `vec` and `str` modules for working with C APIs. However, -->

0 commit comments

Comments
 (0)