Advertisement

More Related Content

Slideshows for you(20)

Advertisement

Similar to The History of LINQ(20)

Advertisement

The History of LINQ

  1. The History of LINQ 2013/06/22 つくばC#勉強会 Yoshifumi Kawai - @neuecc
  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. 対象 LINQを全く知らない人 向けではない LINQの解説はほとんどないです、スミマセンスミマセン あとで思いだしてもらえれば LINQをちょっと知ってる人 歴史的なのって、知ってたほうがきっと面白い あ、これLINQで見たことある!みたいな
  4. Who is the creator of LINQ?
  5. Anders Hejlsberg? (Creator of C#, TypeScript. Microsoft Technical Fellow)
  6. No.
  7. Erik Meijer LINQ作者はこの人。
  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. 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. 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. An Overview of
  12. processing information Relational Data, XML, Objectの間のギャップを埋める それがCωの型システムのゴール どこかで聞いたような(LINQ?LINQ?LINQ?) 説明でのXMLフィーチャー度は高い そもそもX#(まさにXML)だものね そういう時代でした、全てはXMLに…… という幻想 XML関連の説明は適当に読み飛ばそう:)
  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. 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. 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. 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. Language INtegrated Query
  18. C# 3.0(2008-) Language Extensions for LINQ Type Inference Anonymous Type Lambda Expressions Expression Trees Query Syntax Extension Methods キーワード並べただけなのは手 抜きなのではないか疑惑
  19. // LINQの説明をなんか書く C#はIntelliSense指向言語 を体現する何か C# is LINQ 無限大に手が広がる LINQの強みは合成可能なこと、しかもIntelliSenseで選択できる ドローTake!OrderBy!Select!SkipWhile! 事前のデッキ構築から勝負は始まる デッキ構築のない無限大は辛ぽよ
  20. IEnumerable<T> (LINQ to Objects) DataSetXML IQueryable SQL Twitter The structure of LINQ Providers
  21. IEnumerable<T> IObservable<T> (Reactive Extensions) UI (ReactiveProperty) OAuth (ReactiveOAuth) IQbservable<T> WMI
  22. Reactive Extensions
  23. Reactive Extensions = LINQ to Events LINQ to Asynchronous よくわかんないけど凄そうだ!
  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. Sync/Async – Single/Multi 死角がない!
  26. Over the Language
  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. Conclusion
  29. まとめ、じゃない Cωはよく見るとヤボったい 何をどう変えると使いやすくなるのか見える LINQはかんすーがたとおぶじぇくとしこーの融合 使いやすいのか使いやすくないのかが問題だ C#はunsophisticated peopleに媚びた言語だから:) 汎用性と特化のせめぎあい 使いやすいは正義 でも別に無駄にキーワード増やしまくってるわけでもないけどね
Advertisement