Files
hakorune/docs/guides/loopform.md

1.8 KiB
Raw Blame History

LoopForm ガイド — ループ正規化(ユーザーマクロ)

目的

  • while/for/foreach を Nyash のユーザーマクロで“キャリアタプル”に正規化し、MIR/LLVMにとって最適化しやすい形へ落とし込む。

使い方(予定)

  • マクロ登録(例):
export NYASH_MACRO_ENABLE=1
export NYASH_MACRO_PATHS=apps/macros/examples/loop_normalize_macro.nyash
  • 自己ホスト前展開autoを利用して、parse直後にLoopForm展開を有効化PyVM環境

JSON生成ユーティリティJsonBuilder

  • ループ正規化では AST JSON v0 の断片を安全に構成する必要があります。
  • 最小ユーティリティとして apps/lib/json_builder.nyash を提供していますincludeで読み込み、文字列でJSON断片を生成
  • 例:
local JB = include "apps/lib/json_builder.nyash"
local v_i   = JB.variable("i")
local v_sum = JB.variable("sum")
local lit_0 = JB.literal_int(0)
local assign = JB.assignment(v_i, JB.binary("+", v_i, JB.literal_int(1)))

正規化の考え方

  • ループで更新される変数群をタプルに束ね、ヘッダに“1個のφ”を置く。
  • break/continue は“次キャリア”または“現キャリア”で遷移し、一貫した合流点を保つ。

対応状況MVP→順次拡張

  • Week1: whilebreak/continue無し
  • Week2: break/continue/ネスト最小対応、キャリア自動抽出
  • Week3: for/foreach限定

制約MVP

  • try/finally/throwとの相互作用は未対応。例外は後続フェーズで設計を明記。

検証

  • macrogolden展開後ASTのゴールデン
  • LLVM PHI健全性スモーク空PHI無し、先頭グループ化

参考

  • docs/development/roadmap/phases/phase-17-loopform-selfhost/