Метапрограммирование C# 4-5-6 vs. Немерле
От: mihailik Украина  
Дата: 06.01.09 01:36
Оценка: 9 (2) :)
Среди всех синтаксических сладостей, есть одна существенная разница между подходами Андерса Хейлсберга и VladD2:

Немерле это compile-time
C# v5+ это compile-time/runtime

Макросы и другая декларативная гимнастика Немерле не живёт в runtime, а только в момент компиляции. С другой стороны, C# 5+ это синтаксические деревья-лямбды разросшиеся от уровня expression версии C# 3.0 до statements и шире.


Различие очень напоминает разницу между C++ templates и C# generics. Преимущества и недостатки обоих подходов известны.

Важное преимущество runtime-метапрограммирования в том, что алгоритм можно "перекомпилировать" под странные машины.

LINQ умеет исполнять некоторое подмножество C# код как SQL. Четвёртая версия .NET будет разбирать LINQ-запросы по косточкам для параллельного исполнения. С пятой версией C# можно всерьёз браться за runtime-кросскомпиляцию, например шейдеров для 3D-ускорителей из кода C#.

Можно всего этого добиться без runtime-метапрограммирования, в Немерле сейчас? Вероятно да. Даже сейчас люди пытаются делать runtime-кросскомпиляцию из сырого IL. Но это очень ресурсоёмкое хакерство.

Возможно, в эту сторону стоит подумать "немерлетальцам"? Немерле-макросу и так доступно синтаксическое дерево, значит он может сконвертировать его в нечто вещественное а-ля Expression<T> -- какой-нибудь Statement<T>, Method<T> и модифицировать/прогонять его в runtime.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.