Информация об изменениях

Сообщение Re[4]: Introducing C# Source Generators от 02.07.2020 8:38

Изменено 02.07.2020 8:59 Silver_S

Re[4]: Introducing C# Source Generators
Здравствуйте, Serginio1, Вы писали:

G>>>Ради эксперимента потратил пару дней чтобы попробовать сделать не только генерацию а возможность модификации исходного кода.


S_S>>А если бы в C# добавили ключевое слово, которое бы сообщало компилятору, что member или class надо отбросить(проигнорировать, не генерировать код) после того, как отработают все генераторы ? Типа комментариев, но с проверкой синтаксиса. А генераторы бы имели доступ. Это бы сильно упростило такое переписывание? Им ведь не сложно такое добавить. Слово, например : "gernerator","meta","$".


S>http://rsdn.org/forum/dotnet/7739320.1
Автор: Silver_S
Дата: 26.05.20


А если с телами методов надо что-то сделать, старые методы останутся, их бы выкинуть из кода.

Или такой пример у них. Здесь backing fields остаются. Только property добавляются.
// The view model we'd like to augment
    public partial class ExampleViewModel
    {
        [AutoNotify]
        private string _text = "private field text";

        [AutoNotify(PropertyName = "Count")]
        private int _amount = 5;
    }


Неплохо было бы так. В зависимости от атрибутов. Все это превращается либо в readonly поля(инициализация через конструктор), либо в AutoNotiyProperty, либо в Record(data class), ... либо еще во что-то.
Сам этот шаблон уже будет не нужен в коде. Можно ему дать хитрое имя с подчеркиваниями, но лучше удалить.

[...]
$public class ExampleViewModel
{
    public string Text= "private field text";
    public int Amount = 5;
}


Очевидно, если будут generators, то захочется им передавать какой-то код, который нужен только им, потом его отбрасывать.
Re[4]: Introducing C# Source Generators
Здравствуйте, Serginio1, Вы писали:

G>>>Ради эксперимента потратил пару дней чтобы попробовать сделать не только генерацию а возможность модификации исходного кода.


S_S>>А если бы в C# добавили ключевое слово, которое бы сообщало компилятору, что member или class надо отбросить(проигнорировать, не генерировать код) после того, как отработают все генераторы ? Типа комментариев, но с проверкой синтаксиса. А генераторы бы имели доступ. Это бы сильно упростило такое переписывание? Им ведь не сложно такое добавить. Слово, например : "gernerator","meta","$".


S>http://rsdn.org/forum/dotnet/7739320.1
Автор: Silver_S
Дата: 26.05.20


А если с телами методов надо что-то сделать, старые методы останутся, их бы выкинуть из кода.

Или такой пример у них. Здесь backing fields остаются. Только property добавляются.
// The view model we'd like to augment
    public partial class ExampleViewModel
    {
        [AutoNotify]
        private string _text = "private field text";

        [AutoNotify(PropertyName = "Count")]
        private int _amount = 5;
    }


Неплохо было бы так. В зависимости от атрибутов. Все это превращается либо в readonly поля(инициализация через конструктор), либо в AutoNotiyProperty, либо в Record(data class), ... либо еще во что-то.
Сам этот шаблон уже будет не нужен в коде. Можно ему дать хитрое имя с подчеркиваниями, но лучше удалить.

[...]
$public class ExampleViewModel
{
    public string Text= "private field text";
    public int Amount = 5;
}


Очевидно, если будут generators, то захочется им передавать какой-то код, который нужен только им, потом его отбрасывать.

Вроде они сначала планировали слово replace, для замены кода не помеченного на удаление.
Они испугались вот этого. Что код заменит один generator, потом его заменит другой generator.

To support scenarios where multiple generators may replace the same method, it will be necessary to determine an order for the chain of replacements....

И выбрали другую крайность — ничего не удалять совсем.
Хотя если сразу помечать код на удаление(а генераторы только добавляют) подобных проблем не будет совсем.