0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

"設計とは、宇宙の法則をコードの文法に埋め込むことである。"

並行処理とは、複数の文脈が同時に存在する宇宙の設計にほかならない。
Rustはこの複雑な宇宙を、SendSync というわずか2つのトレイトによって支配する。
その支配は暴力ではない。型の意味と振る舞いによる、静かな秩序の確立である。

この章では、SendSync を単なる「スレッド安全の属性」としてではなく、
**Rustの型システムにおける“宇宙の物理法則”**として捉え直す。
並行性という時空において、なぜこの2つのトレイトが必然であり、また不可避なのかを、設計論の視点から探る。


Send:転送できるという責任

fn spawn<T: Send + 'static>(f: T) {
    std::thread::spawn(move || {
        // ...
    });
}

Send トレイトは、「この値をスレッド間でムーブしても良い」という約束である。
単に「コピーしてよい」ではない。これは「責任を他の宇宙に渡してよい」という哲学的判断を型に託している。

StringVec<T> のように所有権を持つ構造体は Send を実装しており、
一方で Rc<T>RefCell<T>Send を実装していない。

これは、「それはひとつの世界でしか生きられない存在である」という、言語からの設計的警告である。


Sync:同時に読めるという信頼

Sync トレイトは、「参照が複数スレッドから同時に読まれても壊れない」という保証を意味する。
より正確には、「&TSync なら、&T&T を他のスレッドに渡せる」というルールだ。

この設計は、「値そのものが不変かどうか」ではなく、**“型として不変であることを語れるか”**が鍵となる。

例:

  • i32, bool:Sync(複数スレッドから読んでもOK)
  • Cell<T>:非Sync(内部で可変性を持つため)
  • Mutex<T>:Sync(制御された可変性のための型)

つまり、Syncであることは「構造が同時性に耐えるように設計されている」ことの証明である。


なぜトレイトで制御するのか?:設計の証明を型に委ねるため

Rustでは、SendSync をトレイトとして表現することで、構文上の柔軟性と構造上の安全性を両立している。

  • ユーザー定義型に対して、自動導出か手動での制御が可能
  • 一部の構造に関しては、明示的に !Send / !Sync を設計可能(PhantomDataなど)

これは「どんな型も自由に並行処理に投げ込んでよいわけではない」という設計の歯止めであり、
“自由を与える前に、構造を検証させる”というRustの型哲学そのものだ。


並行性の安全は、型の宇宙に委ねられている

C++では「安全であるかどうかはプログラマの設計力に依存する」。
Goでは「goroutineが全てを隠してくれる」。

だがRustは言う。**「設計そのものが安全を証明できなければ、その構造は成立しない」**と。

これは、型がただの制約ではなく、“スレッドという別宇宙に耐えられる構造体”として振る舞えることを求めているということ。

"型とは、宇宙の中で保証されるべき意味の境界である。SendとSyncはその恒星系を定める法則である。"


例外を許す構文:unsafeによる明示的な逸脱

Rustでは、Send/Syncの境界を意図的に破ることも可能だ。
だがそれは unsafe impl Send for MyType {} のような明示的な宣言を必要とする。

これは「あなたは設計上の信頼の外に出ようとしている」という旗であり、
その時点から、その型にまつわるすべての安全は設計者に委ねられる

この仕組みは、型安全の境界を越えることは構文で“告白”されなければならないという、設計上の倫理的要求である。


宇宙論としてのSend/Sync:並行性の“見えないルール”を言語化する

Rustにおいて、Send/Syncとは:

  • 型の責任範囲を“宇宙単位”で定義する構文
  • 並行性における動的バグを静的に封じる機構
  • コンパイル時に未来のスレッド間干渉を“予言し、拒絶する”設計的予防線

この二つのトレイトは、**言語が設計に介入し、未来の安全性を先取りするための“時間軸への介入装置”**なのだ。


結語:型は宇宙であり、SendとSyncはその重力である

スレッドという並行宇宙の中で、安全に設計された構造だけが信頼を持って渡されるべきである。
Rustはその信頼の判定を、開発者の思考ではなく、型と構文の体系に委ねることを選んだ。

SendとSyncは、「安全とは計算ではなく、“構造の内側に埋め込まれた哲学”である」ことを示す構文であり、
宇宙のように複雑な並行性を、構文によって制御するための最小にして最大の発明である。

"並行性に安全を求めるならば、それはまず型の内部構造に問うべきである。Rustはその構造を、SendとSyncという名で体系化した。"

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?