表題のライブラリを作成しました。
山口さんが開発されたPyaq(https://github.com/ymgaq/Pyaq)という9路盤の囲碁AIをJavaScriptの移植(A9.js)したのですが、そのときに、
- UIのレスポンスを維持するためにAIの演算はワーカーで実行したい
- でも、ワーカーではcanvasがまだ使えないのでWebGL/WebGPUを使ったニューラルネットワークアクセラレーションが利用できない
という問題がありました。
なので、メインスレッドとワーカースレッドの小洒落た通信の枠組みが必要になったのでこのライブラリを作りました。
特長は、メインスレッド、ワーカースレッドどちらをクライアントにもできる対称な構成です。
実際、メインスレッドからワーカーに探索をリクエストする部分とワーカーがメインスレッドにニューラルネットワークの評価をリクエストする部分を同じライブラリで実現しています。
(当たり前だと言われたらそれまでですが^^;)
シングルスレッドで設計したクラスの変更がほぼ必要ないところも特長の一つです。
(詳細になりますが、実際には、ニューラルネットワークの評価結果(Float32Array)をTransferListとして渡すとデタッチができないらしく、サーバー側(メインスレッド側)でコピーが必要でした)
必要の際にはご活用ください。
本当はメタプログラミングでクライアント側クラスを自動生成したかったのですが、JavaScriptは未実装メソッドがコールされたときにフックする方法がなさそうなので諦めました。いい方法があれば教えてください。