Diese Präsentation wurde erfolgreich gemeldet.
Die SlideShare-Präsentation wird heruntergeladen. ×

The History of LINQ

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Hier ansehen

1 von 29 Anzeige

Weitere Verwandte Inhalte

Diashows für Sie (20)

Andere mochten auch (15)

Anzeige

Ähnlich wie The History of LINQ (20)

Weitere von Yoshifumi Kawai (13)

Anzeige

The History of LINQ

  1. 1. The History of LINQ 2013/06/22 つくばC#勉強会 Yoshifumi Kawai - @neuecc
  2. 2. Self Introduction @仕事 株式会社グラニ 取締役CTO 技術的な目標としては、C#で日本を代表する会社にする! エンジニアひっそり募集してます:) @個人活動 Microsoft MVP for Visual C# Web http://neue.cc/ Twitter @neuecc JavaScriptにLINQ to Objectsを移植したライブラリ作ってます linq.js - http://linqjs.codeplex.com/
  3. 3. 対象 LINQを全く知らない人 向けではない LINQの解説はほとんどないです、スミマセンスミマセン あとで思いだしてもらえれば LINQをちょっと知ってる人 歴史的なのって、知ってたほうがきっと面白い あ、これLINQで見たことある!みたいな
  4. 4. Who is the creator of LINQ?
  5. 5. Anders Hejlsberg? (Creator of C#, TypeScript. Microsoft Technical Fellow)
  6. 6. No.
  7. 7. Erik Meijer LINQ作者はこの人。
  8. 8. 作者から辿るLINQの源泉 Erik Meijer Head in the box @Channel9 http://en.wikipedia.org/wiki/Erik_Meijer_(computer_scientist) http://research.microsoft.com/en-us/um/people/emeijer/ErikMeijer.html Microsoft Research, Microsoft(Cloud Programmability Team) つい最近独立 Applied Duality http://www.applied-duality.com/
  9. 9. Haskellとの関わり(-2000) Haskell 98策定者の一人 Programming in Haskellの動画解説とかも http://www.cs.nott.ac.uk/~gmh/book.html Parsec: A practical parser library Daan Leijen, Erik Meijer http://research.microsoft.com/en-us/um/people/emeijer/papers/parsec.pdf LINQはMonad?このバックグラウ ンドならそりゃそうだよね
  10. 10. Cω(-2005) Cω(しーおめが) @Microsoft Research http://research.microsoft.com/en-us/um/cambridge/projects/comega/ 2004年にコンパイラプレビュー公開 続報はない、というのもC# 3.0に吸収されていったから Cω is an extension of C# in two areas Polyphonic C#と呼ばれていた非同期処理への言語拡張 Xen, X#と呼ばれていたXMLやテーブルデータへの言語拡張 こっちの側面がLINQへ繋がる
  11. 11. An Overview of Cω
  12. 12. processing information Relational Data, XML, Objectの間のギャップを埋める それがCωの型システムのゴール どこかで聞いたような(LINQ?LINQ?LINQ?) 説明でのXMLフィーチャー度は高い そもそもX#(まさにXML)だものね そういう時代でした、全てはXMLに…… という幻想 XML関連の説明は適当に読み飛ばそう:)
  13. 13. streams IEnumerable<T>へのフィーチャー T*でIEnumerable<T>になる、素敵! public string* LoTR() { yield return "The Fellowship of the Ring"; yield return "The Two Towers"; yield return "The Return of the King"; } public void PrintTrilogyTitles() { LoTR().{Console.WriteLine(it)}; } ラムダ式みたいな何かは、 it が暗黙 の引数になってるよう(Groovyみたい) C#だと x => Console.WriteLine(x)
  14. 14. Anonymous Structs むむ、これは匿名型(Anonymous Type)では? // varがないから面倒くさいけど、型定義してnewで生成なのは匿名型そっくり // 定義は型+名前はオプション、名前無しの場合は配列風にアクセスすることが可能 struct{ int; string; string; DateTime date; string; } x = new {47, "Hello World", "Dare Obasanjo", date = DateTime.Now, "This is"}; Console.WriteLine(x[1]); // “Hello World”, 名前なしの場合は配列風にアクセス DateTime pubDate = x.date; // 名前をつけたものは名前つきなプロパティでもアクセスできる // 複数の同名フィールドに値を持たせるような定義も可能! struct {string field; string field; string field;} field3 = new {field="one", field="two", field="three"}; // その場合はIEnumerable<string>になる(インラインなyield returnっぽい) string* fields = field3.field;
  15. 15. SQL-based Operators クエリ構文みたいな何か この時はまだ相当SQLそのものな構文だったよう // 語順は完全にSQLそのまま、ただし当然タイプセーフ struct { string Title; string Artist;}* results = select Title, Artist from CDs where Style == CDStyle.HipHop; results.{ Console.WriteLine("Title = {0}, Artist = {1}", it.Title, it.Artist); }; // update, insert, transactionなども用意されていた int n = update DB.Customers set City = "London" where Country == "UK" && City == "Landon";
  16. 16. XML Literals C#にはないけど VB.NETにはこれそのものじゃないけどある // こんな定義で public class NewsItem{ attribute string title; attribute string author; struct { DateTime date; string body; } } // こんな風にリテラル直打ちで NewsItem news = <NewsItem title="Hello World" author="Dare Obasanjo"> <date>{DateTime.Now}</date> <body>I am the first post of the New Year.</body> </NewsItem>; Console.WriteLine(news.title + " by " + news.author + " on " + news.date);
  17. 17. Language INtegrated Query
  18. 18. C# 3.0(2008-) Language Extensions for LINQ Type Inference Anonymous Type Lambda Expressions Expression Trees Query Syntax Extension Methods キーワード並べただけなのは手 抜きなのではないか疑惑
  19. 19. // LINQの説明をなんか書く C#はIntelliSense指向言語 を体現する何か C# is LINQ 無限大に手が広がる LINQの強みは合成可能なこと、しかもIntelliSenseで選択できる ドローTake!OrderBy!Select!SkipWhile! 事前のデッキ構築から勝負は始まる デッキ構築のない無限大は辛ぽよ
  20. 20. IEnumerable<T> (LINQ to Objects) DataSetXML IQueryable SQL Twitter The structure of LINQ Providers
  21. 21. IEnumerable<T> IObservable<T> (Reactive Extensions) UI (ReactiveProperty) OAuth (ReactiveOAuth) IQbservable<T> WMI
  22. 22. Reactive Extensions
  23. 23. Reactive Extensions = LINQ to Events LINQ to Asynchronous よくわかんないけど凄そうだ!
  24. 24. LINQ to Events イベントは時間軸に乗った無限リスト time 間隔は不定期でも可 終わりがなくてもいい(無限に続く) // モーションセンサーから来る回転速度をLINQで var motion = new Motion(); motion.CurrentValueChangedAsObservable() .Select(x => x.SensorReading.DeviceRotationRate) .Subscribe(x => Debug.WriteLine(x)); motion.Start(); 時間を横軸に捉えることで LINQになる!不思議!
  25. 25. Sync/Async – Single/Multi 死角がない!
  26. 26. Over the Language
  27. 27. to JavaScript/Java/Dart/etc… linq.js LINQ to ObjectsのJavaScript移植 TypeScriptのジェネリクス対応で更に強く! Java - EL Collection Operations EL 3.0 uses LINQ https://java.net/projects/el-spec/pages/CollectionOperations RxJS/RxJava/Rx… Reactive Extensions for many laguages Dart Streams API We have learned a lot by looking at .Net’s RX http://news.dartlang.org/2012/11/introducing-new-streams-api.html LINQはどこでも使える!普遍!
  28. 28. Conclusion
  29. 29. まとめ、じゃない Cωはよく見るとヤボったい 何をどう変えると使いやすくなるのか見える LINQはかんすーがたとおぶじぇくとしこーの融合 使いやすいのか使いやすくないのかが問題だ C#はunsophisticated peopleに媚びた言語だから:) 汎用性と特化のせめぎあい 使いやすいは正義 でも別に無駄にキーワード増やしまくってるわけでもないけどね

×