4. Python との比較・入口

4.1. この章で学ぶこと

  • Mojo が Python と根本的に違う4つの点

  • Python に慣れた人が読み替えるコツ

  • Part 2 をどう読めばよいか

Mojo は見た目が Python によく似ています。 でも、似ているのは文法の表面だけです。 設計の中心はシステムプログラミング言語に近く、Python と根本的に異なる点がいくつかあります。 この章では、その違いを先に押さえます。

4.2. Python との4つの違い

観点

Python

Mojo

静的型・コンパイル時

実行時の動的型が基本。型ヒントは補助的

型がはっきりし、[] の compile-time 情報がコードの特化に関わる

値の扱い(ownership)

オブジェクト参照として考えることが多い

value semantics と ownership を重視する

エラー(raises

例外が中心。シグネチャにコストが見えない

raises で「エラーを返す可能性がある」をシグネチャで明示する

Python interop

外部連携として考えることが多い

相互運用が言語の大事な機能として組み込まれている

つまり、Mojo は 見た目は Python に近いが、設計の中心はシステムプログラミング言語 です。

4.3. 似ているところ

最初に見るコードは、かなり Python に近く見えます(def・インデント・forprint など)。

def calculate_average(temps: List[Float64]) -> Float64:
    var total: Float64 = 0.0
    for index in range(len(temps)):
        total += temps[index]
    return total / Float64(len(temps))


def main():
    var temps: List[Float64] = [20.5, 22.3, 19.8, 25.1]
    var avg = calculate_average(temps)
    print("Average:", avg)

リスト-1: python_comparison_calculate_average_simple.mojo

出典: Quickstart

Python 経験者ならかなり読みやすいはずです。ただし、入り口が似ているだけで、中身の考え方はかなり違います。

4.4. raises を見ると違いがわかりやすい

次のコードを見ると、Mojo が Python そのものではないことがよくわかります。

def calculate_average(temps: List[Float64]) raises -> Float64:
    if len(temps) == 0:
        raise Error("No temperature data")
    var total: Float64 = 0.0
    for index in range(len(temps)):
        total += temps[index]
    return total / Float64(len(temps))

リスト-2: python_comparison_calculate_average_raises.mojo

関数定義に raises が入っています。 「この関数はエラーを返す可能性がある」 とシグネチャで明示している、ということです。 エラーのコストが型として見える。これが Python との大きな違いの一つです。

出典: Functions / Ownership / Parameters

4.5. Python に慣れた人の読み替えのコツ

Python の感覚のままだと、少し混乱しやすい点があります。 最初は次の 3 つを意識すると読みやすくなります。

  1. 「名前がオブジェクトを指す」より「だれが値を持っているか」 を意識する
    Mojo では ownership が大事です。

  2. 関数シグネチャをしっかり見る
    readmutvarraises などに、関数の性質がはっきり表れます。

  3. []() を混同しない
    [] は compile-time、() は runtime と考えると整理しやすくなります。

4.6. 6 章以降の読み方

ここから先は、Mojo Manual の流れに沿って、次のようなテーマを順番に見ていきます。

  • 言語の基本・関数・型と struct

  • 値と所有権・メタプログラミング

  • GPU やレイアウト・Python 相互運用

最初は Python と似ている部分から入れますが、読み進めるほど 所有権compile-time の重要さが見えてきます。 その変化を意識しながら読むと、Mojo の特徴がつかみやすくなります。

4.7. まとめ

  • Mojo は、最初の見た目は Python によく似ています。

  • でも中身は、所有権compile-time を重視する別の言語です。

  • 特に raises、ownership、[]() の違いは早めに押さえておくと役立ちます。

4.8. 出典

補足: この章では、Python とどこが似ていて、どこで分かれるのかをつかめれば十分です。細かい構文は 6 章以降で順に見ていきます。