Skip to content

Commit 23648cf

Browse files
authored
Fix safe-unsafe-meaning.md (#14)
* Trim extra spaces * Obey to translation table * Fix typo * Fix unclear explanation * Obey to translation table
1 parent 8456801 commit 23648cf

File tree

1 file changed

+37
-37
lines changed

1 file changed

+37
-37
lines changed

src/safe-unsafe-meaning.md

Lines changed: 37 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,15 @@
55

66
<!-- What's the relationship between Safe Rust and Unsafe Rust? How do they
77
interact? -->
8-
安全な Rust と危険な Rust とはどう関係しているのでしょうか? どのように影響し合うのでしょうか?
8+
安全な Rust とアンセーフな Rust とはどう関係しているのでしょうか? どのように影響し合うのでしょうか?
99

1010
<!-- The separation between Safe Rust and Unsafe Rust is controlled with the
1111
`unsafe` keyword, which acts as an interface from one to the other. This is
1212
why we can say Safe Rust is a safe language: all the unsafe parts are kept
1313
exclusively behind the boundary. -->
1414

15-
`unsafe` キーワードがインターフェースとなり、安全な Rust と危険な Rust とを分離します。
16-
このため、安全な Rust は安全な言語で、危険な部分は完全に境界外に管理されている、と言うことができるのです。
15+
`unsafe` キーワードがインターフェースとなり、安全な Rust とアンセーフな Rust とを分離します。
16+
このため、安全な Rust は安全な言語で、アンセーフな部分は完全に境界外に管理されている、と言うことができるのです。
1717

1818
<!--
1919
The `unsafe` keyword has two uses: to declare the existence of contracts the
@@ -34,10 +34,10 @@ trait must check the trait documentation to ensure their implementation
3434
maintains the contracts the trait requires.
3535
-->
3636

37-
_関数__trait の宣言_ に未チェックな契約が存在する事を、`unsafe` を使って示すことができます。
37+
_関数__トレイトの宣言_ に未チェックな契約が存在する事を、`unsafe` を使って示すことができます。
3838
関数に `unsafe` を使うと、ドキュメントを読んで、
3939
要求された契約を守るように関数を使うことを、その関数のユーザーに要請することになります。
40-
trait の宣言に `unsafe` を使うと、その trait を実装するユーザーに対し、ドキュメントをチェックして契約を守るよう要請します。
40+
トレイトの宣言に `unsafe` を使うと、そのトレイトを実装するユーザーに対し、ドキュメントをチェックして契約を守るよう要請します。
4141

4242
<!--
4343
You can use `unsafe` on a block to declare that all constraints required
@@ -47,13 +47,13 @@ to declare that the implementation of that trait has adhered to whatever
4747
contracts the trait's documentation requires.
4848
-->
4949

50-
コードブロックに使われた `unsafe` は、そのブロックで呼ばれている危険な関数が要求する契約は守られていて、コードが信頼出来る事を意味します。`unsafe` を trait の実装に使うと、その実装が trait のドキュメントに書かれている契約に準拠している事を示します
50+
コードブロックに使われた `unsafe` は、そのブロックで呼ばれているアンセーフな関数が要求する契約は守られていて、コードが信頼出来る事を意味します。`unsafe` をトレイトの実装に使うと、その実装がトレイトのドキュメントに書かれている契約に準拠している事を示します
5151

5252
<!--
5353
The standard library has a number of unsafe functions, including:
5454
-->
5555

56-
標準ライブラリにはいくつもの危険な関数があります。例えば、
56+
標準ライブラリにはいくつものアンセーフな関数があります。例えば、
5757

5858
<!--
5959
* `slice::get_unchecked`, which performs unchecked indexing, allowing
@@ -66,36 +66,36 @@ The standard library has a number of unsafe functions, including:
6666
* All FFI functions are `unsafe` because the other language can do arbitrary
6767
operations that the Rust compiler can't check.
6868
-->
69-
69+
7070
* `slice::get_unchecked` は未チェックのインデックス参照を実行します。自由自在にメモリ安全性に違反できます。
7171
* `mem::transmute` は、型安全の仕組みを好きなようにすり抜けて、ある値が特定の型であると再解釈します(詳細は [変換] をみてください)。
72-
* サイズが確定している型の生のポインタには、固有の `offset` メソッドがあります。渡されたオフセットが LLVM が定める "境界内" になければ、未定義の挙動を引き起こします。
72+
* サイズが確定している型の生ポインタには、固有の `offset` メソッドがあります。渡されたオフセットが LLVM が定める "境界内" になければ、未定義の挙動を引き起こします。
7373
* すべての FFI 関数は `unsafe` です。なぜなら Rust コンパイラは、他の言語が実行するどんな操作もチェックできないからです。
7474

7575
<!--
7676
As of Rust 1.0 there are exactly two unsafe traits:
7777
-->
7878

79-
Rust 1.0 現在、危険な traits は 2 つしかありません。
79+
Rust 1.0 現在、アンセーフなトレイトは 2 つしかありません。
8080

8181
<!--
8282
* `Send` is a marker trait (a trait with no API) that promises implementors are
8383
safe to send (move) to another thread.
8484
* `Sync` is a marker trait that promises threads can safely share implementors
8585
through a shared reference.
8686
-->
87-
88-
* `Send` は API を持たないマーカー trait で、実装された型が他のスレッドに安全に送れる(move できる)ことを約束します。
89-
* `Sync` もマーカー trait で、この trait を実装した型は、共有リファレンスを使って安全に複数のスレッドで共有できる事を約束します
87+
88+
* `Send` は API を持たないマーカートレイトで、実装された型が他のスレッドに安全に送れる(ムーブできる)ことを約束します。
89+
* `Sync` もマーカートレイトで、このトレイトを実装した型は、共有された参照を使って安全に複数のスレッドで共有できる事を約束します
9090

9191
<!--
9292
Much of the Rust standard library also uses Unsafe Rust internally, although
9393
these implementations are rigorously manually checked, and the Safe Rust
9494
interfaces provided on top of these implementations can be assumed to be safe.
9595
-->
9696

97-
また、多くの Rust 標準ライブラリは内部で危険な Rust を使っています。ただ、標準ライブラリの
98-
実装はプログラマが徹底的にチェックしているので、危険な Rust の上に実装された安全な Rust は安全であると仮定して良いでしょう。
97+
また、多くの Rust 標準ライブラリは内部でアンセーフな Rust を使っています。ただ、標準ライブラリの
98+
実装はプログラマが徹底的にチェックしているので、アンセーフな Rust の上に実装された安全な Rust は安全であると仮定して良いでしょう。
9999

100100
<!--
101101
The need for all of this separation boils down a single fundamental property
@@ -116,9 +116,9 @@ maintain). On the other hand, Unsafe Rust has to be very careful about
116116
trusting Safe Rust.
117117
-->
118118

