Re[9]: [C#] горшочек, не вари
От: IT Россия linq2db.com
Дата: 06.11.24 15:38
Оценка: 2 (2) +1 :)
Здравствуйте, Silver_S, Вы писали:

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

S_S>Теперь выглядит, что для них переписывание стало запретной темой, обходят ее далеко стороной.

Похоже, там начинаются серьёзные проблемы с производительностью. Но все эти запреты — это ненадолго. В C# уже воткнули все возможные разумные фичи практически из всех парадигм, кроме всякой экзотики. ООП был изначально. Из ФП перетянули всё вкусное. АОП тоже присутствует в некотором виде. Дальше расширяться некуда. Осталось только продвинутое метапрограммирование на уровне расширения компилятора и самого языка.
Если нам не помогут, то мы тоже никого не пощадим.
Re[10]: [C#] горшочек, не вари
От: Codealot Земля  
Дата: 06.11.24 16:18
Оценка: :))
Здравствуйте, IT, Вы писали:

IT>В фигурных скобках перечисляются объекты. А квадратные скобки используются для объявления массива/коллекции объектов.



До тебя вообще не доходит, что программисты сами решают, как интерпертировать и использовать содержимое тех или иных скобок?
Ад пуст, все бесы здесь.
Re[11]: [C#] горшочек, не вари
От: IT Россия linq2db.com
Дата: 06.11.24 16:24
Оценка: +1 :)
Здравствуйте, Codealot, Вы писали:

IT>>В фигурных скобках перечисляются объекты. А квадратные скобки используются для объявления массива/коллекции объектов.

C>
C>До тебя вообще не доходит, что программисты сами решают, как интерпертировать и использовать содержимое тех или иных скобок?

