SML# 0.20 から Tcl を呼ぶ [SML]
SML# 0.20 [1] が Windows バイナリで配布されるようになったと聞いて試してみた。しかも FFI が強力らしいので Tcl のコマンドを解釈してみた。
G:\>smlsharp SML# 0.20 (2007-03-30 10:47:08 JST) # open DynamicLink; open DynamicLink # val tcl = dlopen "C:\\Tcl\\bin\\tcl84.dll"; val tcl = 0x10000000 : unit ptr # val Tcl_CreateInterp = dlsym (tcl, "Tcl_CreateInterp") : _import () -> unit ptr; val Tcl_CreateInterp = fn : unit -> unit ptr # val Tcl_Eval = dlsym (tcl, "Tcl_Eval") : _import (unit ptr, string) -> int; val Tcl_Eval = fn : unit ptr * string -> int # val Tcl_GetStringResult = dlsym (tcl, "Tcl_GetStringResult") : _import unit ptr -> UnmanagedString.unmanagedString; val Tcl_GetStringResult = fn : unit ptr -> UnmanagedString.unmanagedString # val interp = Tcl_CreateInterp (); val interp = 0x06892d38 : unit ptr # Tcl_Eval (interp, "puts {Hello World}"); Hello World val it = 0 : int # Tcl_Eval (interp, "puts xxx {Hello World}"); val it = 1 : int # Tcl_GetStringResult interp; val it = 0x06892e50 : UnmanagedString.unmanagedString # UnmanagedString.import it; val it = "can not find channel named \"xxx\"" : string #
すばらしい。ネイティブコンパイラが完成したら OCaml より便利かもしれない。
[1] http://www.pllab.riec.tohoku.ac.jp/smlsharp/ja/
コメント 0