119-
このように安全と危険の分けると、安全な Rust は、自分が利用する危険な Rust が正しく書かれている事、
120-
つまり危険な Rust がそれが守るべき契約を実際に守っている事、を本質的に信頼しなくてはいけません。
121-
逆に、危険な Rust は安全な Rust を注意して信頼しなくてはいけません。
119+
このように安全とアンセーフを分けると、安全な Rust は、自分が利用するアンセーフな Rust が正しく書かれている事、
120+
つまりアンセーフな Rust がそれが守るべき契約を実際に守っている事、を本質的に信頼しなくてはいけません。
121+
逆に、アンセーフな Rust は安全な Rust を注意して信頼しなくてはいけません。
122122

123123
<!--
124124
As an example, Rust has the `PartialOrd` and `Ord` traits to differentiate
@@ -134,13 +134,13 @@ maintain all necessary contracts, even if a key type's `Ord` implementation
134134
does not implement a total ordering.
135135
-->
136136

137-
例えば、Rust には `PartialOrd` trait と `Ord` trait があり、単に比較可能な型と全順序が
137+
例えば、Rust には `PartialOrd`トレイトと `Ord`トレイトがあり、単に比較可能な型と全順序が
138138
定義されている型(任意の値が同じ型の他の値と比べて等しいか、大きいか、小さい)とを区別します。
139-
順序つきマップの `BTreeMap` は半順序の型には使えないので、キーとして使われる型が `Ord` trait を
139+
順序つきマップの `BTreeMap` は半順序の型には使えないので、キーとして使われる型が `Ord`トレイトを
140140
実装している事を要求します。
141-
しかし `BTreeMap` の実装は危険な Rust が使っていて、危険な Rust は渡された `Ord` の実装が
141+
しかし `BTreeMap` の実装ではアンセーフな Rust が使われていて、アンセーフな Rust は渡された `Ord` の実装が
142142
適切であるとは仮定できません。
143-
`BTreeMap` 内部の危険な部分は、キー型の `Ord` の実装が全順序ではない場合でも、必要な契約が
143+
`BTreeMap` 内部のアンセーフな部分は、キー型の `Ord` の実装が全順序ではない場合でも、必要な契約が
144144
すべて守られるよう注意深く書かれなくてはいけません。
145145

146146
<!--
@@ -150,7 +150,7 @@ assumptions about potential future Safe Rust code providing the same
150150
guarantees.
151151
-->
152152

153-
危険な Rust は安全な Rust を無意識には信頼できません。危険な Rust コードを書くときには、
153+
アンセーフな Rust は安全な Rust を無意識には信頼できません。アンセーフな Rust コードを書くときには、
154154
安全な Rust の特定のコードのみに依存する必要があり、
155155
安全な Rust が将来にわたって同様の安全性を提供すると仮定してはいけません。
156156

