2009-06-05 10 views
9

To jest pytanie dotyczące LINQ funkcji języka .NET, nie LINQ do SQL.Jak wyjątkowy jest LINQ?

Uważam, że umiejętność odpytywania prawie każdego zbioru w pamięci w tak spójny i deklaratywny sposób jest jedną z najlepszych cech językowych, jakie kiedykolwiek spotkałem.

Uważam, że jest to niezwykle przydatne i uwielbiam czystą abstrakcję, którą zapewnia. LINQ może być nawet używany do wysyłania zapytań do Stringów, co jest bardzo elastyczne.

Moje pytania to:

  1. Czy ten pomysł "Language Integrated zapytania" nowych? a jeśli nie, jakie inne języki implementują podobną funkcję?
  2. W jaki sposób inne implementacje porównują się do Microsoft's?
  3. To jest trochę subiektywne, ale jak ważne są inne osoby, które uważają LINQ za pomysł?

okrzyki

Odpowiedz

7

Pomysł języka integerated zapytania nie jest nowy, sposób MS stawia go jest unikalny i nowy. To ma wpływ na składnię Haskella i SQL, Haskell miał pomysł z wyliczeniami i leniwą oceną, która jest podstawową zasadą podkreślenia we wdrażaniu LINQ, w rzeczywistości LINQ jest tylko cukrem syntaktycznym.

Uważam, że link jest doskonałym pomostem pomiędzy rozumowaniem programów i danych w sposób abstrakcyjny i czysty.

+0

tak, właściwie powiedziałbym, że cukier syntaktyczny jest naprawdę rdzeniem mocy LINQ – andy

+3

może syntaktyczną metamfetaminą? – geofftnz

3

Speaking jako zapytań o kolekcjach w pamięci, nie to nie jest to unikalna cecha. Weźmy na przykład operatora F # naprzód. Pozwala na pisanie operacji o podobnym stylu, jak w przypadku zapytania linq.

Weźmy na przykład poniższy kod, który wydobywa z ciągiem cyfr i sumuje je

"foobar42".ToCharArray() 
    |> Seq.filter System.Char.IsDigit 
    |> Seq.map (fun x -> x.ToString()) 
    |> Seq.map System.Int32.Parse 
    |> Seq.sum 
+0

Hej Jared, czy uważasz, że implementacja F # zapewnia intuicyjną i czystą abstrakcję, którą robi LINQ? Myślę, że moc LINQ to zarówno implementacja, jak i składnia no? – andy

+3

@andy Myślę, że intuicyjność F # naprawdę zależy od twojego tła. Pierwsze kilka razy, gdy podniosłem F # znalazłem składnię niezwykle nieintuicyjną i trudną do naśladowania, ale nie mam silnego tła funkcjonalnego. Moi znajomi, którzy mają silne zaplecze funkcjonalne, uznali to za łatwe do naśladowania. Z biegiem czasu przyzwyczaiłam się do tego i teraz bardzo łatwo jest podążać za intuicją. – JaredPar

+0

@Jared: doskonały punkt. Chyba wskazuję sposób, w jaki MS stworzył składnię luźno opartą na SQL. Rzeczywiście SQL jest rodzajem ostatecznego języka zapytań, to jest jedyny cel. Aby stworzyć składnię, która sama modeluje na SQL, wydaje się intuicyjna ...? – andy

2

Myślę, że LINQ jest bardzo interesujący.

Pamiętaj, że to w zasadzie dodaje rozbudowane możliwości programowania funkcyjnego w .NET

Ciekawe jest również to, że Microsoft nie trzeba zmienić czas pracy, aby uczynić pracę LINQ, cała magia jest z powodu nowych funkcji językowych w C# 3 i w kompilatorze oraz w bibliotece klas - ponieważ zasadniczo twoje zapytania są wewnętrznie tłumaczone na składnię lambda (zobacz LINQPad dla dobrego pokazania tego)

