The History of LINQ

21,352 views

Published on

Tukuba C# Study

0 Comments
15 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
21,352
On SlideShare
0
From Embeds
0
Number of Embeds
17,573
Actions
Shares
0
Downloads
19
Comments
0
Likes
15
Embeds 0
No embeds

No notes for slide

The History of LINQ

  1. 1. The History of LINQ2013/06/22 つくばC#勉強会Yoshifumi Kawai - @neuecc
  2. 2. Self Introduction@仕事株式会社グラニ 取締役CTO技術的な目標としては、C#で日本を代表する会社にする!エンジニアひっそり募集してます:)@個人活動Microsoft MVP for Visual C#Web http://neue.cc/Twitter @neueccJavaScriptに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 MeijerLINQ作者はこの人。
  8. 8. 作者から辿るLINQの源泉Erik MeijerHead in the box @Channel9http://en.wikipedia.org/wiki/Erik_Meijer_(computer_scientist)http://research.microsoft.com/en-us/um/people/emeijer/ErikMeijer.htmlMicrosoft Research, Microsoft(Cloud Programmability Team)つい最近独立Applied Dualityhttp://www.applied-duality.com/
  9. 9. Haskellとの関わり(-2000)Haskell 98策定者の一人Programming in Haskellの動画解説とかもhttp://www.cs.nott.ac.uk/~gmh/book.htmlParsec: A practical parser libraryDaan Leijen, Erik Meijerhttp://research.microsoft.com/en-us/um/people/emeijer/papers/parsec.pdfLINQはMonad?このバックグラウンドならそりゃそうだよね
  10. 10. Cω(-2005)Cω(しーおめが) @Microsoft Researchhttp://research.microsoft.com/en-us/um/cambridge/projects/comega/2004年にコンパイラプレビュー公開続報はない、というのもC# 3.0に吸収されていったからCω is an extension of C# in two areasPolyphonic C#と呼ばれていた非同期処理への言語拡張Xen, X#と呼ばれていたXMLやテーブルデータへの言語拡張こっちの側面がLINQへ繋がる
  11. 11. An Overview of Cω
  12. 12. processing informationRelational Data, XML, Objectの間のギャップを埋めるそれがCωの型システムのゴールどこかで聞いたような(LINQ?LINQ?LINQ?)説明でのXMLフィーチャー度は高いそもそもX#(まさにXML)だものねそういう時代でした、全てはXMLに……という幻想XML関連の説明は適当に読み飛ばそう:)
  13. 13. streamsIEnumerable<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.Customersset City = "London"where Country == "UK" && City == "Landon";
  16. 16. XML LiteralsC#にはないけど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 LINQType InferenceAnonymous TypeLambda ExpressionsExpression TreesQuery SyntaxExtension Methods キーワード並べただけなのは手抜きなのではないか疑惑
  19. 19. // LINQの説明をなんか書くC#はIntelliSense指向言語を体現する何かC# is LINQ無限大に手が広がるLINQの強みは合成可能なこと、しかもIntelliSenseで選択できるドローTake!OrderBy!Select!SkipWhile!事前のデッキ構築から勝負は始まるデッキ構築のない無限大は辛ぽよ
  20. 20. IEnumerable<T>(LINQ to Objects)DataSetXML IQueryableSQL TwitterThe 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 EventsLINQ 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.jsLINQ to ObjectsのJavaScript移植TypeScriptのジェネリクス対応で更に強く!Java - EL Collection OperationsEL 3.0 uses LINQhttps://java.net/projects/el-spec/pages/CollectionOperationsRxJS/RxJava/Rx…Reactive Extensions for many laguagesDart Streams APIWe have learned a lot by looking at .Net’s RXhttp://news.dartlang.org/2012/11/introducing-new-streams-api.htmlLINQはどこでも使える!普遍!
  28. 28. Conclusion
  29. 29. まとめ、じゃないCωはよく見るとヤボったい何をどう変えると使いやすくなるのか見えるLINQはかんすーがたとおぶじぇくとしこーの融合使いやすいのか使いやすくないのかが問題だC#はunsophisticated peopleに媚びた言語だから:)汎用性と特化のせめぎあい使いやすいは正義でも別に無駄にキーワード増やしまくってるわけでもないけどね

×