「ダイナミックな世界」 lv1 くまー by 中博俊

22
わわわわわわ わわわわわ #13 わわわわわわわわわわ 「」 Lv1 わわわ by わわわ

Upload: maude

Post on 05-Jan-2016

36 views

Category:

Documents


4 download

DESCRIPTION

「ダイナミックな世界」 Lv1 くまー by 中博俊. みなさんは ダイナミック言語 (DL) や、 軽量言語 (LL) を 知っていますか?. 動的言語とは. ダイナミック言語 ( 動的言語 ) スタティック言語 ( 静的言語 ) 特徴 コンパイルを実行時に行ったり、インタプリタのようにふるまったり、がちがちに固めない。 実行時にあればいいじゃないか 具体的には Visual Basic, Java Script, Iron Python, Iron Ruby, Power Shell 等. 動的言語とは. Silverlight を知っていますか? - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 「ダイナミックな世界」 Lv1 くまー  by  中博俊

わんくま同盟 東京勉強会 #13

「ダイナミックな世界」

Lv1 くまー by 中博俊

Page 2: 「ダイナミックな世界」 Lv1 くまー  by  中博俊

わんくま同盟 東京勉強会 #13

みなさんはダイナミック言語 (DL)

や、軽量言語 (LL) を

知っていますか?

Page 3: 「ダイナミックな世界」 Lv1 くまー  by  中博俊

わんくま同盟 東京勉強会 #13

動的言語とは

• ダイナミック言語 ( 動的言語 )– スタティック言語 ( 静的言語 )

• 特徴– コンパイルを実行時に行ったり、インタプリタのよ

うにふるまったり、がちがちに固めない。– 実行時にあればいいじゃないか

• 具体的には– Visual Basic, Java Script, Iron Python, Iron Ruby,

Power Shell 等

Page 4: 「ダイナミックな世界」 Lv1 くまー  by  中博俊

わんくま同盟 東京勉強会 #13

動的言語とは

• Silverlight を知っていますか?– Windows, Mac OS で動く– IE, Mozilla, Firefox, Safari で動く– XAML が動く– そんなアプリケーション環境

Page 5: 「ダイナミックな世界」 Lv1 くまー  by  中博俊

わんくま同盟 東京勉強会 #13

動的言語とは

• Silverlight1.1 には DLR が搭載されるんです。 ↓• DLR とは

– Dynamic Language Runtime の略で、動的言語環境– 動的言語の積極的サポート

• 1 番の特徴は– 複数言語が、1つの動的言語環境で動くこと– Iron Python から、 Java Script のコードを簡単に呼

べます。

Page 6: 「ダイナミックな世界」 Lv1 くまー  by  中博俊

わんくま同盟 東京勉強会 #13

デモしましょ

•PowerShell のデモ• IronPython のデモ•電卓のデモ

Page 7: 「ダイナミックな世界」 Lv1 くまー  by  中博俊

わんくま同盟 東京勉強会 #13

同居

• IronPython と、 JavaScript が同居しているということは?

• C# と VB が同居しているということとおなじ?

No

Page 8: 「ダイナミックな世界」 Lv1 くまー  by  中博俊

わんくま同盟 東京勉強会 #13

• C# ソース → C# コンパイル → MSIL → JIT コンパイル → アセンブリ →実行

C#C#

C# コンパイル

MSIL

MSIL

JIT コンパイル

VBVB

VB コンパイル

MSIL

MSIL

JIT コンパイル

Page 9: 「ダイナミックな世界」 Lv1 くまー  by  中博俊

わんくま同盟 東京勉強会 #13

• C# ソース → C# コンパイル → MSIL → JIT コンパイル → アセンブリ →実行

C#C#

C# コンパイル

MSIL

MSIL

JIT コンパイル

VBVB

VB コンパイル

MSIL

MSIL

JIT コンパイル

同じですね

Page 10: 「ダイナミックな世界」 Lv1 くまー  by  中博俊

