Orthoclaseでうごくスクリプトエンジン
今の実装状態だと,どれくらい動くのか気になるので確かめてみた.
JScript
これに最適化されているのだから当たり前に動く.
VBScript
logをLog(対数関数)に取られてしまう以外はしっかりと動く.事前バインディングのハンドラは例によって,event_プレフィックス付きの関数が呼ばれるようだった.
#VBScript Function event_onLoad() Print "あーうー>_<" End Function Function event_onChannelText(prefix, channel, text) If text = "おはよう" Then Call send(channel, "おはよ〜") End If End Function
PerlScript
一筋縄じゃ行かないだろうなー,と思ったけどすんなりと通って驚いた.しかしlog(対数関数), print(コンソール出力関数), send(ソケット送信関数)と言ったものが防いでいて使いにくいかも知れない(sendはsendRawで代用できる).WSHのように,WScriptとかWindowオブジェクトからメンバにアクセスできれば良いんだけど,多くは望まない.事前バインディングのハンドラはVBScriptと同じく,event_プレフィックス以下略だった.
あと,有名なバグらしいけど,マルチバイト文字を挟むとその半分のバイト数しっぽ切れるらしく,しっぽをコメントでパディングする必要があった.テロメアみたい.
#PerlScript sub event_onChannelText { my ($prefix, $channel, $text) = @_; if ($text =~ /^おはよう$/) { sendRaw("NOTICE " . $channel . " :おはよ〜\r\n"); } } #padding >_< ##################################################################
PHPScript
system("explorer")とかしてみると動いていることは分かるけど,GetItemInfoとか全然呼んでこない.一体どういう仕様なんだ,これは・・・
RubyScript
IGlobalInterfaceTableさえ真面目に動けば・・・適当なテストアプリのスクリプティングホストだと動くから本当に謎い.スクリプトスレッドを別スレッドに切っているようで下手にファイバー使うと吹っ飛ぶ素敵仕様でした.
PythonScript
論外.何処かで調べてきたエンジン起動手続きではうんともすんとも言わない.SetScriptStateがないとかほざく.順番を入れ換えすぎるとアクセス違反で落ちる.どんだけピーキー・・・
HaskellScript
今更Hugs98とかねぇ.最終更新も恐ろしく古いし・・・WinHugsを消すのが面倒なのでパスした.
結局まともに動いたのがJScript, VBScript, PerlScriptの三種類.前2つは流石標準搭載のエンジンと言ったところ.PerlScriptは意外だったけど,ちゃんと動いてくれないとねぇ.PerlScriptの出来を見ると,ActivePythonのScriptなら動くかも・・・とか思ったりする.
それよりこのわがままっ子のPHPScriptを動かしたいんだけど・・・ちょっとやそっとじゃ動きそうにないし,何処かに解決の糸口になりそうなものないかなぁ・・・