[TechDays 2010] Dynamic のデモについて

TechDays 2010が終わりましたので、参加者の方へのフォローアップ(デモを失敗した自分へのフォローアップも含みます)を兼ねて、何回か不足していると思われる内容を記述していきます。今回は、Dynamic(動的)に関して説明します。 最初にPythonのコードを使って、以下のような図形を描画しました。   このデモ(BadPaint.exe)は、C#でWPFを使って作成しています。上記のようなシェイプを描画したPythonコードを以下に示します。 from System.Windows.Controls import Canvas from System.Windows.Shapes import * from System.Windows.Media import * import math dim = min(Application.Painting.ActualWidth – 20, Application.Painting.ActualHeight – 20) / 2 for i, color in zip(xrange(0, 360, 10), dir(Brushes)): rect = Rectangle(Width=20, Height=20, Fill=getattr(Brushes, color)) Application.Painting.Children.Add(rect) Canvas.SetTop(rect, dim * math.sin(i * math.pi * 2 / 360) +…

0

[TechDays].NET Framework 4 時代の言語を担当します

Tech・Days 2010では、「.NET Framework 4時代の言語」というセッションを担当します。概要にも記載していますが、扱うテーマは以下の3つになります。 Dynamic (動的) Declarative (宣言型) Concurrent (同時実行) 最初のテーマであるDynamicについては、DLRが提供されることで何ができるかというのがメインテーマになります。ここでお見せする予定のデモとしては、C#<->IronPython、C#<->IronRubyなどの静的言語と動的言語間の相互利用になります。両方を組み合わせることで、どういうことが実現できるかについて説明ができればと考えています。 2番目のテーマとしては、宣言型プログラミングの定義に従って XAML と Visual F#を取り上げます。XAMLについては、.NET Framework 4で提供される System.Xamlを説明する予定です。 F#は、関数型言語としての基本的な部分をご説明することを考えています。 3番目のテーマに関しては、これが一番難しいと感じています。Concurrentという単語を「同時実行」と訳していますが、「並行」と訳す場合もあります。Parallelという単語では、並列と訳するわけです。一般的に並列プログラミングと呼んでも、並行プログラミングと呼ばれることは少ないわけです。並列か並行かというのは、言葉の定義が大切なのですが、並列プログラミングに関するトピックはMSDN ライブラリの中では、Advanced Topicになっているため、一般の人には理解しにくいのではないかと考えています。従って、どのように説明するかという点に関しては、未だに検討しています。 すべてのテーマに関して考えていますのは、 今迄がどうだったのか .NET Framework 4 でどうなるのか ということです。たとえば、Dynamicですが今迄は提供されていませんでしが、これからは提供されるわけです。そうすると、モックオブジェクトと本番オブジェクトを入れ替える場合に「Dynamic」を使うことで依存性を気にしないで入れ替えることが可能になります。もちろんプログラミング的には、インターフェース継承などを使って入れ替える方が、記述ミスの少ないプログラムを記述できますし、実行速度も速くなります。ですが、オブジェクトのインスタンスを作成するFactoryクラスなどを用意する必要があるわけです。これをDynamicにすることで、FactoryクラスがDynamicオブジェクトを返すことで、どのようなオブジェクトでも扱えるようになるわけです。もちろん、知らないメンバーを呼び出すことはコストがかかりますので、呼び出すメンバーの名前に関しては知っている必要がありますが、インターフェースを使うことなく実行時に解決できるのが、DLRのメリットになります。また、2度目以降の呼出しは、サイトバインダーによってキャッシュされていますから、速度の向上も望めるわけです。Dynamicを使用しなかった場合との違いは、「コンパイル時にメンバーを解決するか」「実行時に文字列でメンバーを解決するか」ということです。 この速度面の課題を許容するのなら、オブジェクトを作成するコンテナとしてDLRを活用する価値があるのではないかと、私は考えています。スクリプト系の言語が、色々なところで使われている状況を考えると、使っても問題ないと考えることができます。もちろん、絶対的に速度を重視する場合では、目的を達成するために別の手段をつかうべきだと思います。 PS.考えることが多くて、資料を読み込むのも大変な状況にいます。

0

DLR プロジェクトの状況 2010年1月時点

