Upload
ryota-murohoshi
View
626
Download
1
Embed Size (px)
Citation preview
LINQ、Select連弾ってやります?【referencesource】
室星亮太
2015/04/11(土))第4回)Japan)Xamarin)User)Group)Conference
すいません
Xamarin.iOSとXamarin.Androidの話
しません!
お前だれよ?• 名前":"室星亮太
• 仕事":"Unityでゲーム開発
• Twi+er":"@RyotaMurohoshi
• 投稿先":"h+p://qiita.com/RyotaMurohoshi
Unityクラスタから来ました!
「UnityだとLINQが結構落ちて辛いよ!」っていうLTを以前した者です。JXUGの勉強会で、こんな話をさせていただいてありがとうございます。
ということで今日もXamarin.iOSもXamarin.Android
の話はしません。
さて、LINQ最高ですよね
前もお話させていただいた通りUnityだと結構LINQが落ちました
原因はAOTコンパイラ関連のエラー。何が辛いってiOSだけ落ちる
つらい
なので作りました。「UniLinq」という、Unityでも使える
LINQ互換ライブラリ(β)
UniLinqはmono/monoのLINQのコードをベースにいくつか手を加え作りましたUnityのUnity&Technologies/monoのLINQのコードと比べ
AOTコンパイル関連エラー対策がかなりされていました
さて、ここまで前振りです
ある日、事件が起きました
「あれ、monoのリポジトリにLINQ%to%Objectsのコードがない」h"ps://github.com/mono/mono/blob/master/mcs/class/System.Core/System.Linq/Enumerable.cs
な、んだと....
本日のタイトル
LINQ、Select連弾ってやります?【referencesource】
referencesource
referencesource
referencesource
そうですね。LINQのコードも、referencesourceに置き換わったんですね
issueはコチラ%h'ps://github.com/mono/mono/pull/1477
referencesourceh"ps://github.com/Microso2/referencesource
h"p://www.mono+project.com/docs/about+mono/dotnet+integra8on/
referencesourceのLINQのコード、
とても見ていて面白いです。例えば、WhereとSelectの連弾
読みずらくないですか?
List<A> aList = LoadList ();
IEnumerable<D> dList = aList .Select (a => CovetCtoD( CovetBtoC( ConvertAtoB( a ) ) ) );
僕はこっちの方が好きです。連弾!
List<A> aList = LoadList ();
IEnumerable<D> dList = aList .Select (a => CovetAtoB(a)) .Select (b => CovetBtoC(b)) .Select (c => CovetCtoD(c));
こうも書けますね、連弾!
List<A> aList = LoadList ();
IEnumerable<D> dList = aList .Select (CovetAtoB) .Select (CovetBtoC) .Select (CovetCtoD);
オーバーヘッド気になります?referencesource版では対策されています!
WhereとかSelectを効率よくやるためにEnumerableクラス内に内部クラス群が定義されている
• WhereSelectEnumerableIterator
• WhereSelectArrayIterator
• WhereSelectListIterator
など
みなさんなら、多分コード見た方が早いです
h"ps://github.com/Microso2/referencesource/blob/master/System.Core/System/Linq/Enumerable.cs
あと、neueさんがとってもわかりやすくまとめられています
h"p://www.slideshare.net/neuecc/an3internal3of3linq3to3objects329200657
お約束
Xamarinいいなぁ~Unityにも早く来ないかなぁ~
まとめ• monoのコード、referencesourceをガンガン活用していますね
• referencesourceのLINQのコード面白いですよ
• WhereやSelectの連弾、読みやすければやっていいと思います
蛇足Unityに新登場したIL2CPPで、UniLinqいらない子?