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 章 で、readmut^ といった引数修飾子を通して、この仕組みを具体的に確認します。

型を自分で定義する 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 ifalias を使った compile-time 評価の実例を確認します。

出典: Metaprogramming / Parameters / compile-time evaluation

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. まとめ

  • 中心にあるのは、ownershipcompile-timePython 相互運用 の 3 つです。

  • ownership と value semantics によって、GC なしにメモリ安全を保ちます。

  • compile-time によって、使い方に応じた特化がしやすくなります。

  • Python の資産を活かしながら、性能が求められる部分を強化できるのが大きな特徴です。

3.7. 出典

補足: この章では細かい構文を覚える必要はありません。まずは、Mojo が何を大事にしている言語なのかをつかめれば十分です。