久し振りにDLRの状況を記述したいと思います。2010.1時点では、以下のようなものがリリースされています。 IronPython 2.6 (2009.12.11) IronPython 2.6 CTP .NET 4.0 Beta2 (2009.10.21) IronRuby 1.0 RC1 (2009.11.20) IronRuby 1.0 CTP for .NET 4.0 Beta2 (2009.10.21) DLR 0.92 (2009.10.22) Visual Studio 2010 ベータ2と合わせて試すのなら、IronRuby 1.0 CTP for .NET 4.0 Beta2 がお勧めです。その理由は、.NET Framework 4.0 ベータ2に同期した IronRuby と IronPython のバイナリが含まれているからです。 また、結構前からになります DLR を使った言語サンプルとして SymPL が以前に提供されていたToyLanguage に替わって提供されています。SymPLには、2種類の実装が提供されています。 charp:ExpandoObjectなどを使った言語実装です。 charp-cponly:DLR対応のホスティングサンプルです。 SymPLの実装方法自体は同じなのですが、ホスティング方法の違いで2種類が提供されています。DLR 対応として DLRホスティング可能なサンプルとしては、charp-cponlyをお勧めします。DLRホスティングの方法としては、以前に私が公開した…

0

Tech Days 2009 Dynamic Language Runtimeで使用したサンプル

Tech Days 2009のT3-403 Dynamic Language Runtimeで使用したサンプルコードを公開します。このサンプルには、以下のものが含まれています。 DynamicCS:C#4.0のDynamicキーワードを使ったサンプルです。このサンプルの実行には、Visual Studio 2010CTPとIronPython v2.0 for VS10 CTP(http://www.codeplex.com/IronPython/)が必要になります。 AstTest:DLR 0.9のASTのみを使った Hello Worldサンプルです。 ToosSupport:セッションでは使用しませんでしたが、DLR 0.9のホスティングAPIを使ってIronPythonを使ったAPIの使い方のサンプルです。 MyCalc:セッションでは使用しませんでしたが、DLR 0.9を使って作成した簡単な四則演算の言語サンプルです。 ご利用は、自己責任でお願いいたします。セッションに参加した方々へのお願いです。是非ともDLRやIronPython2.0、IronRubyを試してください。そして試した結果のフィードバックをしてください。開発チームは、皆さんのフィードバックを心待ちにしています。宜しくお願いいたします。 T3-403.zip

1

IronPython 2.0 リリース

ついにIronPython 2.0がリリースされました。それと同期するようにDLRも公開されています。ふむDLRのバージョンは0.9となっていますが、12/10にUpされているのでRC2に同期した0.9から、どの程度更新されたかは不明です。 DLR-0.9をダウンロードしてみると、中にIronRuby、ToyScript、IronPythonも含まれています。IronPython.dllのバージョンを見ると2.0.11121.0なのでIronPython 2.0に含まれているのと同じバージョンになります。異なるのはタイムスタンプだけです。また、DLRに関するドキュメントがWORD文書で5つほど含まれています。DLRをホスティングするには、dlr-spec-hosting.docという文書が有益です。 PS:Silverlight Dynamic Lamguage SDKに含まれているバイナリと同じものが、DLR-0.9に含まれています。今回のソースコードに対応したものは、まだ公開されていないようです。

0

IronPython 2.0RC2

出ていました。RC2に同期しているらしい、DLR 0.9も公開されています。 今月は、忙しくてなかなかブログを更新できていません。Silverlight Dynamic Languageシリーズも次回位で終了にしたいのですが、時間が取れていません。期待して方々に、改めてお詫びを申し上げます。

0

Silverlight Dynamic Language SDK の使い方4

今回は、 Chiron.exeの/bや/z、/mオプションで作成されるアプリケーション・マニフェストを説明します。例題とするのは、DLR Consoleで使用されているAppManifest.xamlです。<Deployment xmlns=”http://schemas.microsoft.com/client/2007/deployment” xmlns:x=”http://schemas.microsoft.com/winfx/2006/xaml” RuntimeVersion=”2.0.31005.00″ EntryPointAssembly=”Microsoft.Scripting.Silverlight” EntryPointType= “Microsoft.Scripting.Silverlight.DynamicApplication” > <Deployment.Parts> <!– Add additional assemblies here –> <AssemblyPart Source=”Microsoft.Scripting.Silverlight.dll”/> <AssemblyPart Source=”Microsoft.Scripting.Core.dll” /> <AssemblyPart Source=”Microsoft.Scripting.dll” /> <AssemblyPart Source= “Microsoft.Scripting.ExtensionAttribute.dll” /> <AssemblyPart Source=”IronPython.dll” /> <AssemblyPart Source=”IronPython.Modules.dll” /> <AssemblyPart Source=”IronRuby.dll” /> <AssemblyPart Source=”IronRuby.Libraries.dll” /> <AssemblyPart Source=”Microsoft.JScript.Runtime.dll” /> <AssemblyPart Source=”Microsoft.JScript.Compiler.dll” /> </Deployment.Parts> </Deployment> 最初に取り上げるのが、Deployment要素のEntryPointAssembly属性とEntryPointType属性です。ここには、以下のように記述されています。 EntryPointAssembly=”Microsoft.Scripting.Silverlight” EntryPointType=”Microsoft.Scripting.Silverlight.DynamicApplication” 属性名が表しているようにSilverlight2.0対応のランタイムが起動するプログラムが格納されたアセンブリと開始するクラスを指定しています。このDynamicApplicationクラスこそが、SilverlightとDLRを結びつけるものです。このエントリポイントのモデルは、DLRに限った話ではなくC#やVBを使ったSilverlightアプリケーションでも使用されているものです。そして、DynamicApplicationクラスはSystem.Windows.Applicationクラスを継承しています。 Deployment.Parts要素内のAssemblyPart要素にSilverlightランタイムが読み込むアセンブリをSource属性で指定します。ここで指定しているアセンブリを以下に示します。 アセンブリ名…