わんくま同盟 東京勉強会 #13

DLR とは

• スクリプトな言語である Javascriptや、 IronPython の実行環境である DLR とは

• 結局 AST + MiniCLR である。

AST ってなんだ

Page 11: 「ダイナミックな世界」 Lv1 くまー  by  中博俊

わんくま同盟 東京勉強会 #13

AST

• Abstract Syntax Tree• 日本語では抽象構文木

• プログラムのソースを抽象化する• ソースコードを論理的なものに変える

• 次の資料を一緒に読みましょう。

Page 12: 「ダイナミックな世界」 Lv1 くまー  by  中博俊

わんくま同盟 東京勉強会 #13

http://www.iunknown.com/2007/05/compiler_dev_la.html

Page 13: 「ダイナミックな世界」 Lv1 くまー  by  中博俊

わんくま同盟 東京勉強会 #13

突然ですが

• Haskell という言語を知っていますか ?

• 純粋関数型言語• 手続きは書けない

• それよりそもそも関数型言語ってなに?

Page 14: 「ダイナミックな世界」 Lv1 くまー  by  中博俊

わんくま同盟 東京勉強会 #13

関数型言語とは

• 状態をもたないこと ( 再入可能 )– Function add(x,y) { return x+y;}– このメソッドは状態をもたないために、同じ

値 1,3 を入れれば必ず 4 が出てくる• 関数も型

• 単純に言うとこういうこと

Page 15: 「ダイナミックな世界」 Lv1 くまー  by  中博俊

わんくま同盟 東京勉強会 #13

カリー化

• Haskell では関数は 1 つの引数しかとれません。 ( 戻り値も 1 つ )

• 先ほどの add を考えてみましょう。

• Add(1,2) は以下のように分解できます。• Number1(){return 1;}

Add2(Number1){return Number1() + 2;}

Page 16: 「ダイナミックな世界」 Lv1 くまー  by  中博俊

わんくま同盟 東京勉強会 #13

C# でのデモ

Page 17: 「ダイナミックな世界」 Lv1 くまー  by  中博俊

わんくま同盟 東京勉強会 #13

カリー化のメリット

• 物事を単純化できる• 戻り値は関数なので、使う瞬間に評価

( 実行 ) することができる。 ( 遅延評価 )

• 閑話休題

• 前の資料に戻る

Page 18: 「ダイナミックな世界」 Lv1 くまー  by  中博俊

わんくま同盟 東京勉強会 #13

• C# のコンパイルも実際には

• DLR の構文解析は

C#C#

MSIL 作成MSIL

MSIL構文解析 内部構文

解析状態

MSIL 作成MSIL

MSIL

AST

JSJS

構文解析

IPYIPY

構文解析

Page 19: 「ダイナミックな世界」 Lv1 くまー  by  中博俊

わんくま同盟 東京勉強会 #13

Linq の Expression Tree って

• Linq のクエリ式は Expression Tree に展開される。 ( 場合が多い )

• http://blogs.wankuma.com/shuujin/archive/2007/09/25/97854.aspx

Page 20: 「ダイナミックな世界」 Lv1 くまー  by  中博俊

わんくま同盟 東京勉強会 #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 }));

Page 21: 「ダイナミックな世界」 Lv1 くまー  by  中博俊

わんくま同盟 東京勉強会 #13

• なぜこんなに属性などを付加しているのか?

• データソースに応じて

•動的に• 処理を振り分けられるように

• 論理構造を表現するのに Tree が一番ふさわしいから。でもやっぱり違う技術です

Page 22: 「ダイナミックな世界」 Lv1 くまー  by  中博俊

わんくま同盟 東京勉強会 #13

• DLR と言いながら、 C# とか、 Haskell とかいろんなところのいろんなエッセンスを紹介しました。

• 今後もまだまだプログラミング言語は進化しそうです、実行環境は進展しそうです。

• こんなダイナミックな世界に没頭できて幸せです。 (^^

• ありがとうございました。