Re[7]: C# 7 - названия и прочее
От: Sinix  
Дата: 07.05.15 13:42
Оценка:
Здравствуйте, Ziaw, Вы писали:

S>>А вот compile-time метагенерация скорее всего будет. Или в c#7 или в c#8.

Z>Макросы и есть компайл-тайм генерация. Как только она появится — начнут думать в сторону ее упрощения.
Тут слегка о другом речь, метапрограммирование на атрибутах и макросы/квазицитирование — это всё-таки разные штуки и покрывают они разный набор задач. Разница — как между AOP и DSL, лучше их обсуждать по отдельности.

С compile-time-реврайтерами никаких принципиальных проблем нет. Более того, с первых версий студии реврайтеры используются для кучи вещей — от кодогенераторов для настроек/ресурсов и до code contracts (начиная с vs 2010 конечно). Речь только о том, чтобы добавить публичное и поддерживаемое API для этой радости, что в принципе тож несложно. Для roslyn code fix нечто подобное уже сделано.

С _примититивным_ квазицитированием (только для избавления от генерации AST вручную) особых проблем тож нет,
var stubCode = SyntaxFactory.ParseExpression(@$"
public {typeName} {propertyName}
{
  get { return {fieldName}; }
  set
  {
    {fieldName} = value;
    OnPropertyChanged(""{propertyName}"");
  }
}")

— и вперёд
Конечно, назвать это полноценными макросами уровня N — сова лопнет, но для AOP-кодогенерации и этого за глаза достаточно.


А вот внедрять поддержку расширений синтаксиса аля всё тот же N — ну не лезет оно никак в шарп Другой язык получится. Точнее, тот же немерль, вид сбоку. Да и нафиг не нужно, по большому счёту.
Дисклаймер: разумеется, будут частные случаи, но как всегда, специализированный язык тут будет выигрывать с большим отрывом.


>До расширения синтаксиса C# может и не дожить, но сами макросы и квазицитирование скорее всего успеет попробовать. Темпы развития радуют и вектор у него немерловый.

Вектор не немерловый, ибо сценарии разные.

Вообще, это лучше не мне, а девелоперам шарпа высказывать. Я это уже сделал, есть желание поправить — присоединяйтесь.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.