Re[11]: [C#] горшочек, не вари
От: IT Россия linq2db.com
Дата: 02.11.24 17:45
Оценка:
Здравствуйте, e.thrash, Вы писали:

IT>>
IT>>Dictionary<(int code,string value, List<MyCodeValueContainerBlaBlaBla>)> dic = new();
IT>>

IT>>Тут явно есть некоторая разница. Не находишь?
ET>тут лаконичнее, да, но ведь есть var если надо короче писать.

Поля/свойства класса?
Если нам не помогут, то мы тоже никого не пощадим.
Re[11]: [C#] горшочек, не вари
От: IT Россия linq2db.com
Дата: 02.11.24 17:47
Оценка:
Здравствуйте, ·, Вы писали:

IT>>Тут явно есть некоторая разница. Не находишь?

·> Так надо телегу за лошадью ставить, тогда всё просто:
·>
·>var dic = new Dictionary<(int code,string value, List<MyCodeValueContainerBlaBlaBla>)>();
·>


Давай я тебе более полный код приведу и ты его переделаешь:

class AAA
{
    private Dictionary<(int code,string value, List<MyCodeValueContainerBlaBlaBla>)> _dic = new();
}


Вперёд!
Если нам не помогут, то мы тоже никого не пощадим.
Re[5]: [C#] горшочек, не вари
От: Константин Б. Россия  
Дата: 02.11.24 18:47
Оценка: +1
Здравствуйте, wl., Вы писали:

wl.>Здравствуйте, Константин Б., Вы писали:


КБ>>Здравствуйте, wl., Вы писали:


wl.>>>а чужой код вообще не читаешь?

wl.>>>Кстати, оффтопом, я считал, что Python простой язык, но посмотрел, как параметры функций объявляются, и понял, что даже там всё не просто:

wl.>>>def func(*args):

wl.>>>def func(**kwargs):
wl.>>>def func(a, b, /, c):
wl.>>>def func(a, b=5):

КБ>>Серъезно? Вот это вот сложно?


wl.>кроме 4-го варианта, который встречается в том же C++, понять, что означает третий вариант без подсказки из зала (от chatgpt) сходу не получилось


Я правильно понимаю что вы руководствуетесь логикой "знаю c++ — значит знаю на 90% все остальные языки"? У меня для вас плохие новости.
Re[12]: [C#] горшочек, не вари
От: · Великобритания  
Дата: 02.11.24 19:33
Оценка: +1
Здравствуйте, IT, Вы писали:

IT>Давай я тебе более полный код приведу и ты его переделаешь:

IT>
IT>class AAA
IT>{
IT>    private Dictionary<(int code,string value, List<MyCodeValueContainerBlaBlaBla>)> _dic = new();
IT>}
IT>

IT>Вперёд!
В java будет diamond:
private Dictionary<(int code,string value, List<MyCodeValueContainerBlaBlaBla>)> _dic = new Dictionary<>();

Что кстати полезно если типы разные, например:
private Map<...very many type params> _dic = new ConcurrentHashMap<>();
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[6]: [C#] горшочек, не вари
От: wl. Россия  
Дата: 02.11.24 19:34
Оценка:
Здравствуйте, Константин Б., Вы писали:

КБ>Я правильно понимаю что вы руководствуетесь логикой "знаю c++ — значит знаю на 90% все остальные языки"? У меня для вас плохие новости.


насколько плохие? посмотрел тут на flutter+dart — ба! знакомые всё люди
Re[4]: [C#] горшочек, не вари
От: Darky Darkov Россия  
Дата: 04.11.24 11:42
Оценка: +1
Здравствуйте, vsb, Вы писали:

vsb>Здравствуйте, Codealot, Вы писали:


vsb>>>Так C# же с рождения такой — эдакая недо-Java, в которую тащут всё блестящее.


C>>Раньше до такого все же не доходило. Сейчас смотрю на список новых фич и периодически чешу репу — а что, это кому-то нужно, кроме горстки людей на весь мир? И эта горстка, по чистому совпадению, в основном работает в C# team?


vsb>Ну видимо у каждого своя граница. Я как ни посмотрю на очередной список фич в C#, так у меня это впечатленеи и складывается. Вот взять C# 3.


vsb>LINQ — недо-SQL, недо-ORM в языке. Не нужно.


У тебя чрезвычайно ограниченный взгляд на LINQ в частности и на Expression Trees в целом и на их область применения. Скорее всего, ты просто не работал с этими штуками достаточно серёьзно и не в курсе, чего они могут.
Re[4]: [C#] горшочек, не вари
От: Codealot Земля  
Дата: 04.11.24 15:11
Оценка:
Здравствуйте, _NN_, Вы писали:

_NN>Новый синтаксис позволяет записывая одинаковый код получить лучшую производительность.


Это результат не синтаксиса, а его реализации. Ничто не мешало просто улучшить старую реализацию.
Ад пуст, все бесы здесь.
Re[2]: [C#] горшочек, не вари
От: Codealot Земля  
Дата: 04.11.24 15:13
Оценка: +1
Здравствуйте, Константин Б., Вы писали:

КБ>Лучше если бы полностью переделывали всё? Целостность дизайна того стоит?


Лучше, если бы не делали непродуманные фичи.
Ад пуст, все бесы здесь.
Re[5]: [C#] горшочек, не вари
От: Codealot Земля  
Дата: 04.11.24 15:36
Оценка: +1
Здравствуйте, Слава, Вы писали:

С>А вот return r уже нельзя. Хорошо бы иметь возможность написать что-то в духе var r = newclass classname(public|internal|private).


Теперь для решения этой задачи есть tuple. Правда, определения полей придется копи-пастить. Еще можно использовать record, но тогда придется все же объявить его на верхнем уровне в явном виде. Хотя и с меньшим количеством бойлерплейта, чем для обычного типа.
Вот так для решения одной задачи у нас есть уже три разных средства, и каждое — по своему кривое.
Ад пуст, все бесы здесь.
Re[5]: [C#] горшочек, не вари
От: _NN_ www.nemerleweb.com
Дата: 05.11.24 06:29
Оценка: 1 (1)
Здравствуйте, Codealot, Вы писали:

C>Здравствуйте, _NN_, Вы писали:


_NN>>Новый синтаксис позволяет записывая одинаковый код получить лучшую производительность.


C>Это результат не синтаксиса, а его реализации. Ничто не мешало просто улучшить старую реализацию.


Вопрос, что вы имеете ввиду под старой реализацией ?

Для Span всегда можно было через stackalloc:
ReadOnlySpan<byte> span = stackalloc byte[10]
{
    1, 2, 3, 4, 5, 6, 7, 8, 9, 10
};


А вот для List сложнее.
Ведь семантически
var x = new MyList { a, b, c };


Это всегда будет:
var tmp = new MyList();
tmp.Add(a);
tmp.Add(b);
tmp.Add(c);
var x = tmp;


И здесь нельзя менять семантику потому как на ней завязано достаточно много кода.

Новый синтаскис позволяет вызывать AddRange, что конечно более приемлимо чем вызов Add по отдельности.
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[6]: [C#] горшочек, не вари
От: Silver_S Ниоткуда  
Дата: 05.11.24 11:31
Оценка:
Здравствуйте, IT, Вы писали:

IT>Вот классический код для INotifyPropertyChanged, сгенерированный T4: ...

IT>Как по мне, так волне себе качественное решение. А как бы ты сам решал подобную задачу? Какими-нибудь виртуальными методами?

Я бы решал добавлением новых фич в язык. Может даже введением нового ключевого слова "property", с расширяемым синтаксисом. Универсального и лаконичного формата не придумали. Поэтому надо разрешить самодельщину, ключевое слово "property" нужно было бы для сохранения читабельности, когда большой зоопарк форматов.

Например:
property[MyStyle1] string? Location
{
    //...before
    _location = value;
    //...after
}


Оно раскроется для режима MyStyle1 в :

private string? _location;
public  string?  Location
{
    get { return _location; }
    set
    {
        if (_location != value)
        {
            //...before
            _location = value;
            //...after
        }
    }
}
Re[6]: [C#] горшочек, не вари
От: Codealot Земля  
Дата: 05.11.24 14:17
Оценка:
Здравствуйте, _NN_, Вы писали:

_NN>И здесь нельзя менять семантику потому как на ней завязано достаточно много кода.


Почему, собственно?
Ад пуст, все бесы здесь.
Re[7]: [C#] горшочек, не вари
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 05.11.24 15:37
Оценка:
Здравствуйте, Silver_S, Вы писали:
S_S>Например:
S_S>
S_S>property[MyStyle1] string? Location
S_S>{
S_S>    //...before
S_S>    _location = value;
S_S>    //...after
S_S>}
S_S>


Здесь проблема, что SG не может модифицировать существующий код

Для римера PropertyChanged.SourceGenerator
А вот такой легко превращает из полей свойства и методы
using PropertyChanged.SourceGenerator;
public partial class MyViewModel
{
    [Notify] private string _lastName;
    public string FullName => $"Dr. {LastName}";
}



partial class MyViewModel : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;

    public string LastName
    {
        get => _lastName;
        set
        {
            if (!EqualityComparer<string>.Default.Equals(_lastName, value))
            {
                _lastName = value;
                OnPropertyChanged(EventArgsCache.LastName);
                OnPropertyChanged(EventArgsCache.FullName);
            }
        }
    }

    protected virtual void OnPropertyChanged(PropertyChangedEventArgs args)
    {
        PropertyChanged?.Invoke(args);
    }
}


Твой вариант возможен как использование внешнего файла. Возможно в будущем добавят анлоги неерлевских макросов. Или файлы типа блазоровских для HTML
https://github.com/dotnet/roslyn/blob/main/docs/features/source-generators.cookbook.md?ysclid=m34mdrgmtm121143934
и солнце б утром не вставало, когда бы не было меня
Отредактировано 05.11.2024 15:46 Serginio1 . Предыдущая версия . Еще …
Отредактировано 05.11.2024 15:41 Serginio1 . Предыдущая версия .
Re[7]: [C#] горшочек, не вари
От: _NN_ www.nemerleweb.com
Дата: 05.11.24 22:24
Оценка:
Здравствуйте, Codealot, Вы писали:

C>Здравствуйте, _NN_, Вы писали:


_NN>>И здесь нельзя менять семантику потому как на ней завязано достаточно много кода.


C>Почему, собственно?


Уточните вопрос.
Почему нельзя из
new Collection { 1, 2, 3 }


Генерировать
Collection t = new();
t.AddRange(new[] { 1, 2, 3 });


Или вместо

ImmutableArray<int>.Create(new int[] { 1, 2, 3 });


Каким-то образом сделать:

[InlineArray(3)] struct __InlineArray3<T> { private T _element0; }

Span<int> __tmp = new __InlineArray3<int>();
__tmp[0] = 1;
__tmp[1] = 2;
__tmp[2] = 3;
ImmutableArray<int> ia =
    ImmutableArray.Create((ReadOnlySpan<int>)__tmp);


Правильно понимаю ?
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[8]: [C#] горшочек, не вари
От: Codealot Земля  
Дата: 06.11.24 02:48
Оценка: :)
Здравствуйте, _NN_, Вы писали:

_NN>Правильно понимаю ?


Вроде да. Так почему они смогли реализовать это эффективно с квадратными скобками, но никак не могли с фигурными, которые использовались раньше?
Ад пуст, все бесы здесь.
Отредактировано 06.11.2024 2:55 Codealot . Предыдущая версия .
Re[8]: [C#] горшочек, не вари
От: Silver_S Ниоткуда  
Дата: 06.11.24 11:47
Оценка: 2 (1)
Было бы лучше, если бы было нормальное имя самого проперти, а не поля. Это же не редко используемая мегафича, а синтаксический сахар для очень массового применения.

S> Здесь проблема, что SG не может модифицировать существующий код


У них давно была попытка сделать переписывание кода через SG(или макросы). Но обломались — увидели, что есть проблемы с порядком применения нескольких макросов, если они используют побочные эффекты от работы предыдущих макросов.
Теперь выглядит, что для них переписывание стало запретной темой, обходят ее далеко стороной.

Я пытался там предложить вариант жульничества — простую в реализации имитацию переписывания без побочных эффектов(не покушаясь на запретную тему):
Dummy declarations for Source Generators #7698

Но то ли их не заинтересовала тема, то ли не получилось внятно изложить.

Хотя для такого способа описания пропертей, не помешало бы еще разрешить такой синтаксис только для генераторов:
[MyPropertyGenerator] string? Location
{
    _location = value; //Или лучше "field = value;" - в C# уже обсуждают ключевое слово "field"
}


Если почти закончились фичи для новых версий C#. Решили бы проблемы с лаконичностью пропертей. Тем более есть способы решения с минимальным изменением языка или компилятора.
Re[7]: [C#] горшочек, не вари
От: IT Россия linq2db.com
Дата: 06.11.24 15:09
Оценка: +1
Здравствуйте, Silver_S, Вы писали:

IT>>Вот классический код для INotifyPropertyChanged, сгенерированный T4: ...

IT>>Как по мне, так волне себе качественное решение. А как бы ты сам решал подобную задачу? Какими-нибудь виртуальными методами?

S_S>Я бы решал добавлением новых фич в язык. Может даже введением нового ключевого слова "property", с расширяемым синтаксисом.


Ничего не понял. Зачем вводить ключевое слово, которое вывглядит как обычный атрибут?
Если нам не помогут, то мы тоже никого не пощадим.
Re[8]: [C#] горшочек, не вари
От: IT Россия linq2db.com
Дата: 06.11.24 15:12
Оценка: 2 (1)
Здравствуйте, Serginio1, Вы писали:

S> Твой вариант возможен как использование внешнего файла. Возможно в будущем добавят анлоги неерлевских макросов. Или файлы типа блазоровских для HTML

S>https://github.com/dotnet/roslyn/blob/main/docs/features/source-generators.cookbook.md?ysclid=m34mdrgmtm121143934

Такое уже давно работает. См. ISourceGenerator, IIncrementalGenerator.
Если нам не помогут, то мы тоже никого не пощадим.
Re[9]: [C#] горшочек, не вари
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 06.11.24 15:17
Оценка:
Здравствуйте, Silver_S, Вы писали:

Ну вообще интересны макросы типа Blaror (Razor), что бы по ним формировать код.
То есть писать не тупо форматную строку, но и код с интеллисенсом.
и солнце б утром не вставало, когда бы не было меня
Re[9]: [C#] горшочек, не вари
От: IT Россия linq2db.com
Дата: 06.11.24 15:19
Оценка: 1 (1) +1 :)
Здравствуйте, Codealot, Вы писали:

C>Вроде да. Так почему они смогли реализовать это эффективно с квадратными скобками, но никак не могли с фигурными, которые использовались раньше?


Потому что ты как обычно не понимаешь сути. В фигурных скобках перечисляются объекты. А квадратные скобки используются для объявления массива/коллекции объектов.
Если нам не помогут, то мы тоже никого не пощадим.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.