Skip to content

Fix meet-safe-and-unsafe.md #13

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 3 commits into from
Jun 3, 2020
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 10 additions & 10 deletions src/meet-safe-and-unsafe.md
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ nonsense.

安全な Rust は真の Rust プログラミング言語です。もしあなたが安全な Rust だけでコードを書くなら、
型安全やメモリ安全性などを心配する必要はないでしょう。
null ポインタや dangling ポインタ、馬鹿げた「未定義な挙動」などに我慢する必要はないのです。
ヌルポインタやダングリングポインタ、馬鹿げた「未定義な挙動」などに我慢する必要はないのです。


<!--
Expand Down Expand Up @@ -122,9 +122,9 @@ The only things that are different in Unsafe Rust are that you can:
* Mutate statics
-->

* 生のポインタが指す値を得る
* `unsafe` な関数を呼ぶ(C 言語で書かれた関数や、intrinsics、生のアロケータなど)
* `unsafe` な trait を実装する
* 生ポインタが指す値を得る
* `unsafe` な関数を呼ぶ(C 言語で書かれた関数や、intrinsic、生のアロケータなど)
* `unsafe` なトレイトを実装する
* 静的な構造体を変更する

<!--
Expand Down Expand Up @@ -161,14 +161,14 @@ C 言語と違って、Rust では「未定義な挙動」は限定されてい
* Causing a [data race][race]
-->

* null ポインタや dangling ポインタのデリファレンス
* ヌルポインタやダングリングポインタの参照外し
* [未初期化のメモリ][uninitialized memory] を読む
* [ポインタエイリアスルール][pointer aliasing rules] を破る
* 不正なプリミティブな値を生成する
* dangling リファレンス、null リファレンス
* ダングリング参照、ヌル参照
* 0 でも 1 でもない `bool` 値
* 未定義な `enum` 判別式
* [0x0, 0xD7FF] と [0xE000, 0x10FFFF] 範囲外の `char` 値
* [0x0, 0xD7FF] と [0xE000, 0x10FFFF] 範囲外の `char` 値
* utf8 ではない `str` 値
* 他の言語に巻き戻す
* [データ競合][race] を引き起こす
Expand All @@ -183,9 +183,9 @@ intrinsics that make special assumptions about how code can be optimized.
-->

これだけです。これが、Rust が防ぐ「未定義な挙動」の原因です。
もちろん、危険な関数や trait が「未定義な挙動」を起こさないための他の制約を作り出す事は可能ですが、
もちろん、危険な関数やトレイトが「未定義な挙動」を起こさないための他の制約を作り出す事は可能ですが、
そういった制約が破られた場合、たいてい上の問題のどれかを引き起こします。
コンパイラ intrinsics がその他の制約を生み出し、コードの最適化に関する特別な仮定をすることもあります。
コンパイラ intrinsic がその他の制約を生み出し、コードの最適化に関する特別な仮定をすることもあります。


<!--
Expand Down Expand Up @@ -222,7 +222,7 @@ these problems are considered impractical to categorically prevent.
-->

とはいえ、こういうことをできてしまうプログラムは*恐らく*間違っていると言えるでしょう。
Rust はこういった事をおきにくくするためのツールをたくさん提供します
Rust はこういった事を起きにくくするためのツールをたくさん提供します
しかし、これらの問題を完全に防ぐのは現実的ではないと考えられています。


Expand Down