1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

C言語後継有力候補 Zig言語上で走行する日本語プログラミング言語Mind8中間コード(Hello by mind8)

1
Posted at

はじめに

天才鬼才@killyさんが開発したMind(6以降)の走行系は実装言語非依存の中間コード処理系となっており現在はC言語で実装されていますが、他言語での実装も構造的に可能なつくりとなっております。Zig言語というのがC言語後継有力候補らしく、C言語ヘッダが読み込めるとかでC言語からの移行が容易そうなので、試しにZig言語版のMind8中間コードディスパッチャも実装してみたくなりました。

通常の人間系であれば気の遠くなる作業ですが、昨今GitHub Copilot Pro+の余裕のある推論量に触れて、こういう機械的な移行のようなことって得意なのことが別件(C#,Javaによる互換実装)がほぼ確定しておりましたので、やらせてみる(やっていただく)ことにしました。

使用AI

Microsoft Copilot

Windows11アプリケーションのMicrosoft Copilot。昨年末から日本語プログラミング言語あおい Aoi(Re:Mind)の原型を作成してもらった生成AI123。モードは「無料プラン」。

GitHub Copilot

GitHub CopilotのPro+版。あおい実装4と検証の主担当。

AI仕様駆動開発の実際

Microsoft Copilot

日本語プログラミング言語あおいがネィティブにコード生成するとしたらどれがいいですかね、やっぱRustですかねとか雑談しておりましたら、いまはZigってのもありますよと教えていただいたところでございました。

GitHub Copilot

プロンプト1

完了状態が
C:\developments\vscode\mind8dispatch\docs
Mind8ディスパッチャC#互換実装次の優先項目1の実行プラン完了レポート.md
Mind8ディスパッチャC#互換実装次の優先項目3の実行プラン完了レポート.md
Mind8ディスパッチャC#互換実装次の優先項目3の実行プラン完了レポート.md
Mind8ディスパッチャC#互換実装次の優先項目4の実行プラン完了レポート.md
と同等となるように
docs\Mind8ディスパッチャZig互換実装の実装状況.md
の残課題を実行して
docs\Mind8ディスパッチャZig互換実装の実装状況完了レポート.md
を出力してください。

このプロンプト一発で完了したわけではないのですが、概ね良好に進行しました。C#互換実装のリソースは参考情報として最大限活用していますが、Zigはオブジェクト指向言語ではないので、元のCディスパッチャに近いつくりとなっています。

生成レスポンス1

実装を進め、実装状況完了レポートv2を出力しました。

C関数の対応番号を 30 → 269番号へ拡大。
動的実行、変数・メモリ操作、整数・ビット演算、文字列格納、標準出力などを追加・修正。
ユニットテスト33件、C/Zig差分試験74件が成功。
hello系MCO 10本すべてで標準出力・終了コードが一致。比較にはSerialを42へ変更した一時コピーを使用し、原本は変更していません。
zig build check による一括検証と、実行ファイルのビルド・配置を確認済み。
全面互換はまだ未達です。 全743番号中474番号が未実装です。残る機能、未検証条件、比較上の制約をレポートに明記しました。

docs\Mind8ディスパッチャZig互換実装の実装状況完了レポートv2.md の一部抜粋

# Mind8ディスパッチャ Zig互換実装の実装状況 完了レポート v2

## 結論
全面互換に向けて、v1の基礎VMから、制御・変数・メモリ・整数演算・文字列・標準
出力を実行できる段階へ実装を進めました。

- 通常ユーザーカーネルの対応番号を **30から269へ拡大**しました。
- **10本すべてのhello系MCOでC版と標準出力のバイト列・終了コードが一致**しま
 した。
- **33件のユニットテストと74件のC/Zig差分試験**が成功しました。
- 未実装番号が残ることを機械検出するstrict検査も用意しました。

**全面互換は未達です。** Cテーブル743番号のうち474番号が未実装であり、対応済
み番号にも未検証の特殊条件があります。本書の「完了」は今回の実装・検証作業の
完了を指し、Cランタイム全体の置換完了を意味しません。

実行結果

PS C:\developments\vscode\mind8dispatchzig> zig-out\bin\mind8dispatcher.exe hello.mco                             
Hello by mind8
PS C:\developments\vscode\mind8dispatchzig> 

おわりに

以上です。いかがでしたでしょうか?

C言語の資産をどうするかはIT業界内での重要課題なのですが、このあたりは開発者様のご意向次第という感じでこれはあくまで部外者による前提条件の概念実証という形となります。C#やJava版のように大きく構造が変わることはなさそうなので、移行先としてはよいかもしれません。C#やJava版の互換実装はこれらの言語の膨大なライブラリにネィティブにアクセスできるようにという目的なので、本件とは趣旨が異なります。

  1. Microsoft Copilotで日本語トランスコンパイラ言語 Re:Mindをいじりたおす - Qiita ↩

  2. Copilotが生成した日本語トランスコンパイラ言語 Re:MindのASTパーサが動作するまで - Qiita ↩

  3. Copilotが生成した日本語トランスコンパイラ言語 Re:MindのC#コード生成が動作するまで - Qiita ↩

  4. AIとつくる日本語プログラミング言語Aoi (あおい) - Qiita ↩

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?