「ダイナミックな世界」 lv1 くまー by 中博俊
DESCRIPTION
「ダイナミックな世界」 Lv1 くまー by 中博俊. みなさんは ダイナミック言語 (DL) や、 軽量言語 (LL) を 知っていますか?. 動的言語とは. ダイナミック言語 ( 動的言語 ) スタティック言語 ( 静的言語 ) 特徴 コンパイルを実行時に行ったり、インタプリタのようにふるまったり、がちがちに固めない。 実行時にあればいいじゃないか 具体的には Visual Basic, Java Script, Iron Python, Iron Ruby, Power Shell 等. 動的言語とは. Silverlight を知っていますか? - PowerPoint PPT PresentationTRANSCRIPT
わんくま同盟 東京勉強会 #13
みなさんはダイナミック言語 (DL)
や、軽量言語 (LL) を
知っていますか?
わんくま同盟 東京勉強会 #13
動的言語とは
• ダイナミック言語 ( 動的言語 )– スタティック言語 ( 静的言語 )
• 特徴– コンパイルを実行時に行ったり、インタプリタのよ
うにふるまったり、がちがちに固めない。– 実行時にあればいいじゃないか
• 具体的には– Visual Basic, Java Script, Iron Python, Iron Ruby,
Power Shell 等
わんくま同盟 東京勉強会 #13
動的言語とは
• Silverlight を知っていますか?– Windows, Mac OS で動く– IE, Mozilla, Firefox, Safari で動く– XAML が動く– そんなアプリケーション環境
わんくま同盟 東京勉強会 #13
動的言語とは
• Silverlight1.1 には DLR が搭載されるんです。 ↓• DLR とは
– Dynamic Language Runtime の略で、動的言語環境– 動的言語の積極的サポート
• 1 番の特徴は– 複数言語が、1つの動的言語環境で動くこと– Iron Python から、 Java Script のコードを簡単に呼
べます。
わんくま同盟 東京勉強会 #13
デモしましょ
•PowerShell のデモ• IronPython のデモ•電卓のデモ
わんくま同盟 東京勉強会 #13
同居
• IronPython と、 JavaScript が同居しているということは?
• C# と VB が同居しているということとおなじ?
No
わんくま同盟 東京勉強会 #13
• C# ソース → C# コンパイル → MSIL → JIT コンパイル → アセンブリ →実行
C#C#
C# コンパイル
MSIL
MSIL
JIT コンパイル
VBVB
VB コンパイル
MSIL
MSIL
JIT コンパイル
わんくま同盟 東京勉強会 #13
• C# ソース → C# コンパイル → MSIL → JIT コンパイル → アセンブリ →実行
C#C#
C# コンパイル
MSIL
MSIL
JIT コンパイル
VBVB
VB コンパイル
MSIL
MSIL
JIT コンパイル
同じですね
わんくま同盟 東京勉強会 #13
DLR とは
• スクリプトな言語である Javascriptや、 IronPython の実行環境である DLR とは
• 結局 AST + MiniCLR である。
AST ってなんだ
わんくま同盟 東京勉強会 #13
AST
• Abstract Syntax Tree• 日本語では抽象構文木
• プログラムのソースを抽象化する• ソースコードを論理的なものに変える
• 次の資料を一緒に読みましょう。
わんくま同盟 東京勉強会 #13
http://www.iunknown.com/2007/05/compiler_dev_la.html
わんくま同盟 東京勉強会 #13
突然ですが
• Haskell という言語を知っていますか ?
• 純粋関数型言語• 手続きは書けない
• それよりそもそも関数型言語ってなに?
わんくま同盟 東京勉強会 #13
関数型言語とは
• 状態をもたないこと ( 再入可能 )– Function add(x,y) { return x+y;}– このメソッドは状態をもたないために、同じ
値 1,3 を入れれば必ず 4 が出てくる• 関数も型
• 単純に言うとこういうこと
わんくま同盟 東京勉強会 #13
カリー化
• Haskell では関数は 1 つの引数しかとれません。 ( 戻り値も 1 つ )
• 先ほどの add を考えてみましょう。
• Add(1,2) は以下のように分解できます。• Number1(){return 1;}
Add2(Number1){return Number1() + 2;}
わんくま同盟 東京勉強会 #13
C# でのデモ
わんくま同盟 東京勉強会 #13
カリー化のメリット
• 物事を単純化できる• 戻り値は関数なので、使う瞬間に評価
( 実行 ) することができる。 ( 遅延評価 )
• 閑話休題
• 前の資料に戻る
わんくま同盟 東京勉強会 #13
• C# のコンパイルも実際には
• DLR の構文解析は
C#C#
MSIL 作成MSIL
MSIL構文解析 内部構文
解析状態
MSIL 作成MSIL
MSIL
AST
JSJS
構文解析
IPYIPY
構文解析
わんくま同盟 東京勉強会 #13
Linq の Expression Tree って
• Linq のクエリ式は Expression Tree に展開される。 ( 場合が多い )
• http://blogs.wankuma.com/shuujin/archive/2007/09/25/97854.aspx
わんくま同盟 東京勉強会 #13
• var query = from address in adventureWorks.Address where address.City == "Bothell“ select address.AddressID;
• IQueryable<int> query = adventureWorks.Address.
Where<Address>(Expression.Lambda<Func<Address, bool>>( Expression.Equal(Expression.Property(CS$0$0000 = Expression.Parameter(typeof(Address), "address"), (MethodInfo) methodof(Address.get_City)), Expression.Constant( "Bothell", typeof(string)), false, (MethodInfo) methodof(string.op_Equality)), new ParameterExpression[] { CS$0$0000 })).
Select<Address, int>(Expression.Lambda<Func<Address, int>>( Expression.Property(CS$0$0000 = Expression.Parameter(typeof(Address), "address"), (MethodInfo) methodof(Address.get_AddressID)), new ParameterExpression[] { CS$0$0000 }));
わんくま同盟 東京勉強会 #13
• なぜこんなに属性などを付加しているのか?
• データソースに応じて
•動的に• 処理を振り分けられるように
• 論理構造を表現するのに Tree が一番ふさわしいから。でもやっぱり違う技術です
わんくま同盟 東京勉強会 #13
• DLR と言いながら、 C# とか、 Haskell とかいろんなところのいろんなエッセンスを紹介しました。
• 今後もまだまだプログラミング言語は進化しそうです、実行環境は進展しそうです。
• こんなダイナミックな世界に没頭できて幸せです。 (^^
• ありがとうございました。