Насколько уникален LINQ? - PullRequest
9 голосов
/ 05 июня 2009

Это вопрос о LINQ, функции языка .NET, не LINQ to SQL.

Я считаю, что возможность запроса практически любой информации из коллекции памяти таким согласованным и декларативным способом является одной из лучших языковых функций, с которыми я когда-либо сталкивался.

Я нахожу это чрезвычайно полезным, и мне нравится чистая абстракция, которую он обеспечивает. LINQ может даже использоваться для запроса строк, действительно, он очень гибкий.

Мои вопросы:

  1. Является ли эта идея "Language Integrated Queries" новой? и если нет, то какие другие языки реализуют подобную функцию
  2. Как другие реализации сравниваются с Microsoft?
  3. Это немного субъективно, но насколько важно, по мнению других, LINQ как идея?

ура

Ответы [ 8 ]

7 голосов
/ 05 июня 2009

Идея языкового целочисленного запроса не нова, MS предлагает его уникальным и новым. На него влияют синтаксис Haskell и SQL, у Haskell была идея перечислителей и отложенной оценки, которая является основным принципом подчеркивания при реализации LINQ, фактически LINQ - это просто синтаксический сахар.

Я чувствую, что связь - это отличный мост между рассуждениями о ваших программах и данными абстрактно и чисто.

3 голосов
/ 05 июня 2009

Говоря как запрос в коллекции памяти, нет, это не уникальная особенность. Возьмем, к примеру, оператор прямого канала F #. Это позволяет вам писать очень похожие стилевые операции, как и запрос linq.

Возьмем, к примеру, следующий код, который извлекает цифры из строки и суммирует их

"foobar42".ToCharArray() 
  |> Seq.filter System.Char.IsDigit 
  |> Seq.map (fun x -> x.ToString() ) 
  |> Seq.map System.Int32.Parse 
  |> Seq.sum
2 голосов
/ 05 июня 2009

Является ли эта идея "Language Integrated Queries" новой? и если нет, то какие другие языки реализуют подобную функцию

Если вы считаете sql языком, то нет. Я думаю, что MS понял, что все в массиве, таком как контейнер, по сути является базой данных в памяти. Мало того, но многие операции над этими коллекциями одинаковы. Программисты должны написать миллионы .selects, .where и .firts в течение года. Многие из этих реализаций имеют временные массивы и переменные, которые загромождают код. С LINQ логика сделана намного более краткой, без переменной / массива temp / holder. MS уничтожила целый класс ошибок стандартными операторами LINQ.

Как другие реализации сравниваются с Microsoft? Не уверен

Это немного субъективно, но насколько важно, по мнению других, LINQ как идея?

Я чувствую, что LINQ, возможно, самая революционная языковая функция, которую я когда-либо видел, и я подумал, что замыкания также были довольно удивительными. Это делает программы чище, а программисты - более продуктивными.

2 голосов
/ 05 июня 2009

Linq имеет много общего с списками , которые можно найти в функциональных языках и в более распространенных языках, таких как Python, где это уже довольно давно является стандартной и очень широко используемой функцией. *

Для хорошего примера понимания списка, эта функция Python взята из простой проверки орфографии Питера Норвиг

def edits1(word):
   s = [(word[:i], word[i:]) for i in range(len(word) + 1)]
   deletes    = [a + b[1:] for a, b in s if b]
   transposes = [a + b[1] + b[0] + b[2:] for a, b in s if len(b)>1]
   replaces   = [a + c + b[1:] for a, b in s for c in alphabet if b]
   inserts    = [a + c + b     for a, b in s for c in alphabet]
   return set(deletes + transposes + replaces + inserts)

Это похоже на Linq, с (неявным) select, записанным в начале выражения, вместо того, чтобы быть странным в конце, как в Linq.

лямбда-выражения несколько недовольны в Python, и списки по умолчанию в Python стремятся (подумайте List<T>) вместо ленивых (IEnumerable<T>), но это очень близко.

Что касается концепции наличия (в некоторой степени) чисто функциональной цепочки, как здесь ответили другие люди, то это одна из старейших концепций в компьютерных языках (Лиспу сейчас за 50 ...)

2 голосов
/ 05 июня 2009

Концепции в Linq (Где, Выбрать, Агрегировать) были в LISP в течение лет , теперь они совсем не новы. Реализация в C # особенно элегантна, особенно потому, что ей удается добавить довольно разрушительную концепцию, но при этом хорошо сочетающуюся с существующим кодом C # 2.0. «Переосмысление Linq AST как SQL» также чертовски умно.

2 голосов
/ 05 июня 2009

В Microsoft очень похожий синтаксис был разработан в C-omega (Cw) до его принятия C # и VB.

2 голосов
/ 05 июня 2009

Я думаю, что LINQ.NET начал все это. В настоящее время есть несколько других реализаций: http://en.wikipedia.org/wiki/Linq#Other_language_implementations,, но MS LINQ был первым, если я правильно помню.

2 голосов
/ 05 июня 2009

Я думаю, что LINQ очень интересен.

Помните, что он по существу добавляет мощные функциональные возможности программирования в .NET

Интересно также, что Microsoft не пришлось менять время выполнения, чтобы заставить LINQ работать, все волшебство заключается в новых языковых возможностях в C # 3, в компиляторе и в библиотеке классов - потому что по сути ваши запросы внутренне переводятся в лямбда-синтаксис (см. LINQPad для хорошей демонстрации этого)

Я полагаю, что одной из причин, по которой MS разработала такую ​​технологию, является упрощение распараллеливания программ - SQL может стать менее актуальным из-за LINQ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...