Welcome to MSDN Blogs Sign in | Join | Help
DLR beta2 を使ったホスティング

ついにIronPython 2.0 Beta2が公開されました。以前のエントリでも言及しましたが、DLRを構成するアセンブリが、「Microsoft.Scripting.dll」と「Mictosoft.Scripting.Core.dll」に分離されました。リリースノートに記述されていますが、DLRを使った動的言語向けの機能をまとめたのがCoreであり、Scripting.dllは再利用可能なヘルパー実装であるとの説明があります。この公開されたばかりのBeta2のDLRを使って、何度か試してきた「簡単な言語」を動くようにしたいと思います。

最初にコンソールを実装するするためのConsoleHostクラスですが、ネームスペースがHostingからHosting.Shellに変更になっており、Initializeメソッドが廃止になっています。このため新しく記述しなおしたのが、以下のコードとなります。

protected override CommandLine CreateCommandLine()
{
    return new Hosting.MyCalcCommandLine();
}

protected override Microsoft.Scripting.Hosting.ScriptEngine
                              CreateEngine()
{
    return Runtime.GetEngine(
             typeof(Runtime.MyCalcLanguageContext));
}


CreateEngineメソッド」がBeta1までのInitializeメソッドに相当します。そして「CreateCommandLineメソッド」が新しい追加されたもので、コンソールの独自のプロンプトなどを実装するCommandLine実装のインスタンスを戻します。この機能によってLanguageContextクラスのGetServiceメソッドで行っていたCommandLineなどが不要になります。

次に上記で説明したCreateCommandLineメソッドによりLanguageContextクラスから「GetService」メソッドを削除します。またGetServoceメソッドの削除により、OptionParserクラスの実装も削除します。そしてLanguageContextで変更しないといけないのが、「ParseSourceCode」メソッドになります。このメソッドの内容を以下に示します。

public override Microsoft.Scripting.Ast.LambdaExpression
                 ParseSourceCode(CompilerContext context)
{
    string code = context.SourceUnit.GetCode();
    context.SourceUnit.CodeProperties = SourceCodeProperties.None;
    // Ast.LambdaがExpression.Lambdaに変更 for Beta2
    LambdaBuilder codeblock = Expression.Lambda("", typeof(object));
    //LambdaBuilder codeblock = Ast.Lambda( "", typeof(object));
    //CodeBlock codeblock = Ast.CodeBlock(code);
    codeblock.Body = Parser.MyCalcParser.ParseCode(code);
    return codeblock.MakeLambda();
}


コメントでも記述していますが、Microsoft.Scripting.Ast.Astクラスが廃止され、同等の機能がMicrosoft.Scripting.Ast.Expressionクラスにまとめられました。この変更を受けて、MyCalcParserとPrintといったAstを使っていたクラスを同じように変更する必要があります。ここまでの変更が完了すれば、DLR Beta2を使って問題くなく動作するようになります。

またChangeSet32648を使ってご紹介したIronPythonのclr.AddReferenceToTypeLibraryメソッドは、IronPython 2.0 Beta2 で実装されています。このためIronPythonでのOLE Automationサポートが使いやすくなっています。

Posted: Thursday, May 08, 2008 5:26 PM by shozoa
Filed under: , ,

Attachment(s): MyCalcB2.zip

Comments

No Comments

Leave a Comment

(required) 

(required) 

(optional)

(required) 

  
Enter Code Here: Required

Comment Notification

If you would like to receive an email when updates are made to this post, please register here

Subscribe to this post's comments using RSS

Page view tracker