Будущее C#, или почему C# ходит вокруг да около Nemerle 1
От: VladD2 Российская Империя www.nemerle.org
Дата: 23.03.09 18:22
Оценка: 80 (9) :))
Поводом для данной темы стало видео "Expert to Expert: Anders Hejlsberg — The Future of C#"
http://channel9.msdn.com/shows/Going+Deep/Expert-to-Expert-Anders-Hejlsberg-The-Future-of-C/
в котором Хейльсберг и (по всей видимости) Меер (Erik Meijer) разговариваю о бижнем и дальнем будущем C#.

Меня заинтересовала последняя часть видео (где-то 40-вая минута и далее) где они начали рассуждать о совсем дальнем будущем C# (о 5-ой версии).

Там прозвучало не мало слов из которых можно сделать не мало выводов.

Пойду по порядку перечислять то что меня заинтересовало (задело).

1. C# — это императивный язык. Собственно означает ли это, что развитие C# в сторону ФП (функционального программирования) завершилось добавлением лямбд?

2. МП (метапрограммирование) — это никак не слишком большая пушка, а очень хорошо и мы (т.е. они) будем это поддерживать. Вот, собственно, "компилятор как сервис".

3. Макросы — это плохо так как нетипизированно и вообще текстово. Отсюда можно сделать вывод, что макросы ими понимаются не так как это понимается в Лиспе или Немерле, а как аналог препроцессора C. Не ясно почему их друг Дон (который Бокс) не убедил их в обратно.

4. Работа на уровне AST и запуск пользовательского кода из компилятора... а как все это отлаживать — задается вопросом Хейльсберг. Отсюда видим, что Дон и правда ничего не рассказал о Лиспе. Хотя слово Лисп он знает, так как упоминал. Ну, да я тоже такое слово знаю .

Меж тем отлаживать "это" весьма не сложно. Достаточно сгенерировать текст по AST и правильно расставить location-ы (сопоставить местоположение). Далее можно отлаживать генерируемый код обычным отладчиком. Код же самих макросов и так отлаживается с пол пинка, так как это просто код плагина к компилятору.

5. Компилятор как сервис — это по всей видимости не более чем возможность скомпилировать код из текстовой строчки в рантайме. Так что IT был прав.

6. Отсюда о пользовательских EDSL (встроенных в универсальный язык языков предметной области) до 6-ой версии можно не говорить. А возможно и вообще говорить бессмысленно.

7. Сопоставление с образцом (оно же ПМ — Паттерн-Матчинг) — это всего лишь другой взгляд на наследование и полиморфизм. При этом этот "взгляд" хуже исходного, так как он открывает внутренности объектов которые раньше были черным ящиком. Короче, нарушает принципы инкапсуляции. Индусы могут сломать ноготь. А безопасность труда — это святое. Неясно только как бедные индусы публичные поля пережили...

8. Вот мультиметоды (ММ) — это круть! Множественная диспечерезация (МД), т.е. по нескольким типам, а не по одному this, да еще с динамическим расширением это здорово... Это, кстати, сказал Меер, который судя по словам сказанным о нем в Википедии является серьезным функциональщиком и работал раньше над Хасклем. Может, что-то с Хасклем не так?
Что-то я тут не понимаю. Может это был стеб, так как улыбка у него была в этот момент до ушей, но как человек значащий что такое ПМ может серьезно сравнивать их с ММ и МД? Да, несомненно, ПМ позволяет с легкостью организовать локальный (не расширяемый динамически) МД, но обратно не верно. ПМ — это возможность распознавать сложнейшие паттерны, а не только динамический тип нескольких объектов. Уверен, что ММ буду востребованы гораздо реже нежели ПМ.
Что касается инкапусляции, то тоже не ясно. Что мешает реализовать МП только по публичному интерфейсу или по внутренним членам внутри типа? По крайней мере ПМ по объектам реализован во всех ведущих гибридных языках (Scala, F#, Nemerle).

9. Поддержка параллелизма очень нужно. Но как ее реализовать мы (они) не знаем. Точно будет PLinq. Можно было бы конечно еще добавить в CLR что-то вроде авторов (из Скалы и Эрланга), но ведь хрен знает что из этого этого получится. А, ведь это серьезное основание чтобы даже не пробовать. И то правда. Ведь все мощные расширения (дженерики, лямбды) были добавлены ребятами пришедшими из МС Ресерч. И видимо, раз уж ты попал в группу компиляторов МС, то исследованиями тебе заниматься не с руки. Надо ждать когда кто-то еще из МС Ресерч сделает что-то хорошее. Хочется верить, что таковые найдутся и они что-то сделают. А та 2-3 года на "продуктивзацию" решения и золотой ключик у нас в кармане.

10. МП, МП и многое другое противоречит принципам ООП, а значит оно нам не нужно. Где-то я это слышал. Где? А, точно. 10 лет назад Хейльсберг предложил добавить в Яву события и делегаты, а злые и консервативные Саншики (или Саночники?) сказали ему свое твердое сфотовое "нет" объяснив попутно, что это не объектно-ориентированное решение, и что намного лучше будет добавить вложенные и анонимные классы которые упростили бы реализацию интерфейсов и паттерна Слушатель, и в то же время не изменили бы чистоты ОО-крнцепций Явы. Видимо, через 10 лет новатор Хейльсберг понял, что они были правы. В прочем события и делегаты и правда были не сам лучшим изобретением. Вот только не потому, что они не ООП, а потому что они не до ФП.

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

Я что-то не так понял, или все же прав был Черчилль говоривший: «Кто в молодости не был радикалом — у того нет сердца. Кто в зрелости не консерватор — у того нет головы». Или говоря другими словами — старость не радость .
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.