Transpiler - Python→Hakorune トランスパイラー
📋 概要
PythonコードをHakoruneコードに変換するトランスパイラーの設計・仕様です。
📁 ファイル一覧
- python-to-hakorune-spec.md - Python→Hakorune変換仕様
🎯 目的
トランスパイラーの役割
-
構文変換
- Python構文 → Hakorune構文
- イディオム変換
- スタイル変換
-
型注釈の活用
- Pythonの型ヒント → Hakorune型
- 型推論の補助
- 型安全性の向上
-
最適化
- Hakorune向け最適化
- 不要なコードの削除
- パフォーマンス改善
🔄 変換例
基本構文
# Python
class Player:
def __init__(self, name: str):
self.name = name
self.health = 100
def heal(self, amount: int):
self.health += amount
// Hakorune
box Player {
name: StringBox
health: IntegerBox
birth(name: StringBox) {
me.name = name
me.health = integer.create(100)
}
heal(amount: IntegerBox) {
me.health = me.health.add(amount)
}
}
制御構文
# Python
for i in range(10):
print(i)
// Hakorune
local i = integer.create(0)
loop(i.compare("<", 10)) {
console.log(i.to_string())
i = i.add(1)
}
リスト操作
# Python
items = [1, 2, 3]
items.append(4)
// Hakorune
local items = array.create()
items.push(integer.create(1))
items.push(integer.create(2))
items.push(integer.create(3))
items.push(integer.create(4))
🏗️ アーキテクチャ
トランスパイラーのフェーズ
-
パース
- Pythonコードをパース
- AST生成
-
型推論
- 型ヒントの解析
- 型推論の実行
- 型情報の付与
-
変換
- Python AST → Hakorune AST
- イディオム変換
- 最適化
-
コード生成
- Hakorune ASTからコード生成
- フォーマット適用
- 出力
変換ルール
| Python構文 | Hakorune構文 | 備考 |
|---|---|---|
class |
box |
クラス→Box |
__init__ |
birth |
コンストラクタ |
self |
me |
自己参照 |
for ... in range() |
loop(...) |
ループ |
if ... elif ... else |
if ... elif ... else |
条件分岐 |
def func() |
func() |
関数定義 |
x = y |
local x = y |
変数宣言 |
list[index] |
list.get(index) |
配列アクセス |
dict[key] |
dict.get(key) |
辞書アクセス |
🔧 技術的課題
1. Python固有機能の扱い
サポートする機能
- 基本データ型(int, str, list, dict)
- クラス・メソッド
- 制御構文(if, for, while)
- 関数定義
サポートしない/制限する機能
- メタクラス
- デコレーター(一部のみ)
- ジェネレーター
- 内包表記(将来対応)
- async/await(Phase 15以降)
2. 型推論
- 型ヒントを優先使用
- 未注釈の場合は推論
- 推論不可能な場合は
AnyBox
3. ネーミング変換
- snake_case → camelCase(オプション)
- Python予約語の回避
- Hakorune予約語との衝突回避
📊 実装ステータス
| コンポーネント | ステータス | 備考 |
|---|---|---|
| 変換仕様 | ✅ 完了 | 設計書完成 |
| パーサー統合 | 📅 未実装 | - |
| 型推論 | 📅 未実装 | - |
| AST変換 | 📅 未実装 | - |
| コード生成 | 📅 未実装 | - |
🎯 使用例
# コマンドライン(将来)
hakorune transpile script.py -o script.hkr
# プログラマティック(将来)
local transpiler = new PythonTranspiler()
local hakorune_code = transpiler.transpile(python_code)
⚠️ 制限事項
-
完全互換性は保証しない
- Pythonのすべての機能はサポートしない
- 一部機能は手動移植が必要
-
実行時動的機能
eval(),exec()は変換不可- 動的属性追加は制限
-
標準ライブラリ
- Python標準ライブラリは自動変換しない
- Hakorune equivalent への手動マッピング必要