SlideShare a Scribd company logo
1 of 36
Download to read offline
動的なILの生成/編集
terurou
2013/07/20
目次
• 自己紹介
• IL生成の予備知識
• ILの生成方法
• Windows Store AppsでのIL生成
• まとめ
自己紹介
7月から無職してます。
技術領域
• Haxe/JavaScriptとかWindows Store Appsとか
WPFとかSilverlightとかできます。
• Haxe/JavaScriptは「なごやまつり」で話す予定です。
• ギョーム系DataGridの実装に定評があります。
• たぶんシステムアーキテクチャ設計が本業です。
• 最近はF#でWebSocketサーバを試作してました。
コミュニティ活動 - DSTokaiとNGK
• DSTokai : 東海地方のメタコミュニティ
• IT系イベントカレンダーとコミュニティ連絡用ML
• http://go.dstokai.info/
• NGK : なごや ごうどう こんしんかい
• 毎年忘年会を開催しています
• 一昨年は100人、去年は120人
• ちなみに今年は12/7に開催予定
• 花見はここ数年サボってます
ILと私
• IronPythonとSilverlight2でR&D(3年前)
• Silverlight上でScalaアプリを実行(2年前)
• Silverlightアプリを動的生成(1年半前)
• Store AppsからDesktop用EXE生成(1年前)
• その他、.NETのお仕事で仕方なく…
IL生成の予備知識
photo: http://www.flickr.com/photos/seditiouscanary/1279041211/, CC BY-NC-ND 2.0
ILとは
• .NETのアセンブリ言語
• IL = Intermediate Language = 中間言語
.assembly extern mscorlib {
.publickeytoken = (b7 7a 5c 56 19 34 e0 89)
.ver 4:0:0:0
}
.assembly Test {
.hash algorithm 0x00008004
.ver 1:0:0:0
}
.module Test.exe
.class auto ansi Test.Program extends [mscorlib]System.Object {
.method static void Main (string[] args) cil managed {
.maxstack 8
.entrypoint
IL_0000: ldstr "Hello World"
IL_0005: call void [mscorlib]System.Console::WriteLine(string)
IL_000a: ret
}
}
.NETとILの関係図
Compiler
ilasm
ildasm
CLR
icons: http://www.gentleface.com/, CC BY-NC 3.0
C#, VB,
F#, ...
IL
Assembly Native
実行
Assembly(PE:Portable Executable)
.NETの実行バイナリ(EXE, DLL)
ilasm
ILアセンブラ
.NET Frameworkに標準付属
ildasm
IL逆アセンブラ
.NET Frameworkに標準付属
動的なILの生成
.NETにはILを動的(アプリ実行時)に生成するAPIが
標準で備わっています。
• 静的な型やメソッドの作成
• 生成したILの即時実行
• Assembly(EXE, DLL)の生成・保存
• 既存APIの編集(Monkey Patching)は不可能
• 別の手段を使えば編集することも可能
IL生成の利用例
• 処理の高速化
• 動的メソッドコール(Reflection)
• シリアライザ(動的に静的型を生成)
• 透過プロキシやMockの内部実装
• アスペクト指向/Weaving
• 自作コンパイラのバックエンド
本当にIL生成が必要か?
• IL生成は黒魔術
• 利用例で紹介した通り、必要な個所は限定される
• 問題点も多い
• 低レベルAPI
• 可読性やメンテナンス性の低下
• プログラミング言語の型制約の無視できる
• 型安全ではなくなり、品質保証にコストがかかる
IL生成の前に検討すべきもの
• デザインパターンやIoC Container
• コードの書き方で逃げられないか?
• T4テンプレート(自動コード生成)
• コンパイル前にどうにかならないか?
• System.Dynamic(C# 4.0のdynamic型)
• 動的プロパティや動的メソッドコール等で利用
• 内部的には実行時に自動でILを生成している
• 下手に手書きでILを生成するよりも高速
• F#(高度な型システム, TypeProvider)
• C#やVBの型システムが貧弱だからなのでは??
ILの生成方法
IL生成の基本的な手順
1. C#でひな形コードを書いてビルド
2. Assemblyを逆アセンブリ
• ildasmやILSpy等を利用する
3. 逆アセンブリした結果を見ながらコードを書く
逆アセンブリツール
• ILSpy http://ilspy.net/
• 無償で使えておすすめ
• IL以外にもC#やVBへ逆アセンブリ可能
• ildasm
• .NET SDK標準ツール
• C:¥Program Files¥Microsoft SDKs¥Windows¥... に入っている
• .NET Reflector
• 有償($95)
API
• 標準API
• System.Reflectoin.Emit(.NET 2.0/1.1~)
• Sysytem.CodeDom(.NET 2.0/1.1~)
• System.Linq.Expressions(実質.NET 4.0~)
• 外部ライブラリ
• Mono.Cecil
• IKVM.Reflection
• CLR Profiling API
System.Reflection.Emit(.NET 2.0/1.1~)
• IL生成の基本的なAPI
• 動的に生成したILコードは即座に実行可能
• 低レベルAPIなのでプログラムが煩雑になる
• OpCodeを1つずつ埋め込むことが必要
• .NET 3.5までの環境ではこれを使うことになる
System.Reflection.Emitのコード例
Hello Worldを表示するだけのEXEを生成
var appDomain = AppDomain.CurrentDomain;
var assemblyBuilder = appDomain.DefineDynamicAssembly(
new AssemblyName("Test"),
AssemblyBuilderAccess.RunAndSave);
var moduleBuilder = assemblyBuilder.DefineDynamicModule("Test.exe");
var typeBuilder = moduleBuilder.DefineType("Program", TypeAttributes.Class);
var methodBuilder = typeBuilder.DefineMethod("Main", MethodAttributes.Static);
methodBuilder.SetParameters(typeof(string[]));
var il = methodBuilder.GetILGenerator();
var write = typeof(Console).GetMethod("WriteLine", new[] { typeof(object) });
il.Emit(OpCodes.Ldstr, "Hello World");
il.Emit(OpCodes.Call, write);
il.Emit(OpCodes.Ret);
typeBuilder.CreateType();
assemblyBuilder.SetEntryPoint(methodBuilder);
assemblyBuilder.Save("Test.exe");
System.CodeDom(.NET 2.0/1.1~)
• C#やVBのコンパイラAPI
• 即時実行可能(スクリプト的に利用できる)
• Assemblyの出力可能
• System.Reflection.Emitの置き換えにはらなない
• コンパイル時にオーバーヘッドが発生する
• 生成するILを動的に変更したい場合、文字列として
ソースコードを組み立てる必要がある
System.Linq.Expressions(実質.NET 4.0~)
• Expression Tree(式木)
• 式木とはいうものの、構文木(if文, for文など)もカバー
• System.Reflection.Emitよりも簡単
• ラムダ式からExpression Treeを構築できる
• Expression Treeを走査したり改変もできる
• .NET 4.0以降でIL生成といえばこれ
Expression<Action> exp =
() => { Console.WriteLine("Hello World"); }
System.Linq.Expressionsのコード例
Hello Worldを表示するだけのEXEを生成
var appDomain = AppDomain.CurrentDomain;
var assemblyBuilder = appDomain.DefineDynamicAssembly(
new AssemblyName("Test"),
AssemblyBuilderAccess.RunAndSave);
var moduleBuilder = assemblyBuilder.DefineDynamicModule("Test.exe");
var typeBuilder = moduleBuilder.DefineType("Program", TypeAttributes.Class);
var methodBuilder = typeBuilder.DefineMethod("Main", MethodAttributes.Static);
methodBuilder.SetParameters(typeof(string[]));
Expression<Action> exp = () => Console.WriteLine("Hello World");
exp.CompileToMethod(methodBuilder);
typeBuilder.CreateType();
assemblyBuilder.SetEntryPoint(methodBuilder);
assemblyBuilder.Save("Test.exe");
System.Linq.Expressionsのコード例
ラムダの書き換え(メッセージ出力を追加)
class SampleVisitor : ExpressionVisitor
{
protected override Expression VisitLambda<T>(Expression<T> node)
{
Expression<Action> post = () => Console.WriteLine("post");
return Expression.Lambda<Action>(Expression.Block(new Expression[] {
Expression.Invoke(node),
Expression.Invoke(post)
}));
}
}
var visitor = new SampleVisitor();
var result = visitor.Visit(exp);
var func = ((Expression<Action>)result).Compile();
func.Invoke();
Mono.Cecil
• Assembly(EXE, DLL)のRead/Write
• 生成時にデバッグシンボルの出力も可能
• Assemblyの解析、処理の挿入や改変
• リソースの挿入、差し替え
• 生成したILの即時実行は不可能
• Assembly保存→DLLとして読み込みなら可能
• コンパイラ, AOP, IL to JavaScript, ...
Mono.Cecilのコード例
Hello Worldを表示するだけのEXEを生成
var assembly = AssemblyDefinition.CreateAssembly(
new AssemblyNameDefinition("Test", new Version()),
"Test.exe",
ModuleKind.Console);
var module = assembly.MainModule;
var type = module.Types.First();
var method = new MethodDefinition(
"Main",
MethodAttributes.Static, module.Import(typeof(void)));
var il = method.Body.GetILProcessor();
var write = typeof(Console).GetMethod("WriteLine", new[] { typeof(object) });
il.Emit(OpCodes.Ldstr, "HelloWorld");
il.Emit(OpCodes.Call, module.Import(write));
il.Emit(OpCodes.Ret);
type.Methods.Add(method);
assembly.EntryPoint = method;
assembly.Write("Test.exe");
Mono.Cecilのコード例
全メソッドの末尾(retの前)にメッセージ出力を追加
var assembly = AssemblyDefinition.ReadAssembly("Test.exe");
var write = typeof(Console).GetMethod("WriteLine", new[] { typeof(string) });
assembly.Modules
.SelectMany(x => x.Types)
.SelectMany(x => x.Methods)
.ToList()
.ForEach(method => {
var il = method.Body.GetILProcessor();
var ldstr = il.Create(OpCodes.Ldstr, "Finish");
var call = il.Create(OpCodes.Call, method.Module.Import(write));
method.Body.Instructions
.Where(x => x.OpCode == OpCodes.Ret)
.ToList()
.ForEach(x => {
il.InsertBefore(x, ldstr);
il.InsertBefore(x, call);
});
});
assembly.Write("Test-Mod.exe");
Assembly内の全メソッドを取得
Console.WriteLine("Finish");を
挿入
IKVM.Reflection
• Assembly(EXE, DLL)のRead/Write
• 生成時にデバッグシンボルの出力も可能
• System.Reflectionに似たAPI
• 生成したILの即時実行は不可能
• Assembly保存→DLLとして読み込みなら可能
• Mono C#コンパイラのバックエンドで採用
CLR Profiling API
• .NET界でも最上級レベルの黒魔術
• 実行中に全APIをフックして処理の差し替えが可能
• 私は使ったことはありません
• 参考資料
• C# 動的メソッド入れ替え - Apply a monkey patch to
any static languages on CLR -
http://urasandesu.blogspot.jp/2011/10/c-apply-monkey-patch-to-any-static.html
Windows Store Appsでの
IL生成
photo: http://www.flickr.com/photos/mr_o/8028197750/, CC BY-NC-SA 2.0
.NET for Windows Store Apps
同じ.NETでも、Windows Store AppsとDesktopの
APIは大きく異なる
• 名前空間の整理、スリム化
• 非同期前提
• セキュリティ的に危険なAPIを徹底削除
IL関連のAPI
• System.Linq.Expressionsのみが存在
• System.Reflection.Emitは削除
• Assemblyを生成/ロードするAPIは削除
• ILを生成してもローカルキャッシュできない
• Assemblyは所詮バイト列なのでどうにかなる
• ロードできないので、生成しても自分で使えない
• Windows RTで自作.NETアプリが動作すれば…
まとめ
photo: http://www.flickr.com/photos/johncline/108863343/, CC BY-NC-ND 2.0
まとめ
極力、IL生成は避ける。
どうしてもIL生成したいのなら
• とりあえずSystem.Linq.Expressions
• 自由度が高く、APIもわかりやすい
• Mono.Cecilを使えばAssemblyの改変が捗る
• 採用しているOSSも多いので参考にしやすい
ご清聴ありがとうございました

More Related Content

What's hot

UE4のためのより良いゲーム設計を理解しよう!
UE4のためのより良いゲーム設計を理解しよう!UE4のためのより良いゲーム設計を理解しよう!
UE4のためのより良いゲーム設計を理解しよう!Masahiko Nakamura
 
Unity ネイティブプラグインの作成について
Unity ネイティブプラグインの作成についてUnity ネイティブプラグインの作成について
Unity ネイティブプラグインの作成についてTatsuhiko Yamamura
 
MagicOnion入門
MagicOnion入門MagicOnion入門
MagicOnion入門torisoup
 
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture世界一わかりやすいClean Architecture
世界一わかりやすいClean ArchitectureAtsushi Nakamura
 
Unityネイティブプラグインマニアクス #denatechcon
Unityネイティブプラグインマニアクス #denatechconUnityネイティブプラグインマニアクス #denatechcon
Unityネイティブプラグインマニアクス #denatechconDeNA
 
シリコンバレーの「何が」凄いのか
シリコンバレーの「何が」凄いのかシリコンバレーの「何が」凄いのか
シリコンバレーの「何が」凄いのかAtsushi Nakada
 
REST API のコツ
REST API のコツREST API のコツ
REST API のコツpospome
 
Observable Everywhere - Rxの原則とUniRxにみるデータソースの見つけ方
Observable Everywhere  - Rxの原則とUniRxにみるデータソースの見つけ方Observable Everywhere  - Rxの原則とUniRxにみるデータソースの見つけ方
Observable Everywhere - Rxの原則とUniRxにみるデータソースの見つけ方Yoshifumi Kawai
 
IL2CPPに関する軽い話
IL2CPPに関する軽い話IL2CPPに関する軽い話
IL2CPPに関する軽い話Wooram Yang
 
MVPパターンによる設計アプローチ「あなたのアプリ報連相できてますか」
MVPパターンによる設計アプローチ「あなたのアプリ報連相できてますか」MVPパターンによる設計アプローチ「あなたのアプリ報連相できてますか」
MVPパターンによる設計アプローチ「あなたのアプリ報連相できてますか」U-dai Yokoyama
 
.NET 7期待の新機能
.NET 7期待の新機能.NET 7期待の新機能
.NET 7期待の新機能TomomitsuKusaba
 
C#×LLVM=アセンブラ!? 〜詳説・Burstコンパイラー〜
C#×LLVM=アセンブラ!? 〜詳説・Burstコンパイラー〜C#×LLVM=アセンブラ!? 〜詳説・Burstコンパイラー〜
C#×LLVM=アセンブラ!? 〜詳説・Burstコンパイラー〜UnityTechnologiesJapan002
 
Observableで非同期処理
Observableで非同期処理Observableで非同期処理
Observableで非同期処理torisoup
 
ネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分けネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分けモノビット エンジン
 
Unity開発で使える設計の話+Zenjectの紹介
Unity開発で使える設計の話+Zenjectの紹介Unity開発で使える設計の話+Zenjectの紹介
Unity開発で使える設計の話+Zenjectの紹介torisoup
 
UniTask入門
UniTask入門UniTask入門
UniTask入門torisoup
 
【Unity道場】AssetGraph入門 〜ノードを駆使しててUnityの面倒な手作業を自動化する方法〜
【Unity道場】AssetGraph入門 〜ノードを駆使しててUnityの面倒な手作業を自動化する方法〜【Unity道場】AssetGraph入門 〜ノードを駆使しててUnityの面倒な手作業を自動化する方法〜
【Unity道場】AssetGraph入門 〜ノードを駆使しててUnityの面倒な手作業を自動化する方法〜Unity Technologies Japan K.K.
 
C#メタプログラミング概略 in 2021
C#メタプログラミング概略 in 2021C#メタプログラミング概略 in 2021
C#メタプログラミング概略 in 2021Atsushi Nakamura
 
Java仮想マシンの実装技術
Java仮想マシンの実装技術Java仮想マシンの実装技術
Java仮想マシンの実装技術Kiyokuni Kawachiya
 

What's hot (20)

UE4のためのより良いゲーム設計を理解しよう!
UE4のためのより良いゲーム設計を理解しよう!UE4のためのより良いゲーム設計を理解しよう!
UE4のためのより良いゲーム設計を理解しよう!
 
Unity ネイティブプラグインの作成について
Unity ネイティブプラグインの作成についてUnity ネイティブプラグインの作成について
Unity ネイティブプラグインの作成について
 
MagicOnion入門
MagicOnion入門MagicOnion入門
MagicOnion入門
 
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
 
Unityネイティブプラグインマニアクス #denatechcon
Unityネイティブプラグインマニアクス #denatechconUnityネイティブプラグインマニアクス #denatechcon
Unityネイティブプラグインマニアクス #denatechcon
 
シリコンバレーの「何が」凄いのか
シリコンバレーの「何が」凄いのかシリコンバレーの「何が」凄いのか
シリコンバレーの「何が」凄いのか
 
REST API のコツ
REST API のコツREST API のコツ
REST API のコツ
 
Observable Everywhere - Rxの原則とUniRxにみるデータソースの見つけ方
Observable Everywhere  - Rxの原則とUniRxにみるデータソースの見つけ方Observable Everywhere  - Rxの原則とUniRxにみるデータソースの見つけ方
Observable Everywhere - Rxの原則とUniRxにみるデータソースの見つけ方
 
IL2CPPに関する軽い話
IL2CPPに関する軽い話IL2CPPに関する軽い話
IL2CPPに関する軽い話
 
MVPパターンによる設計アプローチ「あなたのアプリ報連相できてますか」
MVPパターンによる設計アプローチ「あなたのアプリ報連相できてますか」MVPパターンによる設計アプローチ「あなたのアプリ報連相できてますか」
MVPパターンによる設計アプローチ「あなたのアプリ報連相できてますか」
 
.NET 7期待の新機能
.NET 7期待の新機能.NET 7期待の新機能
.NET 7期待の新機能
 
C#×LLVM=アセンブラ!? 〜詳説・Burstコンパイラー〜
C#×LLVM=アセンブラ!? 〜詳説・Burstコンパイラー〜C#×LLVM=アセンブラ!? 〜詳説・Burstコンパイラー〜
C#×LLVM=アセンブラ!? 〜詳説・Burstコンパイラー〜
 
Observableで非同期処理
Observableで非同期処理Observableで非同期処理
Observableで非同期処理
 
ネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分けネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分け
 
Unity開発で使える設計の話+Zenjectの紹介
Unity開発で使える設計の話+Zenjectの紹介Unity開発で使える設計の話+Zenjectの紹介
Unity開発で使える設計の話+Zenjectの紹介
 
UniTask入門
UniTask入門UniTask入門
UniTask入門
 
【Unity道場】AssetGraph入門 〜ノードを駆使しててUnityの面倒な手作業を自動化する方法〜
【Unity道場】AssetGraph入門 〜ノードを駆使しててUnityの面倒な手作業を自動化する方法〜【Unity道場】AssetGraph入門 〜ノードを駆使しててUnityの面倒な手作業を自動化する方法〜
【Unity道場】AssetGraph入門 〜ノードを駆使しててUnityの面倒な手作業を自動化する方法〜
 
C#メタプログラミング概略 in 2021
C#メタプログラミング概略 in 2021C#メタプログラミング概略 in 2021
C#メタプログラミング概略 in 2021
 
猫でも分かるUE4を使った VRコンテンツ開発 超入門編 2021
猫でも分かるUE4を使った VRコンテンツ開発 超入門編 2021猫でも分かるUE4を使った VRコンテンツ開発 超入門編 2021
猫でも分かるUE4を使った VRコンテンツ開発 超入門編 2021
 
Java仮想マシンの実装技術
Java仮想マシンの実装技術Java仮想マシンの実装技術
Java仮想マシンの実装技術
 

Similar to 動的なILの生成と編集

関数型言語ElixirのIoTシステム開発への展開
関数型言語ElixirのIoTシステム開発への展開関数型言語ElixirのIoTシステム開発への展開
関数型言語ElixirのIoTシステム開発への展開Hideki Takase
 
Entity Framework(Core)についての概要を学ぼう
Entity Framework(Core)についての概要を学ぼうEntity Framework(Core)についての概要を学ぼう
Entity Framework(Core)についての概要を学ぼうTomomitsuKusaba
 
.NET 6の期待の新機能とアップデート
.NET 6の期待の新機能とアップデート.NET 6の期待の新機能とアップデート
.NET 6の期待の新機能とアップデートTomomitsuKusaba
 
Xamarin 概要 2014年08月版
Xamarin 概要 2014年08月版Xamarin 概要 2014年08月版
Xamarin 概要 2014年08月版Yoshito Tabuchi
 
Getting started MySQL as Document Data Store
Getting started MySQL as Document Data StoreGetting started MySQL as Document Data Store
Getting started MySQL as Document Data StoreChihiro Ito
 
Intalio japan special cloud workshop
Intalio japan special cloud workshopIntalio japan special cloud workshop
Intalio japan special cloud workshopDaisuke Sugai
 
Eclipse xtext 紹介
Eclipse xtext 紹介Eclipse xtext 紹介
Eclipse xtext 紹介Akira Tanaka
 
24時間でiOSアプリ-Twitterクライアント-の作成にチャレンジ
24時間でiOSアプリ-Twitterクライアント-の作成にチャレンジ24時間でiOSアプリ-Twitterクライアント-の作成にチャレンジ
24時間でiOSアプリ-Twitterクライアント-の作成にチャレンジ聡 中川
 
jQueryの先に行こう!最先端のWeb開発トレンドを学ぶ
jQueryの先に行こう!最先端のWeb開発トレンドを学ぶjQueryの先に行こう!最先端のWeb開発トレンドを学ぶ
jQueryの先に行こう!最先端のWeb開発トレンドを学ぶShumpei Shiraishi
 
The seminar of asp.net at 201908 sakurug
The seminar of asp.net at 201908 sakurugThe seminar of asp.net at 201908 sakurug
The seminar of asp.net at 201908 sakurugSAKURUG co.
 
Windows Phone / iOS / Android アプリ同時開発のススメ
Windows Phone / iOS / Android アプリ同時開発のススメWindows Phone / iOS / Android アプリ同時開発のススメ
Windows Phone / iOS / Android アプリ同時開発のススメYoshito Tabuchi
 
「新しい」を生み出すためのWebアプリ開発とその周辺
「新しい」を生み出すためのWebアプリ開発とその周辺「新しい」を生み出すためのWebアプリ開発とその周辺
「新しい」を生み出すためのWebアプリ開発とその周辺Yusuke Wada
 
Xamarin 紹介:Windows Phone / iOS / Android アプリ同時開発のススメ 2015/8/20 版
Xamarin 紹介:Windows Phone / iOS / Android アプリ同時開発のススメ 2015/8/20 版Xamarin 紹介:Windows Phone / iOS / Android アプリ同時開発のススメ 2015/8/20 版
Xamarin 紹介:Windows Phone / iOS / Android アプリ同時開発のススメ 2015/8/20 版Yoshito Tabuchi
 
2012 05-19第44回cocoa勉強会発表資料
2012 05-19第44回cocoa勉強会発表資料2012 05-19第44回cocoa勉強会発表資料
2012 05-19第44回cocoa勉強会発表資料OCHI Shuji
 
Intalio Cloud Workshop
Intalio Cloud Workshop Intalio Cloud Workshop
Intalio Cloud Workshop Daisuke Sugai
 
OSC2018 hiroshima session slide by OSSC
OSC2018 hiroshima session slide by OSSCOSC2018 hiroshima session slide by OSSC
OSC2018 hiroshima session slide by OSSCDaisuke Nishino
 
『これからの.NETアプリケーション開発』セミナー .NET用アプリケーション フレームワーク Open 棟梁 概説
『これからの.NETアプリケーション開発』セミナー .NET用アプリケーション フレームワーク Open 棟梁 概説『これからの.NETアプリケーション開発』セミナー .NET用アプリケーション フレームワーク Open 棟梁 概説
『これからの.NETアプリケーション開発』セミナー .NET用アプリケーション フレームワーク Open 棟梁 概説Daisuke Nishino
 
Scalaz-StreamによるFunctional Reactive Programming
Scalaz-StreamによるFunctional Reactive ProgrammingScalaz-StreamによるFunctional Reactive Programming
Scalaz-StreamによるFunctional Reactive ProgrammingTomoharu ASAMI
 

Similar to 動的なILの生成と編集 (20)

関数型言語ElixirのIoTシステム開発への展開
関数型言語ElixirのIoTシステム開発への展開関数型言語ElixirのIoTシステム開発への展開
関数型言語ElixirのIoTシステム開発への展開
 
Entity Framework(Core)についての概要を学ぼう
Entity Framework(Core)についての概要を学ぼうEntity Framework(Core)についての概要を学ぼう
Entity Framework(Core)についての概要を学ぼう
 
.NET 6の期待の新機能とアップデート
.NET 6の期待の新機能とアップデート.NET 6の期待の新機能とアップデート
.NET 6の期待の新機能とアップデート
 
Xamarin 概要 2014年08月版
Xamarin 概要 2014年08月版Xamarin 概要 2014年08月版
Xamarin 概要 2014年08月版
 
Getting started MySQL as Document Data Store
Getting started MySQL as Document Data StoreGetting started MySQL as Document Data Store
Getting started MySQL as Document Data Store
 
Intalio japan special cloud workshop
Intalio japan special cloud workshopIntalio japan special cloud workshop
Intalio japan special cloud workshop
 
Eclipse xtext 紹介
Eclipse xtext 紹介Eclipse xtext 紹介
Eclipse xtext 紹介
 
Groovyコンファレンス
GroovyコンファレンスGroovyコンファレンス
Groovyコンファレンス
 
24時間でiOSアプリ-Twitterクライアント-の作成にチャレンジ
24時間でiOSアプリ-Twitterクライアント-の作成にチャレンジ24時間でiOSアプリ-Twitterクライアント-の作成にチャレンジ
24時間でiOSアプリ-Twitterクライアント-の作成にチャレンジ
 
jQueryの先に行こう!最先端のWeb開発トレンドを学ぶ
jQueryの先に行こう!最先端のWeb開発トレンドを学ぶjQueryの先に行こう!最先端のWeb開発トレンドを学ぶ
jQueryの先に行こう!最先端のWeb開発トレンドを学ぶ
 
The seminar of asp.net at 201908 sakurug
The seminar of asp.net at 201908 sakurugThe seminar of asp.net at 201908 sakurug
The seminar of asp.net at 201908 sakurug
 
Windows Phone / iOS / Android アプリ同時開発のススメ
Windows Phone / iOS / Android アプリ同時開発のススメWindows Phone / iOS / Android アプリ同時開発のススメ
Windows Phone / iOS / Android アプリ同時開発のススメ
 
「新しい」を生み出すためのWebアプリ開発とその周辺
「新しい」を生み出すためのWebアプリ開発とその周辺「新しい」を生み出すためのWebアプリ開発とその周辺
「新しい」を生み出すためのWebアプリ開発とその周辺
 
Yesod(at FPM2012)
Yesod(at FPM2012)Yesod(at FPM2012)
Yesod(at FPM2012)
 
Xamarin 紹介:Windows Phone / iOS / Android アプリ同時開発のススメ 2015/8/20 版
Xamarin 紹介:Windows Phone / iOS / Android アプリ同時開発のススメ 2015/8/20 版Xamarin 紹介:Windows Phone / iOS / Android アプリ同時開発のススメ 2015/8/20 版
Xamarin 紹介:Windows Phone / iOS / Android アプリ同時開発のススメ 2015/8/20 版
 
2012 05-19第44回cocoa勉強会発表資料
2012 05-19第44回cocoa勉強会発表資料2012 05-19第44回cocoa勉強会発表資料
2012 05-19第44回cocoa勉強会発表資料
 
Intalio Cloud Workshop
Intalio Cloud Workshop Intalio Cloud Workshop
Intalio Cloud Workshop
 
OSC2018 hiroshima session slide by OSSC
OSC2018 hiroshima session slide by OSSCOSC2018 hiroshima session slide by OSSC
OSC2018 hiroshima session slide by OSSC
 
『これからの.NETアプリケーション開発』セミナー .NET用アプリケーション フレームワーク Open 棟梁 概説
『これからの.NETアプリケーション開発』セミナー .NET用アプリケーション フレームワーク Open 棟梁 概説『これからの.NETアプリケーション開発』セミナー .NET用アプリケーション フレームワーク Open 棟梁 概説
『これからの.NETアプリケーション開発』セミナー .NET用アプリケーション フレームワーク Open 棟梁 概説
 
Scalaz-StreamによるFunctional Reactive Programming
Scalaz-StreamによるFunctional Reactive ProgrammingScalaz-StreamによるFunctional Reactive Programming
Scalaz-StreamによるFunctional Reactive Programming
 

More from terurou

Webブラウザ上で動作する帳票エンジンを作る話
Webブラウザ上で動作する帳票エンジンを作る話Webブラウザ上で動作する帳票エンジンを作る話
Webブラウザ上で動作する帳票エンジンを作る話terurou
 
自社サービスでDurable Functionsを採用した話
自社サービスでDurable Functionsを採用した話自社サービスでDurable Functionsを採用した話
自社サービスでDurable Functionsを採用した話terurou
 
Computation Expressions for Haxe
Computation Expressions for HaxeComputation Expressions for Haxe
Computation Expressions for Haxeterurou
 
デンキヤギの採用の考え方
デンキヤギの採用の考え方デンキヤギの採用の考え方
デンキヤギの採用の考え方terurou
 
Vue.jsをhaxeで
Vue.jsをhaxeでVue.jsをhaxeで
Vue.jsをhaxeでterurou
 
MQTTとAMQPと.NET
MQTTとAMQPと.NETMQTTとAMQPと.NET
MQTTとAMQPと.NETterurou
 
altJSの選び方
altJSの選び方altJSの選び方
altJSの選び方terurou
 
DataGridを自前実装する話
DataGridを自前実装する話DataGridを自前実装する話
DataGridを自前実装する話terurou
 
オブジェクト指向の皮をかぶった関数型プログラミング言語 Haxe
オブジェクト指向の皮をかぶった関数型プログラミング言語 Haxeオブジェクト指向の皮をかぶった関数型プログラミング言語 Haxe
オブジェクト指向の皮をかぶった関数型プログラミング言語 Haxeterurou
 
FIRST STEP to Haxe/JavaScript
FIRST STEP to Haxe/JavaScriptFIRST STEP to Haxe/JavaScript
FIRST STEP to Haxe/JavaScriptterurou
 
大規模なギョームシステムにHaxeを採用してみた話
大規模なギョームシステムにHaxeを採用してみた話大規模なギョームシステムにHaxeを採用してみた話
大規模なギョームシステムにHaxeを採用してみた話terurou
 
大規模なJavaScript開発の話
大規模なJavaScript開発の話大規模なJavaScript開発の話
大規模なJavaScript開発の話terurou
 
Metro Style AppsでMSIL ver.2012/06/09
Metro Style AppsでMSILver.2012/06/09Metro Style AppsでMSILver.2012/06/09
Metro Style AppsでMSIL ver.2012/06/09terurou
 
Metro Style AppsでMSIL
Metro Style AppsでMSILMetro Style AppsでMSIL
Metro Style AppsでMSILterurou
 
Yet Another DLR for Silverlightの試作
Yet Another DLR for Silverlightの試作Yet Another DLR for Silverlightの試作
Yet Another DLR for Silverlightの試作terurou
 
スマートフォン×Cassandraによるハイパフォーマンス基盤の構築事例
スマートフォン×Cassandraによるハイパフォーマンス基盤の構築事例スマートフォン×Cassandraによるハイパフォーマンス基盤の構築事例
スマートフォン×Cassandraによるハイパフォーマンス基盤の構築事例terurou
 
CommonJSの話
CommonJSの話CommonJSの話
CommonJSの話terurou
 
Scala×silverlight
Scala×silverlightScala×silverlight
Scala×silverlightterurou
 
DLR言語によるSilverlightプログラミング
DLR言語によるSilverlightプログラミングDLR言語によるSilverlightプログラミング
DLR言語によるSilverlightプログラミングterurou
 
Iron Python / Iron Ruby で .NET Programming
Iron Python / Iron Ruby で .NET ProgrammingIron Python / Iron Ruby で .NET Programming
Iron Python / Iron Ruby で .NET Programmingterurou
 

More from terurou (20)

Webブラウザ上で動作する帳票エンジンを作る話
Webブラウザ上で動作する帳票エンジンを作る話Webブラウザ上で動作する帳票エンジンを作る話
Webブラウザ上で動作する帳票エンジンを作る話
 
自社サービスでDurable Functionsを採用した話
自社サービスでDurable Functionsを採用した話自社サービスでDurable Functionsを採用した話
自社サービスでDurable Functionsを採用した話
 
Computation Expressions for Haxe
Computation Expressions for HaxeComputation Expressions for Haxe
Computation Expressions for Haxe
 
デンキヤギの採用の考え方
デンキヤギの採用の考え方デンキヤギの採用の考え方
デンキヤギの採用の考え方
 
Vue.jsをhaxeで
Vue.jsをhaxeでVue.jsをhaxeで
Vue.jsをhaxeで
 
MQTTとAMQPと.NET
MQTTとAMQPと.NETMQTTとAMQPと.NET
MQTTとAMQPと.NET
 
altJSの選び方
altJSの選び方altJSの選び方
altJSの選び方
 
DataGridを自前実装する話
DataGridを自前実装する話DataGridを自前実装する話
DataGridを自前実装する話
 
オブジェクト指向の皮をかぶった関数型プログラミング言語 Haxe
オブジェクト指向の皮をかぶった関数型プログラミング言語 Haxeオブジェクト指向の皮をかぶった関数型プログラミング言語 Haxe
オブジェクト指向の皮をかぶった関数型プログラミング言語 Haxe
 
FIRST STEP to Haxe/JavaScript
FIRST STEP to Haxe/JavaScriptFIRST STEP to Haxe/JavaScript
FIRST STEP to Haxe/JavaScript
 
大規模なギョームシステムにHaxeを採用してみた話
大規模なギョームシステムにHaxeを採用してみた話大規模なギョームシステムにHaxeを採用してみた話
大規模なギョームシステムにHaxeを採用してみた話
 
大規模なJavaScript開発の話
大規模なJavaScript開発の話大規模なJavaScript開発の話
大規模なJavaScript開発の話
 
Metro Style AppsでMSIL ver.2012/06/09
Metro Style AppsでMSILver.2012/06/09Metro Style AppsでMSILver.2012/06/09
Metro Style AppsでMSIL ver.2012/06/09
 
Metro Style AppsでMSIL
Metro Style AppsでMSILMetro Style AppsでMSIL
Metro Style AppsでMSIL
 
Yet Another DLR for Silverlightの試作
Yet Another DLR for Silverlightの試作Yet Another DLR for Silverlightの試作
Yet Another DLR for Silverlightの試作
 
スマートフォン×Cassandraによるハイパフォーマンス基盤の構築事例
スマートフォン×Cassandraによるハイパフォーマンス基盤の構築事例スマートフォン×Cassandraによるハイパフォーマンス基盤の構築事例
スマートフォン×Cassandraによるハイパフォーマンス基盤の構築事例
 
CommonJSの話
CommonJSの話CommonJSの話
CommonJSの話
 
Scala×silverlight
Scala×silverlightScala×silverlight
Scala×silverlight
 
DLR言語によるSilverlightプログラミング
DLR言語によるSilverlightプログラミングDLR言語によるSilverlightプログラミング
DLR言語によるSilverlightプログラミング
 
Iron Python / Iron Ruby で .NET Programming
Iron Python / Iron Ruby で .NET ProgrammingIron Python / Iron Ruby で .NET Programming
Iron Python / Iron Ruby で .NET Programming
 

Recently uploaded

Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Danieldanielhu54
 
プレイマットのパターン生成支援ツールの評価
プレイマットのパターン生成支援ツールの評価プレイマットのパターン生成支援ツールの評価
プレイマットのパターン生成支援ツールの評価sugiuralab
 
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxIoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxAtomu Hidaka
 
PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000Shota Ito
 
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。iPride Co., Ltd.
 
プレイマットのパターン生成支援ツール
プレイマットのパターン生成支援ツールプレイマットのパターン生成支援ツール
プレイマットのパターン生成支援ツールsugiuralab
 
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ       2024/04/12の勉強会で発表されたものです。新人研修のまとめ       2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。iPride Co., Ltd.
 
20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directoryosamut
 

Recently uploaded (8)

Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
 
プレイマットのパターン生成支援ツールの評価
プレイマットのパターン生成支援ツールの評価プレイマットのパターン生成支援ツールの評価
プレイマットのパターン生成支援ツールの評価
 
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxIoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
 
PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000
 
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
 
プレイマットのパターン生成支援ツール
プレイマットのパターン生成支援ツールプレイマットのパターン生成支援ツール
プレイマットのパターン生成支援ツール
 
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ       2024/04/12の勉強会で発表されたものです。新人研修のまとめ       2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
 
20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory
 

動的なILの生成と編集