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