3. 設計思想 — ownership・compile-time・interop
3.1. この章で学ぶこと
Mojo の設計を 3 つの柱で見る考え方
ownership・compile-time・Python interop(Python相互運用)の役割
Part 2 で何を学ぶのかの見通し
Mojo Manual には多くの特徴が並んでいます。 この章では、それらを 3 つの柱 に整理して、Mojo 全体の考え方をつかみやすくします。
3.2. 3 つの柱
柱 |
一言定義 |
嬉しいこと |
|---|---|---|
ownership と value semantics(値セマンティクス) |
値の持ち主と寿命を明示する |
GC なしでメモリ安全、不要なコピーを減らす |
compile-time |
コンパイル時に情報を使ってコードを作り分ける |
実行時の無駄を減らし、ハードウェアに特化できる |
Python interop(Python相互運用) |
Python の資産を Mojo から使える |
既存コードを残しつつ、必要な部分だけ高速化できる |
3.3. 1. ownership と value semantics
一言定義: 値をだれが持ち、いつ使い終わるかをはっきりさせる考え方です。
Mojo では、値は基本的に 値として独立して扱う(value semantics)という前提があります。 さらに、だれがその値を持っているか(ownership)を重視します。
この二つが組み合わさることで、
値を安全に受け渡ししやすくなる
不要なコピーを減らせる
GC に頼らずにメモリまわりのバグを防ぎやすくなる
という効果が生まれます。Mojo は所有権のルールでメモリ安全を保とうとする言語です。
Part 2 で見ること: 10 章 で、read・mut・^ といった引数修飾子を通して、この仕組みを具体的に確認します。
型を自分で定義する struct や、型どうしで共通のふるまいを表す trait もこの柱を支える設計です。struct は「型を明示しやすく、しくみがわかりやすい」設計であり、ゼロコスト抽象化を目指しています。
出典: Value semantics / Ownership / Structs / Traits
3.4. 2. compile-time
一言定義: プログラムを実行する前(コンパイル時)に情報を使ってコードを作り分けるしくみです。
Mojo では、[] で渡す情報と () で渡す情報を区別します。まずは、
[]が compile-time 側(parameters)の情報()が runtime 側(arguments)の引数
と捉えると読みやすいです。compile-time に決まる情報を使うことで、Mojo は 使い方に応じて特化したコード を生成しやすくなり、実行時の無駄を減らします。
Part 2 で見ること: 11 章 で、comptime if や alias を使った compile-time 評価の実例を確認します。
3.5. 3. Python interop
一言定義: Python のモジュールを Mojo から呼び出し、Python の資産を活かしながら Mojo を使う考え方です。
Mojo は、見た目が Python に似ているだけでなく、Python のコードやライブラリをそのまま活かせることが重要な設計目標です。 既存の Python コードを残しつつ、性能が必要な部分だけ Mojo に置き換えやすくするためです。
Part 2 で見ること: 13 章 で、from python import Python 構文や numpy との連携パターンを確認します。
出典: Python interop
3.6. まとめ
中心にあるのは、ownership、compile-time、Python 相互運用 の 3 つです。
ownership と value semantics によって、GC なしにメモリ安全を保ちます。
compile-time によって、使い方に応じた特化がしやすくなります。
Python の資産を活かしながら、性能が求められる部分を強化できるのが大きな特徴です。
3.7. 出典
補足: この章では細かい構文を覚える必要はありません。まずは、Mojo が何を大事にしている言語なのかをつかめれば十分です。