===== 概要 ===== * Sodaにおけるyield関数をつかった動作について、明らかに遅いので調べてみたところ、Mutex関数が絡んでるのでその記事を書く。 ===== 詳細 ===== * SodaではYield関数を実行する際、RunUntilDone関数の外へ抜けて、SDLへ待ち合わせの命令をかけて、yieldから元の処理に戻すときにSDLと協調する。 * ただ、現状のバージョンではこの待ち合わせ処理での時間がかかり過ぎて、結果として処理そのものが全体的に遅延している。 * 参考になる動画\\ https://www.youtube.com/watch?v=P3PDALrXurs * 原因として考えられるのは、待ち合わせ処理でMiniScriptで実装しているREPLの待ち合わせも行うんだけど、このウェイト時間があまりに大きいせいで、yieldの処理に追加してウェイトが入る状態になってる。 ===== 解決策 ===== * Sodaの内部を修正する。 * {{:soda:スクリーンショット_2025-04-19_213120.png?600|}} * 「interp.REPL(inp, 0.1)」となっている部分の数値を0.01にする。 * これで待ち時間は減る。 * ただ、この上だとREPL絡みで問題が起こる可能性があるので、デバッグは必要。