Wierzę, że jednym z powodów, dla których MS opracowała tego rodzaju technologię, jest ułatwienie programy równoległe - SQL może stać się mniej istotny z powodu LINQ.

+1

@dplante: nie pomijaj ostatniego kroku, który sprawia, że ​​LINQ działa. Drzewa wyrażeń. Być może inne nowoczesne kompilatory mogą parsować wyrażenie i zapisać drzewo ekspresji w strukturze dostępnej dla środowiska wykonawczego, ale LINQ to robi. Pozwala dostawcy LINQ zinterpretować drzewo ekspresji, aby uzyskać wszystko, czego wymaga bazowy magazyn danych, aby spełnić zamiary programisty. –

2

W firmie Microsoft bardzo podobna składnia została opracowana w C-omega (Cw), zanim została przyjęta przez C# i VB.

2

Pojęcia w Linq (Where, Select, Aggregate) były w LISP-u dla lat teraz nie są niczym nowym.Wdrożenie w języku C# jest szczególnie eleganckie, szczególnie, że udaje mu się dodać ładną, przełomową koncepcję, ale tak dobrze wtapia się w istniejący kod C# 2.0. "Nowa interpretacja Linq AST as SQL" również jest całkiem sprytna.

+0

hmm, dzięki Paul. Tak, naprawdę powiedziałbym, że jest to elegancja implementacji MS, która sprawia, że ​​jest tak przydatna ...? – andy

2

Linq ma wiele wspólnego z List comprehensions można znaleźć w językach funkcjonalnych i bardziej popularnych językach, takich jak Python, gdzie od dłuższego czasu jest to standard i bardzo szeroko stosowana funkcja.

Na dobry exemple z listowych, ta funkcja Python pochodzi z simple spell checker Petera Norvig

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) 

To wygląda trochę jak Linq, z (implicite) Wybierz napisany na początku wyrazu, zamiast być niesamowicie na końcu, jak w Linq.

lambdas są nieco niezadowolone w Pythonie, a domyślne wyliczenia list w Pythonie są chętne (pomyśl List<T>) zamiast leniwych (IEnumerable<T>), ale jest bardzo blisko.

chodzi o koncepcję posiadania (nieco) czystego funkcji łańcuchowym, jak inni ludzie tutaj odpowiedział, że to jeden z najstarszych koncepcji w językach komputerowych (Lisp bytu ponad 50 teraz ...)

+0

Wow, ten kod do sprawdzania pisowni jest naprawdę fajny! – Casebash

2

Czy ten pomysł "Zintegrowane zapytania językowe" nowe? a jeśli nie, to jakie inne języki implementują podobną funkcję?

Jeśli uważasz, że SQL jest językiem, to nie. Myślę, że wgląd MS był taki, że wszystko w pojemniku jak w kartonie jest zasadniczo bazą danych w pamięci. Nie tylko to, ale wiele operacji w tych kolekcjach jest takich samych. Programiści muszą napisać miliony .selects, .wheres i .prime w ciągu roku. Wiele z tych implementacji ma tymczasowe tablice i zmienne kodu bałaganu. Dzięki LINQ logika jest znacznie bardziej zwięzła, bez zmiennych/tablic zmiennych/uchwytów. MS zlikwidował całą klasę błędów za pomocą standardowych operatorów LINQ.

W jaki sposób inne wdrożenia porównują się do Microsoft's? Nie jestem pewien

To jest trochę subiektywne, ale jak ważne są inne osoby, które uważają LINQ za pomysł?

Uważam, że LINQ jest prawdopodobnie najbardziej rewolucyjnym językiem, jaki kiedykolwiek widziałem, i myślałem, że zamknięcia są również niesamowite. Czyni programy bardziej przejrzystymi, a programiści o wiele bardziej produktywni.

+0

dziękuje Steve, doskonała artykulacja tego, co LINQ osiągnął i umożliwiał – andy

Powiązane problemy