sdlsdk 改め AgDLR 0.5 がリリースされてたので触ってみた。

sdlsdk 改め「AgDLR 0.5」が新しくリリースされていたので簡単にメモ。


昨日、半分寝ながら書いていたせいで「AgDLR」を「AgSDK」と誤記していたので、修正しました。

配布されてるとこ

含まれているもの

  • Chiron.exe(DLR 用の開発ユーティリティ、テストサーバ兼 XAP パッケージャ)
  • IronPython 2.6 pre-alpha (for Silverlight)
  • IronRuby 0.3 (for Silverlight)
  • サンプルコード
    • Python
      • 3dshapes
      • bubbles
      • clock
      • collateraldamage
      • fractulator
      • pageturn
      • photoparticle
      • repl
    • Ruby
      • clock
      • photoviewer
      • repl

「repl」ってのが AgSDK 0.5 になって新しく追加されたヤツのデモです。
Managed JScript の DLL が消えてるのが気になるんですが、とうとうやる気無くしたんですかねぇ?

REPL って何?

「Read-Eval-Print Loop」の略で、DLR言語用のインタラクティブコンソールのことです。これ、今回からDLR自体に機能追加されたようで、Microsoft.Scripting.Silverlightの下にReplなんて名前のクラスがありました。

REPL で出来ること

実行中のプログラムをコンソールから触れる

いわゆる Firebug のコンソールみたいなことができます。
XAP をホストしている HTML の に「console=true」なんて値が設定されていると、以下のようなコンソールが表示されるようになります。このコンソールからは実行中のアプリの変数にアクセスできちゃったりします。

f:id:terurou:20090325044339p:image

簡単にインタラクティブコンソールを作れる

サンプルコードをそのまま転載するだけになりますが、コード見たほうが判りやすいでしょう。

IronPythonでのREPLサンプルコード

import sys
from Microsoft.Scripting.Silverlight import Repl
from System.Windows.Browser import HtmlPage

replDiv = Repl.Create()
HtmlPage.Document.Body.AppendChild(replDiv)
Repl.Current.Start()

sys.stdout = Repl.Current.OutputBuffer

IronRubyでのREPLサンプルコード

include Microsoft::Scripting::Silverlight
include System::Windows::Browser

replDiv = Repl.create
HtmlPage.document.body.append_child replDiv
Repl.current.start

class IO
  def write(str)
    Repl.current.output_buffer.write(str)
  end
end

これだけでのコードで、以下のような感じのインタラクティブコンソールが動いちゃいます。XAML すら必要なしです。実質的に「Repl.Current.Start()」とやってるだけで、「実行コンテキスト作って…」みたいなのがまったく不要なのがおもろいですね。

f:id:terurou:20090325041257p:image

AgDLR 0.5 を触った感想

REPL の威力は半端無い…。これがあると DLR 開発の効率が結構変わってきそう。

でも、サンプルを触ったりと一通り弄ってみましたが、どうも MIX '09 にあわせてリリースされた感が強いのも確かですね。動きが怪しいところがあるので、次バージョンが出るまではスルーしといても良さそうです。

IronPython の DLL だけ 2.0.1 のやつに差し替えて動くかなぁと思って試したものの、エラーが出て撃沈したのは内緒。

ネタ元

jimmy.thinking: Silverlight Dynamic Languages SDK 0.5

こっちには「REPL に Test Suite 組み合わせるとすげー便利じゃね?」(超意訳)みたいな事が書いてあります。