С чего бы? Судя по твоим заявлениям, непонимание базовых вещей приводит к обсолютно идиотской интерпретации. Ты случайно обычную грозу не интерпретируешь как проявление божественного вмешательства? Ты же как программист сам решаешь!
Если нам не помогут, то мы тоже никого не пощадим.
Re[12]: [C#] горшочек, не вари
От: Codealot Земля  
Дата: 06.11.24 16:40
Оценка:
Здравствуйте, IT, Вы писали:

IT>Ты случайно обычную грозу не интерпретируешь как проявление божественного вмешательства?


Бобер, выдыхай.
Ад пуст, все бесы здесь.
Re[8]: [C#] горшочек, не вари
От: Silver_S Ниоткуда  
Дата: 06.11.24 17:25
Оценка:
Здравствуйте, IT, Вы писали:

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


IT>Ничего не понял. Зачем вводить ключевое слово, которое вывглядит как обычный атрибут?


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

3 часто используемых варианта — описываются только тела setter с разной автоматизацией, остальное генерируется. Все пригодились бы одновременно:

//Тело вызовется после автоматического изменения field
[after_change] Type Name
{
   //код
}

//вызовется после автоматической проверки: if(field==value) return;
[change] Type Name
{
   //код
   field = value;  //присваиваем вручную, зато можно вызвать код до изменения.
   //код
}

//Для более гибких setter.
//Здесь ничего автоматически не делается. Все вручную: "if(AreSame(field,value)) return; ..."
[setter] Type Name
{
   //код
}

 //Можно для читабельности назвать [property_setter] Вместо [setter]



IT>Похоже, там начинаются серьёзные проблемы с производительностью.


Можно было бы захардкодить имена атрибутов: "[setter]" выглядит как пользовательский атрибут, а компилятор рассматривает как ключевое слово и сам генерирует property.
Тогда не было бы проблем с производительностью. Хотя вроде и так нет таких проблем.
Re: [C#] горшочек, не вари
От: СвободуАнжелеДевис СССР  
Дата: 06.11.24 20:04
Оценка: -1
C>Меня одного это уже начинает раздражать?

да
Нет времени на раскачку!
Re[2]: [C#] горшочек, не вари
От: Codealot Земля  
Дата: 06.11.24 20:41
Оценка:
Здравствуйте, СвободуАнжелеДевис, Вы писали:

САД>да


Для начала, отучайся говорить за всех.
Ад пуст, все бесы здесь.
Re[2]: [C#] горшочек, не вари
От: yenik  
Дата: 07.11.24 14:57
Оценка:
Q>Да нет, как бы норм. Ни кто не заставляет использовать не очевидные фичи языка.

В теории, колхоз — дело добровольное. На практике, куда ты денешься с подводной лодки, когда коллеги и линтеры начнут ругаться, что ты враг прогресса.
Re[9]: [C#] горшочек, не вари
От: _NN_ www.nemerleweb.com
Дата: 07.11.24 16:47
Оценка:
Здравствуйте, Codealot, Вы писали:

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


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


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


С квадратными можно новые правила придумать.
А со старым синтаксисом менять правила это сломать рабочий код.
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[10]: [C#] горшочек, не вари
От: Codealot Земля  
Дата: 07.11.24 17:32
Оценка:
Здравствуйте, _NN_, Вы писали:

_NN>С квадратными можно новые правила придумать.

_NN>А со старым синтаксисом менять правила это сломать рабочий код.

Вот на этот счет у меня большие сомнения.
Ад пуст, все бесы здесь.
Re[11]: [C#] горшочек, не вари
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 07.11.24 17:59
Оценка:
Здравствуйте, Codealot, Вы писали:


IT>>В фигурных скобках перечисляются объекты. А квадратные скобки используются для объявления массива/коллекции объектов.


C>

C>До тебя вообще не доходит, что программисты сами решают, как интерпертировать и использовать содержимое тех или иных скобок?
Не все программисты одинаково полезны!
и солнце б утром не вставало, когда бы не было меня
Re[3]: [C#] горшочек, не вари
От: diez_p  
Дата: 07.11.24 19:04
Оценка:
Здравствуйте, Osaka, Вы писали:

_>>А C# живой вообще? помнится мне когда он заходил после дельфи в 2007, когда был .NET 1.1 и потом 2.0 было конечно круто, у всех стояла винда и шарпы были на взлете.

O>WPF ты стало быть пропустил.
Нет, писал и даже достаточно много, вообще считаю что WPF это лучшее что было для десктопа и всякие js и ts даже рядом не стояли.
Но на текущий момент это нишевая область. Кому нужен толстый клиент с его проблемами?
авто релизы, обновления, совместимости. Преимущества описывать не буду итак понятно, но условно какой массовый софт нужно писать на WPF?
Re[4]: [C#] горшочек, не вари
От: Osaka  
Дата: 07.11.24 19:28
Оценка:
_>Но на текущий момент это нишевая область. Кому нужен толстый клиент с его проблемами?
_>авто релизы, обновления, совместимости. Преимущества описывать не буду итак понятно, но условно какой массовый софт нужно писать на WPF?
Заказное ПО, внутренняя автоматизация. Где скорость доделки нового функционала важнее устойчивости к тяжёлым условиям окружения.
Re[3]: [C#] горшочек, не вари
От: diez_p  
Дата: 07.11.24 19:42
Оценка:
Здравствуйте, IncremenTop, Вы писали:

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


IT>Любой тырпрайз. Не говоря уже о том, что средний прогер на C# стоит дешевле, при этом экосистемы и тулинг продвинутые.

По сравнению с джавой комьюнити куда хуже, а уж msbuild + vs без решарпера еще то поделие.
Хотя язык и CLR правда хороши, до сих пор непонятно почему ms не научился исполнять джарники.
Re[4]: [C#] горшочек, не вари
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 08.11.24 07:29
Оценка:
Здравствуйте, diez_p, Вы писали:


IT>>Любой тырпрайз. Не говоря уже о том, что средний прогер на C# стоит дешевле, при этом экосистемы и тулинг продвинутые.

_>По сравнению с джавой комьюнити куда хуже, а уж msbuild + vs без решарпера еще то поделие.
_>Хотя язык и CLR правда хороши, до сих пор непонятно почему ms не научился исполнять джарники.

На Xamarin есть
Binding a .JAR
и солнце б утром не вставало, когда бы не было меня
Отредактировано 08.11.2024 10:37 Serginio1 . Предыдущая версия .
Re[10]: [C#] горшочек, не вари
От: Silver_S Ниоткуда  
Дата: 08.11.24 13:18
Оценка:
Здравствуйте, IT, Вы писали:

IT>Дальше расширяться некуда. Осталось только продвинутое метапрограммирование на уровне расширения компилятора и самого языка.


Некоторые фичи могут хорошо выглядеть для 99% сценариев использования (с точки зрения чистоты языка), а для 1% случаев выглядеть коряво. Из-за этого 1%, разработчики никогда не включат их в язык, следя за чистотой языка. А когда важнее чистота кода в конкретном проекте, а не языка — для этих случаев помогают макросы.

Например, эти громоздкие property. Раз в несколько лет разработчики C# идут на небольшие уступки по сокращению копипасты. В C# 13 preview очередная мелкая уступка:

https://github.com/dotnet/csharplang/discussions/8561
To elaborate, this is what you will be able to do using langversion=preview when C# 13 releases, and eventually langversion=14:

public Type PropertyName
{
    get;
    set
    {
        if (field == value) return;
        field = value;
        f(PropertyName);
    }
}

If you use a helper method, you could write it as:

public Type PropertyName { get; set => Set(ref field, value, onChanged: () => f(PropertyName)); }


Слишком мелкое сокращение. В идеале это должно бы было прийти примерно к такому:
public implicit Type PropertyName 
{
    //OnChanged
}


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

[Prop<int>] void Name1_(){/*OnChanged*/} 
[Prop] void Name2_(int value){ _name2 = value;}
Re[11]: [C#] горшочек, не вари
От: · Великобритания  
Дата: 08.11.24 13:42
Оценка:
Здравствуйте, Silver_S, Вы писали:

S_S>Слишком мелкое сокращение. В идеале это должно бы было прийти примерно к такому:

А зачем всё это нужно? В каком коде требуется такая логика, что присвоение _каждого_ поля должно производить какие-то неявные действия? По-моему это какая-то архитектурная проблема, неясно зачем тут нужно что-то пихать в ЯП.
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[12]: [C#] горшочек, не вари
От: Silver_S Ниоткуда  
Дата: 08.11.24 16:02
Оценка:
Здравствуйте, ·, Вы писали:

·>А зачем всё это нужно? В каком коде требуется такая логика, что присвоение _каждого_ поля должно производить какие-то неявные действия? По-моему это какая-то архитектурная проблема, неясно зачем тут нужно что-то пихать в ЯП.


Например, все GUI библиотеки/приложения реактивные. Не инвалидируют же все вручную:

ctrl.Color = c;
ctrl.Invalidate();


Это не нужно для функционального кода, где только вычисления. Но там и property не нужны, хватит структур с полями.

Нужно везде где надо что-то инвалидировать или одним вызовом Invalidate(), или с кастомными действиями.
И инициализировать/деинициализировать при подключении объекта через проперти obj1.Prop = obj2; .
Там где реактивный функционал — когда нудная рутина по синхронизации состояний делается автоматически.
Re[13]: [C#] горшочек, не вари
От: · Великобритания  
Дата: 08.11.24 21:11
Оценка: +1
Здравствуйте, Silver_S, Вы писали:

S_S>·>А зачем всё это нужно? В каком коде требуется такая логика, что присвоение _каждого_ поля должно производить какие-то неявные действия? По-моему это какая-то архитектурная проблема, неясно зачем тут нужно что-то пихать в ЯП.

S_S>Например, все GUI библиотеки/приложения реактивные. Не инвалидируют же все вручную:
Я не очень копенгаген в UI, но вроде когда последний раз писал небольшую SPA на ts с реактивным mithril, то там было наоборот — состояние как дерево, меняется, и вычисляются дельты, которые потом рендерятся.
Т.е. подход совсем другой и никакие специальные проперти не нужны. Поэтому как-то было бы странно, чтобы ради какого-то конкретного (притом, как я понимаю, не самого лучшего) подхода организации UI делать спец-поддержку в ЯП... из пушки по воробьям.

S_S>Это не нужно для функционального кода, где только вычисления. Но там и property не нужны, хватит структур с полями.

S_S>Нужно везде где надо что-то инвалидировать или одним вызовом Invalidate(), или с кастомными действиями.
По-моему, это не самый продуктивный подход к UI.

S_S>И инициализировать/деинициализировать при подключении объекта через проперти obj1.Prop = obj2; .

А через метод просто? obj1.connect(obj2)? Зачем тут проперти?


S_S>Там где реактивный функционал — когда нудная рутина по синхронизации состояний делается автоматически.

Это, как раз, не реактивный подход, а как в каком-нибудь старинном Win32, ближе к ООП.
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[13]: [C#] горшочек, не вари
От: karbofos42 Россия  
Дата: 09.11.24 07:10
Оценка:
Здравствуйте, Silver_S, Вы писали:

S_S>Например, все GUI библиотеки/приложения реактивные. Не инвалидируют же все вручную:


Ну, вот для GUI библиотеки будет генерироваться событие типа PropertyChanged, на него можно подписаться и делать что нужно, не меняя язык.
Только прикол такой "реактивности" в том, что в итоге появляется функция группового изменения данных и вместо одной финальной перерисовки бедное окно получает сотни команд на перерисовку после каждой изменённой записи.
И начинаются уже костыли, как бы эту "реактивность" временно отключить и пока Invalidate не вызывать
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.