1

Silverlight Dynamic Language SDK の使い方3

Dynamic Language SDK で提供されるスクリプトのserver.batとは、chiron.exeをラップしただけのものです。このため指定できるオプションを確認するには、「/?」か「/h」オプションを指定します。指定できるオプションを以下に示します。 オプション 説   明 /d:パス 又は /dir、/directory アプリケーション(スクリプトやプログラム)を格納しているフォルダを指定します。デフォルトは「app」になります。 /x:xapファイル 又は /xap、/xapfile xapファイルを作成する場合に「/x:app.xap」のようにxapファイルを指定します。/dで指定したフォルダの中身がxapファイルに格納されます。 /n 又は /nologo バナーの表示を抑制します。 /s 又は /silent コンソール出力を抑制します。 /z:xapファイル 又は /zipdlr DLRアプリケーション向けのxapファイルを生成します。/dで指定したフォルダにAppManifest.xamlが存在しなければ自動的に生成します。/xオプションとの違いは、スクリプトファイルを解析して必要なアセンブリと生成したAppManifest.xamlをxapファイル内に含めることです。 /w 又は /webserver テスト用のWebサーバーを起動します。デフォルトのポートは、2060になります。ポートを指定する場合は、/w:ポート番号と指定します。 /b 又は /browser テスト用のWebサーバーを起動して、ブラウザを起動します。開始時のURLを指定するには、/b:パスオプションを指定します。/dオプションを組み合わせれば、WebサーバーのトップURLの場所を指定することができます。 /m 又は /manifest アプリケーション・マニフェスト(AppManifest.xaml)を生成します。 /? 又は /h、/help ヘルプを表示します。 /r:パス 又は /refpath 参照するアセンブリへのパスを指定します。デフォルトは、Chiron.exeが存在するフォルダを参照します。このオプションは、ヘルプに表示されません。 オプションの使い方は、ヘルプコマンドで確認するか、SDKに含まれるReadme.txtに記述されています。前回に解説したプログラムをテスト実行するだけであれば、「chiron.exe /b /d:アプリケーションフォルダ」を実行することでブラウザで実行することができます。 配布用にXAPファイルを作成するには、以下のようにコマンドを入力します。chiron.exe /d:アプリケーション・フォルダ /z:app.xap これでXAPファイルが出来ますので、index.htmlとjavascriptフォルダ、stylesheetsフォルダ、作成したXAPファイルをWebサーバーへ配置すれば本番環境への移行が完了します。 chiron.exeには/xオプションでXAPファイルを作成できますが、このオプションは動的言語に特化したものではありません。どういう場合に使うかというと、既存のXAPファイルを展開して、中身のリソース(画像など)を入れ替えた場合などの再XAP化に使用することができます。つまり、リソース入れ替えでVisual StudioのリビルドなどをしなくてもXAPファイルを作成できるのです。具体的には、以下のようなコマンドを入力します。chiron.exe…

2

Silverlight Dynamic Language SDK の使い方2

今回は、SDKで提供されるテンプレート集の構造を説明します。最初にindex.htmlのobjectタグを解説します。<object data=”data:application/x-silverlight,” type=”application/x-silverlight-2″ width=”100%” height=”100%”> <!– XAPファイルを指定します。指定したファイル名が 開発中に使用するフォルダ名になります。 –> <param name=”source” value=”python.xap”/> <!– “initParams”はkey=valueの形式で、カンマ区切りで複数の パラメータを指定できます。 –> <param name=”initParams” value=”debug=true, reportErrors=errorLocation” /> <!– Silverlightランタイムのエラーを処理する javascript関数を指定します。この関数は javascripts/error.js で定義されています。 –> <param name=”onerror” value=”onSilverlightError” /> <!– 他のパラメータは、Silverlightのプロパティです。 –> <param name=”background” value=”white” /> <param name=”windowless” value=”true” /&lg; <!– Silverlight ランタイムのインストール用のリンクです。 –> <a href=”http://go.microsoft.com/fwlink/?LinkID=124807″      style=”text-decoration: none;”> <img src=”http://go.microsoft.com/fwlink/?LinkId=108181″ alt=”Get Microsoft…

1