вторник, мая 15, 2007

LINQ и эволюция C#

В июньском номере MSDN Magazine вышла очередная статья на тему LINQ: "Эволюция LINQ и его влияние на проект C#". Еще один интересный материал на эту тему прочитал в блоге Ivan-а. Даже не один, а целая серия постов:
О бедном LINQ-е замолвите слово...
Слово о бедном LINQ-е 2...
LINQ & C# 3.0 часть третья....
LINQ & C# 3.0 часть четвертая....
К слову, на мой взгляд, материалы в блоге оказались информативнее и интереснее, чем MSDN Magazine. Но я о другом. Оба автора акцентируют внимание на том, что LINQ, это нечто большее, чем просто встроенный в язык механизм запросов. Первоначальная идея облегчить работу с наборами данных и коллекциями привела в движение такие механизмы, которые кардинально изменяют облик языка C#. И эти изменения сами по себе гораздо важнее, чем собственно то, ради чего они создавались.
Инициализаторы объектов и коллекций, неявные типы (type inference), анонимные типы, методы - расширения, ну и наконец, лямбда выражения. И все это ради LINQ? Мне кажется отнюдь нет. C# сегодня бурно эволюционирует в направлении функционального программирования. Новации впечатляющие, и это похоже еще не конец. Пока эволюцию языка сдерживают ограничения платформы CLR (C# 3.0 выходит на CLR версии 2.0) (так, например, применение неявных типов ограничено локальными пременными внутри методов), а что будет дальше?
Чем вызван сегодняшний "эволюционный взрыв" C#? Введение дженериков и анонимных делегатов во второй версии языка казались нам значительными, но это просто цветочки по сравнению с тем, что нас ждет в третьей. Налицо тенденция внедрения элементов функционального программирования в языки общего назначения. Многое из того, что появилось в C# 3.0 можно увидеть и в Java proposed language specifications
Безусловно нововведения усиливают выразительную мощь языка. Но у медали есть обратная строна - язык становится более сложным. C# перестает быть простым языком с необъятной библиотекой и примерами кода в MSDN на все случаи жизни.
Похоже, все только начинается...

6 комментариев:

Iv комментирует...

наверное не сложным, а скорее большим :), для многих людей шарп третий не сложнее первого. Реально эти навороты шарпа применяет маленький процент программистов, имхо. По крайней мере, у нас из 12 программистов на шарпе, LINQ'ом интересуюсь только я, ну не интересно им это.

Peter Nikouline комментирует...

test

Peter Nikouline комментирует...

"Чем вызван сегодняшний "эволюционный взрыв" C#? "

Надо отметить, что между БД и языками прог(для примера, буду говорить о C#) существует разрыв.
Чтобы получить данные с БД необходимо было сделать ряд манипуляций: установить Connection, создать обьект типа Command, считать данные,
закрыть Connection и так далее. То есть механизм запросов не был полноправным членом языка(таким, как например, предложения if, switch и так далее).
Реализация проекта LINQ сделала LINQ запросы элементами языка, обеспечивая при этом(что важно) безопастность типов.
Теперь C# 3.0 позволяет средствами лямбда-выражений получить единообразным образом информацию из БД, XML файлов, любых обьектов C#, реализующих
IEnumerable интерфейс. Таким образом лямбда-выражения ввели в C# элементы функционального прог.
Главной причиной того, что современные языки развиваются в сторону функционального прог, является появление многоядерных процессоров.
Теперь появляется возможность увеличить скорость выполнения програм за счет распараллеривания алгоритма. Теперь современный язык скорее
должен быть декларативным, чем императивным, то есть давать возможность пользователю описать задачу, не говоря конкретно как это сделать.
Лямбда-выражения являются шагом в этом направлении. Теперь компилятор может определить число ядер на машине и, в зависимости от этого
значения, странслировать данный алгоритм таким образом, чтобы получить максимальное быстродействие путем его распараллеривания.

Peter Nikouline комментирует...

"Многое из того, что появилось в C# 3.0 можно увидеть и в Java proposed language specifications"

Похоже, что C# 3.0 на поколение опередил Java

Sergey Rozovik комментирует...

to NikSoft
>Похоже, что C# 3.0 на поколение опередил Java

Дело в том что C# изначально находился в более выгодном положении. Java появилась первой. Уже в первой версии C# его разработчики учли многие недостатки Java, и в C# появились события и делегаты, свойства с аксессорами и т.д. А Java, соответственно, оказалась в положении догоняющего не по своей воле.

Fahrain комментирует...

Большое спасибо за ссылки! Давно искал что-то такое, с простым объяснением.