荒井省三のBlog

  • 本日はTechEdのセッション当日です

    何とか「.NETにおけるLightweight Language」のデモ準備が終わりました。最終的に利用するものは、Iron Ruby SVN 138とIronPython Changeset37512です。これにIronRuby アルファ、IronPython 2.0 ベータ4です。IronPythonのChangeset 38029が昨日にアップされていますが、含まれているDLRがIronRubyよりも新しくなっているために、Changeset37512にしました。これらのChangesetをビルドして試すと、ベータ5と名付ける予定だということがバージョン番号から理解できます。

    Changeset38029では、LanguageContextクラスに変更が入っている模様なのですが、まだ詳細を調べきれていません。お時間のある方は調べてみてください。

  • 明日からTechEdが始まりますが、まだデモの準備中です

    いよいよ明日からTechEd Yokohamaが始まります。実は、まだデモの準備をしている最中なのですが... 先週中にIronRubyとIronPythonプロジェクトで動きがありました。具体的には、IronRuby SVNが135になって週末には137になっていました。IronPythonでもChangeset 37512が週末にUpされました。これらのリビジョンに含まれるDLRですが、かなり同期している模様です。前回のエントリに記載したChangeset36656とSVN132に含まれるDLRとは異なりますので、ご注意ください。

    動かないというものではありませんが、OLEオートメーション系のリファクタリングが行われていました(これだけではありませんが)。IronRubyのソースコードを調べていくと、インタロップ・アセンブリを利用するためにSystem.Scripting.Comネームスペースを使用していました。またIronRuby SVN135からは、RubyというネームスペースがIronRubyというネームスペースに変更になっています。

  • IronRubyとIronPythonのDLRが同期した模様

    FXさんからのフィードバッグから色々と調べていました。

    IronRuby SVN 132とIronPython Changeset35778で試したところDLRが同期している模様です。両方のソースコードからビルドして組み合わせて見ると問題なく動作することを確認できました。Changeset35778の詳細をまだ調べきれていませんが、ベータ4に対してネームスペースなどのリファクタリングが行われています。一番顕著なのが、System.Scripting.Runtimeネームスペースが、Microsoft.Scripting.Runtimeになっていることです。つまり、Microsoft.Scripting.CoreプロジェクトからMicrosoft.Scriptingプロジェクトへ変更になっているのです。

    IronPythonからはclrモジュールのUse関数を利用することでRubyのスクリプトを実行することができます。またIronRubyのソースコードの大きな変更は、署名無しのソースツリーになったことです。

    これを使って来週に迫ったTechEd Yokohamaのデモをこれから考えるところです。

    追記:FXさんよりフィードバックを頂いて、Changeset36656がリリースされているそうです。このChangesetを使って試してみるつもりです。

  • IronPython 2.0 Beta4 に含まれるDLR

    IronPython 2.0 Beta4のリリースに伴ってDLRにも変更が行われています。細かく調べていくと、Microsoft.Scripting.Core.dllに含まれるネームスペースが大きく変更されています。具体的には、以下のようなものです。

    • Microsoft.Scripting -> System.Scripting
    • Microsoft.Scripting.Runtime -> System.Scripting.Runtime
      など
    • Microsoft.Scripting.Ast -> System.Linq.Expression

    現時点では、全てがSystemネームスペースに移行しているわけではありません。一部、Microsoft.Scriptingネームスペースも残っています。また、Microsoft.Scripting.dllの方は、ネームスペースの変更はありません。

    現在、TechEdの資料やサンプルを作成しているのですが、上記のネームスペース変更以外にLanguageContextクラスなども変更になっており、色々と調べています。この関係で、IronRubyのSVN 127のソースコードも調べていくと、DLRはSystemネームスペースになっているものが含まれています。でも、Beta4とは違うバージョンのためIronPython 2.0 Beta4からIronRubyを利用することはできませんでした。

  • IronPython 2.0 の OLE オートメーション・サポート

    ShiroさんのブログにIronPython 2.0 Beta4でOLEオートメーションサポートがどのようになるかが詳しく解説されています。彼の記述した内容の概要は、以下のようなものです。

    • IronPython 1.x系では、オンザフライでインタロップ・アセンブリを生成するか、インタロップ・アセンブリを明示的に指定してCOMオブジェクトを使用する(チュートリアルにあるマーリンのデモがこれです)。
    • IronPython 2.0Beta3では、デフォルトでPIAかインタロップアセンブリを生成します(実際に私がBeta2で実験すると、-X:PreferComDispatchスイッチによってSystem.__ComObjectを使用していますし、Beta3ではスイッチが削除されています)。
    • IronPython 2.0Beta4では、デフォルトでSystem.__ComObejctを使用するようになります。-X:PreferComInteropAssemblyスイッチを使うことでインタロップ・アセンブリを使用するようになります(彼のブログでは、DLR_PreferComInteropAssembly環境変数と書かれています)。

    DLR上のOLEオートメーション・サポートは、1)Type.GetTypeFromProgIDメソッド、2)clr.AddReferenceToTypeLibrary関数を使う方法と従来通りインタロップ・アセンブリを使用する方法になります。このような仕様にした理由として、VB6のCreateObject関数と同様の仕様にするためであると彼は説明しています。

    ChageSet34570を使って試してみると彼のブログに記述されているような動作を確認することができました。但し、DLR_PreferComInteropAssembly環境変数だけは動作しませんでした。ソースコードを調べていくと、環境変数としてのサポート機能はまだ実装されていないようです。これ以外にもOLEオートメーション・サポートに関する内容がShiroさんのブログに記述されていますので、ご興味がある方は参照してください。

  • ドメイン特化型開発の書籍

    色々な方たちのご協力を得ながらDomain-Specific Development with Visual Studio DSL Toolsの書籍の作業を行っていました。このほど出版していただける日経BPソフトプレスさんから TechEd 2008 Yokohamaで関連書籍のイベントを開催していただけることになりました。微力ながら私も参加させていただきますので、宜しくお願いいたします。

  • IronRuby アルファのリリース

    John Lam が OSC2008で最初のバイナリーセットであるアルファをリリースしたとアナウンスしています。RubyForgeのIronRubyプロジェクトからダウンロードできます。合わせて、IronRubyの協力者向けの(Contributor)プロジェクトもアナウンスされています。

    これから色々と試してみる予定です。
    リポジトリをチェックすると127になっています。

  • DLR ホスティング API の概要

    Silverlight 2.0 Beta2やIronPython 2.0 Beta3に含まれているDLRのホスティングAPIの概要図を作成しました。
    DLR hosting API 

    TechEd Yokohamaに向けて準備したものです。この作業の中でBeta2向けに移植した簡単な言語シリーズもBeta3向けに移植しています。Beta2からBeta3への移行は、それほど難しくないので、TechEd Yokohamaが終了してから公開する予定でいます。それまでに新しいベータがでなかればという条件が付きますけど。

    会場では可能な限り最新版のDLRでお見せしたいと考えています。

  • TechEd2008 の資料を作成中です

    IronPython 1.1.2RC1がリリースされています。バグフィックスが主体のようです。
    今は、今年のTechEd Yokohama のプレゼンテーション資料の作成を行っています。テーマは「Lightweight Language」にしたので、内容を色々と検討しています。今、考えているのは以下のようなものです。

    • DLRホスティングモデル
      (コンソール、Silverlight 2.0)
    • オブジェクト共有(DynamicObject)
    • 俺様言語
    • DynamicSiteの利点と欠点
    • etc

    DLRのASTに関しては、プレアルファから極端な変更がないので、基本的な考えは昨年のセッションを参考にすれば良いかと考えています。今回はホスティングモデルの拡張性を中心にしようかと考えています。ホスティングモデルが理解できれば、John Lamが公開しているASP.NET MVC + IronRuby や Silverlight 2.0のDLR対応も理解できるようになりますので。

    #IronPythonのChangeSet 34286とIronRuby SVN Rev123を調べていて気が付きましたが、IronRuby側のDLRがIronPythonに同期し始めている模様です。

  • Dynamic Silverlightの記事が公開されました

    遅まきながら日経ソフトウェア7月号に掲載された「Silverlightで動的言語を使う」の記事が日経BP IT Proでオンライン公開されました。詳細な記事というより、IronPythonやIronRubyでSilverlightアプリが作れるという紹介程度なんですけど...
    SilverLight2.0 Beta2でIronPythonを使う場合に、追加のアセンブリを読み込むには
    import clr
    clr.AddReference("アセンブリ名")
    とすることで読み込むことができるようになっています。Beta1の場合は、アセンブリの完全名である必要があったのですが、Beta2から使いやすくなっています。IronRubyの場合は、requireでアセンブリの完全名を記述するのは、Pre Alphaの頃と同じですのでご注意ください。

  • IronPython ソースコード・リポジトリ

     IronPython 2.0 Beta3が公開されてから気がついたのですが、ソースリポジトリにBeta3が入っていないですねぇ。何ででしょうね。少し、不思議な気がしています。まだまだ準備に入れていないのですが、今年のTechEd横浜でもDLR関係のセッションを持たせていただくことになりました。内容などはまだまだこれからです。

    米国のTechEdでは、IronPythonとIronRubyのハンズオンがあったようです。それと今月の初めにあったRailsConfでIronRubyを使ってRuby on Railsを動作させたようです。最近のJohn Lamのブログには、IronRubyでASP.NET MVCのサンプルが掲載されています。これらのサンプルも面白いと思うのですが、やはりDLRの面白さはオブジェクトの共有にあると思うので、この点からは色々と考えなきゃと思っていたりします。

    何か、取り留めもない話になりましたけど近況報告ということです。
    #6/28は、札幌におりますので、OSC2008にいらっしゃる方が居りましたら、お気軽にお声をおかけ下さい。

  • IronPython 2.0 Beta3

    OPC Diaryさんからトラックバックをいただいたように、リリースされています。リリースノートには、DynamicSilverlight SDK for Beta2に同期したものとあります。ダウンロードして中身を見ると、以下のようなものが含まれています。

    • Chiron
    • Microsoft.Scripting.Silverlight

    この2つは、Silverlight 2.0 Beta2で使用するもので、DynamicSilverlight SDKに含まれているものと同じです。私は、現在のところSilverlight を使ったDLRホスティングを調べていて、DLRコンソールを使って動作を確認しようとしています。
    DlrConsole 
    なかなかDLRのホスティングがIronPython 2.0Beta2から変更になっていて、上記のように動かすのが大変でした。特に、Microsoft.Scripting.Hostingネームスペースの中が大きく変わっています。まだ詳細は、調べきれていませんがIronRuby rev113に含まれるDLRと同じものを使うように変更したのが、このベータ3のようにも見えます。実際のところは、開発チームに聞かないと不明なんですが。IronRubyのメーリングリストでは、DLRはIronRuby用に変更したもの使っていてRailsConf(この前開催されました)の後から、IronPythonプロジェクトのDLRへと移行していくとありました。なので、次のリリースか、あるいはChangeSetを見た方が、方向性ははっきりするような気が私はしています。

    この理由は、DynamicSilverlight SDK for Beta1とIronPython 2.0 Beta1のDLRが異なっているという点(この間にMicrosoft.Scripting.Core.dllへの分離が行われいます)とIronRubyプロジェクトが、Microsoft.Scripting.Coreプロジェクトを導入した時点を比較してもソースコードが異なっていたことに起因しています。

    #DLRコンソールの完成度を私は高められないので、実際にサンプルとして公開されるのを待ちたいと考えています。

  • DynamicSilverlight Beta2 SDK

    Silverlight2.0 Beta2がリリースされたのはご存じだと思います。先にIronPython 2.0 Beta2がリリースされていましたが...
    このBeta2に合わせた DynamicSilverlight SDK がリリースされました。3月にリリースされたもの違って、ManagedJScriptの実行モジュールも含まれています。これらに関する情報が JimmyさんのBlogに掲載されています。彼のBlogによると


    新しくなったもの:新しいバージョンの IronRuby、IronPython、Managed JScriptとDLRが含まれていて、サンプルの提供やパッケージ方法(バイナリ、ソース、サンプル)が変わっています。
    最新の配布物:リリースされたパッケージには3種類の言語の最新版が含まれています。知られているようにDLRとSilverlightを統合したものです。注意して欲しいことは、提供されている拡張ライブラリ(DLL)が異なっている点です。つまり、Microsoft.Scripting.Core.dllが増えています。このDLLは、DLRの中心的な機能を持ったものです。そして、Microsoft.Scripting.dllは必須で無いヘルパーやホスティングAPIのみになっています。

    というような事が書かれていました。しばらくは、このバージョンで色々と試してみたいと考えています。

  • CLS規則について

    Nyaruruさんの日記でCLS規則37や38という文言を見て、改めて最近はCLIの仕様を読んでいないなぁと思った次第です。CLIがECMAで最初に承認されてから、ISOでも承認されて、JIS X3016が発行されてから大分、時間がたったなぁと。これから、ISO標準はどの程度の仕様変更が行われたのかなと思って少し調べてみました。現在の状況は、以下のようなものです。

    • ECMA 335 4th Edtion
    • ISO IEC 23271 2nd Edition

    どちらもジェネリックの仕様が追加されたものが最新になっていました。ISOの最初の版は、ECMAの2nd Editionに該当します。この時に定義されていた CLS規則は、41個ありました。このCLS規則が、どのように変更されているかを以下に示します。

    • CLS規則7:enumのフィールドが「value__」であり、RTSpecialNameで印付けされるという説明が追加。
    • CLS規則11、12:ジェネリックに関する記述が追加される。CLS11は、シグネチャに出現する型がCLS準拠である規定です。CLS12は、メンバの可視性とアクセス可能性に関する規定です。
    • CLS規則25:プロパティに関するアクセッサのアクセス可能性に関する規定は、利用されていないという理由により削除されました。
    • CLS規則42から47:ジェネリック型の追加に伴う追加された既定です。

    ご存じだと思いますがCLSとは、共通言語仕様のことで言語間の連携に置いて守らなければならない規則を定めたものです。この改定では、当たり前ですけどジェネリックに関する追加が中心となっています。じゃあ匿名メソッドや匿名型、型のイニシャライザは何に当たるかと云えば、シンタックス シュガーでコンパイラの仕事であるというのが、この使用からも推測することができます。もちろんILDASMで確認すれば、はっきりしますけど。

    補足:IronPython 2.0 Beta2でDLR Beta2が提供されていますが、IronRuby Rev111ではDLRがまだBeta2に同期していません。IronRubyプロジェクトでは、先週・今週にかけて何度もRevが更新されています。その過程を見ていると、DLR Beta2への同期させるための準備も始まっているようです。101から見るとScripting.CoreのHostingがかなり変更されているを確認することができるからです。

  • 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 | 0 Comments
    Filed under: , ,

    Attachment(s): MyCalcB2.zip
More Posts Next page »

© 2008 Microsoft Corporation. All rights reserved. Terms of Use  |  Trademarks  |  Privacy Statement
Microsoft
Page view tracker