🐍

Pythonのコンパイラを作りたい #7.5 - プロジェクト名の変更とレイアウト再構成(番外編)

2025/02/17に公開

こんにちは。前回(「#7 - ベンチマークと最適化」)では、フィボナッチ数列でのパフォーマンス比較を取り上げました。
今回は番外編として、プロジェクト名ディレクトリ構造を大幅に変更したので、その概要をまとめておきます。

1. プロジェクト名を pyc から lython に変更

1-1. なぜ pyc から変えたのか

これまでは「pyc」と呼んでいましたが、Python のバイトコードキャッシュ (.pyc) と紛らわしい上に短すぎて覚えづらく、独自処理系であることが伝わりにくい問題がありました。

1-2. Lython

  • 名前の由来: LLVM + Python -> 「Lython」という組み合わせ。Cython と同じ雰囲気です。
  • 既存の名称との衝突: いくつか「Lython」の名前を使うリポジトリはあったものの、いずれも古く更新が止まっている、または大規模ではないため、大きな問題はないと判断しました。
  • 「別実装」感の強化: CPython ではなく、独自ランタイム + GC + 静的型コンパイルという意図を、より明確にする狙いです。

2. フラットレイアウトから src レイアウトへ

2-1. pyc/pyc -> lython/src/lython

従来はリポジトリ直下に pyc/ ディレクトリが重複しているなど、やや煩雑でした。そこで今回、

lython/
 ├── src/
 │    └── lython/
 │        ├── codegen/
 │        ├── compiler/
 │        └── ...
 ├── runtime/
 ├── pyproject.toml
 └── ...

のように構成を整理。src/lython 以下にコード生成やコンパイラまわりのロジックをまとめました。

2-2. pyproject.toml とビルド

uv や Hatch を使って pyproject.toml を配置し、以下のような設定でビルド可能にしています(抜粋):

[tool.hatch.build.targets.wheel]
only-include = ["src"]
sources = ["src"]

これにより、src/ 以下をソースとして Python パッケージや Wheel のビルドができる仕組みに。

3. CLI オプションを Clang/GCC 風に

3-1. 旧来の CLI

当初は python -m pyc --compile main.py main のような呼び出し方で冗長でした。

3-2. 新CLI: lythonc main.py -o main

C/C++ のコンパイラと同様、以下の形式でコンパイルできるよう変更:

python -m lythonc main.py -o main

-o で出力先を指定、将来的には -O2-g なども追加検討中です。
これにより、学習コストを低減しつつ、慣れた感覚でコンパイルを実行できます。

4. まとめ & 今後の話

  • プロジェクト名: pycLython
  • ディレクトリレイアウト: src/ 中心の構造でビルドを簡易化
  • CLI: <entry> main.py -o main 形式に刷新

これらは機能向上というより、使いやすさ・開発体制の整備が目的です。リポジトリをクローンした際の迷いを減らし、今後の拡張に備えた基盤を整えました。

新しいリポジトリ:
https://github.com/t3tra-dev/lython

次回はまた本編に戻り、新しい構文の実装やさらなる最適化などについてお話ししていきます。どうぞお楽しみに!

次回:
https://zenn.dev/t3tra/articles/0a88c8a389fe43

Discussion