@@ -160,8 +160,8 @@ type could theoretically require that keys implement a new trait called
160160
`UnsafeOrd`, rather than `Ord`, that might look like this:
161161
-->
162162

163-
この問題を解決するために `unsafe` な trait が存在します。理論上は、`BTreeMap` 型は
164-
キーが `Ord` ではなく、新しい trait `UnsafeOrd` を実装する事を要求する事ができます。
163+
この問題を解決するために `unsafe` なトレイトが存在します。理論上は、`BTreeMap` 型は
164+
キーが `Ord` ではなく、新しいトレイト`UnsafeOrd` を実装する事を要求する事ができます。
165165
このようなコードになるでしょう。
166166

167167
```rust
@@ -181,10 +181,10 @@ correct. If it isn't, it's the fault of the unsafe trait implementation
181181
code, which is consistent with Rust's safety guarantees.
182182
-->
183183

184-
この場合、`UnsafeOrd` を実装する型は、この trait が期待する契約に準拠している事を示すために
184+
この場合、`UnsafeOrd` を実装する型は、このトレイトが期待する契約に準拠している事を示すために
185185
`unsafe` キーワードを使うことになります。
186-
この状況では、`BTreeMap` 内部の危険な Rust は、キー型が `UnsafeOrd` を正しく実装していると
187-
信用する事ができます。もしそうで無ければ、それは trait の実装の問題であり
186+
この状況では、`BTreeMap` 内部のアンセーフな Rust は、キー型が `UnsafeOrd` を正しく実装していると
187+
信用する事ができます。もしそうで無ければ、それはトレイトの実装の問題であり
188188
これは Rust の安全性の保証と一致しています。
189189

190190
<!--
@@ -199,14 +199,14 @@ expect to defend against a bad implementation of the trait, then marking the
199199
trait `unsafe` is a reasonable choice.
200200
-->
201201

202-
trait に `unsafe` をつけるかどうかは API デザインにおける選択です。
203-
Rust では従来 `unsafe` な trait を避けてきました。そうしないと危険な Rust が
202+
トレイトに `unsafe` をつけるかどうかは API デザインにおける選択です。
203+
Rust では従来 `unsafe` なトレイトを避けてきました。そうしないとアンセーフな Rust が
204204
蔓延してしまい、好ましくないからです。
205205
`Send``Sync``unsafe` となっているのは、スレッドの安全性が *基本的な性質* であり、
206206
間違った `Ord` の実装に対して危険なコードが防衛できるのと同様の意味では防衛できないからです。
207-
あなたが宣言した trait を `unsafe` とマークするかどうかも、同じようにじっくりと考えてください。
208-
もし `unsafe` なコードがその trait の間違った実装から防御することが合理的に不可能であるなら
209-
その trait を `unsafe` とするのは合理的な選択です。
207+
あなたが宣言したトレイトを `unsafe` とマークするかどうかも、同じようにじっくりと考えてください。
208+
もし `unsafe` なコードがそのトレイトの間違った実装から防御することが合理的に不可能であるなら
209+
そのトレイトを `unsafe` とするのは合理的な選択です。
210210

211211
<!--
212212
As an aside, while `Send` and `Sync` are `unsafe` traits, they are
@@ -216,7 +216,7 @@ whose types also implement `Send`. `Sync` is automatically derived for all
216216
types composed only of values whose types also implement `Sync`.
217217
-->
218218

219-
余談ですが、`unsafe` な trait である `Send``Sync` は、それらを実装する事が安全だと
219+
余談ですが、`unsafe` なトレイトである `Send``Sync` は、それらを実装する事が安全だと
220220
実証可能な場合には自動的に実装されます。
221221
`Send` は、`Send` を実装した型だけから構成される型に対して、自動的に実装されます。
222222
`Sync` は、`Sync` を実装した型だけから構成される型に対して、自動的に実装されます。
@@ -229,11 +229,11 @@ of care that must be taken, and what contracts it is expected of Unsafe Rust
229229
to uphold.
230230
-->
231231

232-
これが安全な Rust と危険な Rust のダンスです。
233-
これは、安全な Rust をできるだけ快適に使えるように、しかし危険な Rust を書くには
232+
これが安全な Rust とアンセーフな Rust のダンスです。
233+
これは、安全な Rust をできるだけ快適に使えるように、しかしアンセーフな Rust を書くには
234234
それ以上の努力と注意深さが要求されるようなデザインになっています。
235235
この本の残りでは、どういう点に注意しなくはいけないのか、
236-
危険な Rust を維持するための契約とは何なのかを議論します。
236+
アンセーフな Rust を維持するための契約とは何なのかを議論します。
237237

238238

239239

0 commit comments

Comments
 (0)