brainrot2 途中経過報告1 - まだ見ぬ制御フローグラフの先に
注意: このページにおけるbrainrotは個人が名付けた言語処理系の名前であり、イタリアンブレインロットやBrain rotとは異なります
前回の不定期レポートから一か月半ほど経過し、次世代のbrainrotとして期待されたbrainrot2は今日も開発が進められています。
一度見返してみると、大して進んでないように見えますし、そもそもBrainfuckをこんなに夢中に高速化して何がしたいのかと疑問に思うかもしれません。
しかし、一つを極めた先には、究極の世界が見えます。そこを目指して。
ということで導入はここまでにして、brainrot不定期レポート第二弾を発表します。
次世代に搭載された機能
次世代のbrainrot2において、現在は以下のような機能が実装されました。
1. 制御フローグラフ
brainrot2では、満を持して制御フローグラフIRが実装されました。
従来のbrainrotではジャンプ命令の最適化が困難でしたが、
今回のCFGの導入により、より構造的にプログラムを扱えるようになりました。
2. 高度な最適化
brainrot2では、従来より高度な最適化を施しました。
- デッドコード削除
- 定数畳み込み
- 参照畳み込み
- 分岐のインライン化
- 制御フローのインライン化
- 無駄な命令の削除
これにより、より最適化されたプログラムを実行できるようにしました。
今後実装予定の機能
現状のbrainrot2は基盤が整い、ここからは
"実行速度の底上げ"が課題となります。
そのために、次のステップとして以下の機能を計画しています。
最適化処理中の非最適IRの並列実行
Awibのような大規模なプログラムでは最適化処理に多くの時間を要します。
そのようなケースでは小規模な最適化をするインタプリタに負けてしまいます。
そのため、次回には最適化処理中に並列的に非最適IRを実行する予定になっています。
また、開発中のパフォーマンス測定では、最適化したバイトコードと
非最適IRの実行速度の差が小さいことが分かっており、
非常に合理的な機能と考えています。
静的単一代入による強力な計算最適化
少し前、静的単一代入は複雑が故に諦めたのですが、
今見てみると、静的単一代入でないと解決できないような複雑さ
かつ最適化が可能なIRが多く存在することに気づき、
ブロック内で完結する小規模な静的単一代入によって最適化をする機能が考案されています。
これでより最適化された実行が期待されますね。
よりアグレッシブに高速に動作するインタプリタ
前作ではアグレッシブに高速動作するインタプリタに熱を注いだ一方、
今回の次世代brainrot2ではCFG等によるIR最適化に注力しており、
アグレッシブなインタプリタの開発が不足している状態です。
そのため、全体の完成度が上がった時一気にアグレッシブな
インタプリタを作り上げ、最終的な極限を求める予定です。
まとめ
次世代のbrainrot2では、"最適化可能なIR"という言語処理系として
大きな基盤を手に入れました。これにより今後は並列化や静的単一代入最適化、
アグレッシブなインタプリタによる更なる高速化が期待出来ます。
最後まで読んでいただきありがとうございました。
これからのbrainrotの進展にぜひご期待ください。