(Python との比較・入口)= # Python との比較・入口 ## この章で学ぶこと - Mojo が Python と根本的に違う4つの点 - Python に慣れた人が読み替えるコツ - Part 2 をどう読めばよいか Mojo は見た目が Python によく似ています。 でも、**似ているのは文法の表面だけ**です。 設計の中心はシステムプログラミング言語に近く、Python と根本的に異なる点がいくつかあります。 この章では、その違いを先に押さえます。 ## Python との4つの違い | 観点 | Python | Mojo | |------|--------|------| | 静的型・コンパイル時 | 実行時の動的型が基本。型ヒントは補助的 | 型がはっきりし、`[]` の compile-time 情報がコードの特化に関わる | | 値の扱い(ownership) | オブジェクト参照として考えることが多い | value semantics と ownership を重視する | | エラー(`raises`) | 例外が中心。シグネチャにコストが見えない | `raises` で「エラーを返す可能性がある」をシグネチャで明示する | | Python interop | 外部連携として考えることが多い | 相互運用が言語の大事な機能として組み込まれている | つまり、Mojo は **見た目は Python に近いが、設計の中心はシステムプログラミング言語** です。 ## 似ているところ 最初に見るコードは、かなり Python に近く見えます(`def`・インデント・`for`・`print` など)。 ```{literalinclude} ../../../src/part1/ch04/python_comparison_calculate_average_simple.mojo :language: mojo ```
リスト-1: python_comparison_calculate_average_simple.mojo
出典: [Quickstart](https://docs.modular.com/mojo/manual/quickstart/) Python 経験者ならかなり読みやすいはずです。ただし、入り口が似ているだけで、中身の考え方はかなり違います。 ## `raises` を見ると違いがわかりやすい 次のコードを見ると、Mojo が Python そのものではないことがよくわかります。 ```{literalinclude} ../../../src/part1/ch04/python_comparison_calculate_average_raises.mojo :language: mojo :lines: 1-7 ```リスト-2: python_comparison_calculate_average_raises.mojo
関数定義に **`raises`** が入っています。 **「この関数はエラーを返す可能性がある」** とシグネチャで明示している、ということです。 エラーのコストが型として見える。これが Python との大きな違いの一つです。 出典: [Functions](https://docs.modular.com/mojo/manual/functions/) / [Ownership](https://docs.modular.com/mojo/manual/values/ownership/) / [Parameters](https://docs.modular.com/mojo/manual/parameters/) ## Python に慣れた人の読み替えのコツ Python の感覚のままだと、少し混乱しやすい点があります。 最初は次の 3 つを意識すると読みやすくなります。 1. **「名前がオブジェクトを指す」より「だれが値を持っているか」** を意識する Mojo では ownership が大事です。 2. **関数シグネチャをしっかり見る** `read`、`mut`、`var`、`raises` などに、関数の性質がはっきり表れます。 3. **`[]` と `()` を混同しない** `[]` は compile-time、`()` は runtime と考えると整理しやすくなります。 ## {numref}`言語基礎(1)— 概要・関数・変数`以降の読み方 ここから先は、Mojo Manual の流れに沿って、次のようなテーマを順番に見ていきます。 - 言語の基本・関数・型と `struct` - 値と所有権・メタプログラミング - GPU やレイアウト・Python 相互運用 最初は Python と似ている部分から入れますが、読み進めるほど **型**、**所有権**、**compile-time** の重要さが見えてきます。 その変化を意識しながら読むと、Mojo の特徴がつかみやすくなります。 ## まとめ - Mojo は、最初の見た目は Python によく似ています。 - でも中身は、**型**、**所有権**、**compile-time** を重視する別の言語です。 - 特に `raises`、ownership、`[]` と `()` の違いは早めに押さえておくと役立ちます。 ## 出典 - [Mojo language basics](https://docs.modular.com/mojo/manual/basics/) - [Quickstart](https://docs.modular.com/mojo/manual/quickstart/) - [Python interop](https://docs.modular.com/mojo/manual/python/) > **補足:** この章では、Python とどこが似ていて、どこで分かれるのかをつかめれば十分です。細かい構文は {numref}`言語基礎(1)— 概要・関数・変数`以降で順に見ていきます。