🐍
Pythonのコンパイラを作りたい #7.5 - プロジェクト名の変更とレイアウト再構成(番外編)
こんにちは。前回(「#7 - ベンチマークと最適化」)では、フィボナッチ数列でのパフォーマンス比較を取り上げました。
今回は番外編として、プロジェクト名とディレクトリ構造を大幅に変更したので、その概要をまとめておきます。
pyc
から lython
に変更
1. プロジェクト名を
pyc
から変えたのか
1-1. なぜ これまでは「pyc」と呼んでいましたが、Python のバイトコードキャッシュ (.pyc
) と紛らわしい上に短すぎて覚えづらく、独自処理系であることが伝わりにくい問題がありました。
1-2. Lython
- 名前の由来: LLVM + Python -> 「Lython」という組み合わせ。Cython と同じ雰囲気です。
- 既存の名称との衝突: いくつか「Lython」の名前を使うリポジトリはあったものの、いずれも古く更新が止まっている、または大規模ではないため、大きな問題はないと判断しました。
- 「別実装」感の強化: CPython ではなく、独自ランタイム + GC + 静的型コンパイルという意図を、より明確にする狙いです。
2. フラットレイアウトから src レイアウトへ
pyc/pyc
-> lython/src/lython
2-1. 従来はリポジトリ直下に pyc/
ディレクトリが重複しているなど、やや煩雑でした。そこで今回、
lython/
├── src/
│ └── lython/
│ ├── codegen/
│ ├── compiler/
│ └── ...
├── runtime/
├── pyproject.toml
└── ...
のように構成を整理。src/lython
以下にコード生成やコンパイラまわりのロジックをまとめました。
pyproject.toml
とビルド
2-2. 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
のような呼び出し方で冗長でした。
lythonc main.py -o main
3-2. 新CLI: C/C++ のコンパイラと同様、以下の形式でコンパイルできるよう変更:
python -m lythonc main.py -o main
-o
で出力先を指定、将来的には -O2
や -g
なども追加検討中です。
これにより、学習コストを低減しつつ、慣れた感覚でコンパイルを実行できます。
4. まとめ & 今後の話
-
プロジェクト名:
pyc
→Lython
-
ディレクトリレイアウト:
src/
中心の構造でビルドを簡易化 -
CLI:
<entry> main.py -o main
形式に刷新
これらは機能向上というより、使いやすさ・開発体制の整備が目的です。リポジトリをクローンした際の迷いを減らし、今後の拡張に備えた基盤を整えました。
新しいリポジトリ:
次回はまた本編に戻り、新しい構文の実装やさらなる最適化などについてお話ししていきます。どうぞお楽しみに!
次回:
Discussion