はじめに
Mindの単語拡張としてはC言語とTclがありますが、どちらもいろいろたいへんなので、.NET言語、具体的にはC#でMind単語が書けるようになるといろいろラクかなという願望があります。
Mindのランタイム中間コードは非常に実装言語と疎のつくりになっているので原理的には実現可能と考えていましたが、実装がたいへんでとん挫しておりました。(ちょうど2年前)
しかし、昨今GitHub Copilot Pro+の余裕のある推論量に触れて、もしかしてもしかして、こういう機械的なことって得意なのという気がして、やらせてみる(やっていただく)ことにしました。
本記事はその結果報告です。実装・検証自体は上記の記事投稿後の数10時間後には完了していたのですが、人間系の記事化に時間がかかっていたという経過でございます。
お題のC#ソースコードのクラス構成
お手数ですが上記の記事をご参照ください。
クラスの説明と対応ソースファイル構成
お手数ですがこちらも上記の記事をご参照ください。
使用AI
Microsoft Copilot
Windows11アプリケーションのMicrosoft Copilot。昨年末から日本語プログラミング言語あおい Aoi(Re:Mind)の原型を作成してもらった生成AI123。モードは「無料プラン」。
GitHub Copilot
GitHub CopilotのPro+版。あおい実装4と検証の主担当。スーパバイザとしてMicrosoft Copilotを使いGitHub CopilotのCodeAgent推論量を最小化するプロンプトをCopilotで生成しGitHub CopilotのCodeAgentで実行という工法?を採用していました。ただし、Pro+版移行でこの点はあまり気にしなくなっています。
Dispatcherクラス(C#関数配列)
ディスパッチャ本体クラスのC#関数配列部分です。
お手数ですがこちらも上記の記事をご参照ください。
正直ここの実装がしんどかったです。ありがとうGitHub Copilot!![]()
お題のMind8の中間コードファイル
当時、下記のコードの実行部分くらいすぐに実装できるだろうと甘く考えておりましたところ、スタートアップの中間コードが大量に実行されることが判明。
メインとは
「Hello by mind8」を 表示すること。
スタートアップ側の検証コードをはぶいたバージョンのconsoleランタイムを生成して、ステップバイステップバイで走行範囲を広げていたのでした。
c:\developments\vscode\mind8dispatch>dir hello.mco
2024/04/18 20:53 43,544 hello.mco
1 個のファイル 43,544 バイト
詳しくはこちらの記事をご参照ください。
実行結果 お題のMind8の中間コード実行リスト
中断時点で未完走でしたLevel7が完走しました。このずらずらとした数値リストはC実装オリジナルランタイムとの比較検証用に実行中のMコードとスタック状態をリスト出力したものです。75ステップ以前は割愛しています。
76 004E 78 3512 1022 14 8660 1022 8676 116
77 00EC 236 3518 1020 0 0 1022 8676 116
78 0096 150 3524 1022 14 8660 1022 8676 116
79 026D 621 3526 1020 0 1 1022 8676 116
Hello by mind8
80 0020 32 3528 1024 0 0 1022 8676 116
81 0020 32 8678 1024 0 0 1023 116 0
82 801A 32794 118 1024 0 0 1024 0 0
83 002F 47 106 1024 0 0 1023 118 0
84 00A5 165 8236 1024 0 0 1023 118 0
85 00C1 193 8250 1022 10 8238 1023 118 0
実行終り
86 801B 32795 8252 1024 0 0 1023 118 0
87 002F 47 110 1024 0 0 1022 8252 118
88 00A5 165 8210 1024 0 0 1022 8252 118
89 00C1 193 8232 1022 18 8212 1022 8252 118
実行終り時の処理
90 0020 32 8234 1024 0 0 1022 8252 118
91 0012 18 8254 1024 0 0 1023 118 0
92 004E 78 8256 1024 0 0 1023 118 0
93 0014 20 8262 1022 0 0 1023 118 0
例外がスローされました: 'Mind8Kernel.Dispatcher.ExitModule' (mind8dispatch.dll の中)
プログラム '[15704] mind8dispatch.dll' がコード 0 (0x0) で終了しました。
無事に完走しました。最後の例外スローはコード復帰用の意図的なもので正常です。
おわりに
以上です。いかがでしたでしょうか?本件しばらくつづきがあるかもしれません。やるとしたら次回は検証用Mindのソースコードを増やしたmcoを実行してみます。
.NETの膨大なライブラリをMindで使えるようになるということに意義を見出していました。(実際には走行系の他にコンパイラ系の対応も必要ですが、そのあたりは開発者様のご意向次第という感じ?これはあくまで部外者による前提条件の概念実証という形となります。)