Возможности C# 9.0 и NET5
От: varenikAA  
Дата: 23.03.21 06:05
Оценка:
Кто уже использует? Есть очевидные преимущества? Положительные чувства?
Если сейчас попробовать 5, то уже в ноябре нужно будет опять апгрейд делать до 6.
Но и на 3.1 вроде бы уже не хочется.
Смущают маленькие сроки LTS (всего 3 года).
☭ ✊ В мире нет ничего, кроме движущейся материи.
Re: Возможности C# 9.0 и NET5
От: Ночной Смотрящий Россия  
Дата: 24.03.21 13:39
Оценка: 2 (1)
Здравствуйте, varenikAA, Вы писали:

AA>Кто уже использует? Есть очевидные преимущества?


NRT наконец то стало можно пользоваться. В C# 8 реальные библиотеки на него перевести без использования оператора ! и хитрой магии на атрибутах даже в тривиальных местах не получалось. Ну и вывод типов к кторе тоже довольно полезен оказался. Разок relational pattern пригодился.

AA> Положительные чувства?


Да.
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re: Возможности C# 9.0 и NET5
От: Xander Zerge Россия www.zerge.com
Дата: 25.03.21 15:24
Оценка: 2 (1) +1
Здравствуйте, varenikAA, Вы писали:

AA>Кто уже использует? Есть очевидные преимущества? Положительные чувства?

Ну есть приятные моменты.
Например, init-setter. Когда есть много свойств, большинство из них используются со значениями по-умолчанию, а после инициализации клиенту их менять нельзя. Раньше надо было делать конструктор с конским списком параметров. Сейчас клиент создавая дефолтным конструктором, проставляет нужные ему свойства как хочет.
Конструктор new() — двояко. С одной стороны, приятно писать. С другой — тяжело читать: myFile.Open(name, new ShareOptions(), new AccessOptions(), new CreateOptions()) превращается в myFile.Open(name, new(), new(), new())
Серёжа Новиков,
программист
Re[2]: Возможности C# 9.0 и NET5
От: varenikAA  
Дата: 26.03.21 01:04
Оценка: +2
Здравствуйте, Xander Zerge, Вы писали:

XZ>Конструктор new() — двояко. С одной стороны, приятно писать. С другой — тяжело читать: myFile.Open(name, new ShareOptions(), new AccessOptions(), new CreateOptions()) превращается в myFile.Open(name, new(), new(), new())


Да, new с тех пор как 3 года назад попробовал f# nemerle вообще напрягает.
Лучше бы разрешили без нью конструкторы вызывать.
☭ ✊ В мире нет ничего, кроме движущейся материи.
Re[2]: Возможности C# 9.0 и NET5
От: Codealot Земля  
Дата: 26.03.21 23:06
Оценка: +1
Здравствуйте, Xander Zerge, Вы писали:

XZ>Конструктор new() — двояко. С одной стороны, приятно писать. С другой — тяжело читать: myFile.Open(name, new ShareOptions(), new AccessOptions(), new CreateOptions()) превращается в myFile.Open(name, new(), new(), new())


Так никто не заставляет это делать. С другой стороны, писать "readonly Dictionary<string, Func<T>> _handlers = new();" — намного удобнее, как и читать.
Ад пуст, все бесы здесь.
Re[3]: Возможности C# 9.0 и NET5
От: Don Reba Канада https://stackoverflow.com/users/49329/don-reba
Дата: 26.03.21 23:33
Оценка: 1 (1)
Здравствуйте, Codealot, Вы писали:

C>Так никто не заставляет это делать. С другой стороны, писать "readonly Dictionary<string, Func<T>> _handlers = new();" — намного удобнее, как и читать.


В Немерле, к слову, было бы:
def _handlers = Dictionary();
Ce n'est que pour vous dire ce que je vous dis.
Re[4]: Возможности C# 9.0 и NET5
От: QrystaL Украина  
Дата: 28.03.21 12:10
Оценка: +2
Здравствуйте, Don Reba, Вы писали:
DR>В Немерле, к слову, было бы:
DR>
DR>def _handlers = Dictionary();
DR>

В немерле форуме активность нулевая (в буквальном смысле). И под .net core так и непонятно — будет ли работать, или забросили...
Re: Возможности C# 9.0 и NET5
От: Ilya81  
Дата: 06.04.21 16:39
Оценка: :)
Здравствуйте, varenikAA, Вы писали:

AA>Кто уже использует? Есть очевидные преимущества? Положительные чувства?

AA>Если сейчас попробовать 5, то уже в ноябре нужно будет опять апгрейд делать до 6.
AA>Но и на 3.1 вроде бы уже не хочется.
AA>Смущают маленькие сроки LTS (всего 3 года).

Насколько я видел, в числе новшеств только всё новые синтаксические извращения, с такими делами у C# будущего нет, как и с WPF/UWP было — доделать как следует кривые места, и был б чудесный инструмент, но Microsoft этого не сделает никогда. Со времён async/await полтора полезных новшества и огромная куча синтаксических извращений.
Re[3]: Возможности C# 9.0 и NET5
От: varenikAA  
Дата: 12.04.21 02:48
Оценка:
Здравствуйте, Codealot, Вы писали:

C>Так никто не заставляет это делать. С другой стороны, писать "readonly Dictionary<string, Func<T>> _handlers = new();" — намного удобнее, как и читать.


Не уверен, вот как вы к этому отнесетесь?

   public record Client(int Id, string FullName);

   WriteLine($"Hello, {(1,"Alice")}!");


UPD
Косанул. тупла получилась
но так тоже не лучше. ихмо.
  Client client = new(1, "Alice"); // <= вместо var конкретный тип, бэд практик.
  WriteLine($"Hello, {client}!");
☭ ✊ В мире нет ничего, кроме движущейся материи.
Отредактировано 12.04.2021 2:51 Разраб . Предыдущая версия .
Re[4]: Возможности C# 9.0 и NET5
От: Codealot Земля  
Дата: 12.04.21 05:46
Оценка: +1
Здравствуйте, varenikAA, Вы писали:

AA>но так тоже не лучше. ихмо.

AA>
AA>  Client client = new(1, "Alice"); // <= вместо var конкретный тип, бэд практик.
AA>  WriteLine($"Hello, {client}!");
AA>


С одной стороны в любом случае конкретный тип.
Что они могли бы на самом деле сделать лучше — объявление мемберов в виде "var client = new Client();", в том же стиле как локальные переменные.
Ад пуст, все бесы здесь.
Re: Возможности C# 9.0 и NET5
От: varenikAA  
Дата: 16.04.21 03:10
Оценка:
Здравствуйте, varenikAA, Вы писали:

AA>Кто уже использует? Есть очевидные преимущества? Положительные чувства?


Итак, перевел старый кор-проект на 5-ку. впечатление очень приятное.
работа с рекордами сильно упростила. интересно код-стайл если в одном файле с клиентом накидал рекордов это норм?
ждем теперь улучшение скорости старта настольных/консольных приложений.
А по факту еще нужны варианты как в виде рекордов, так и в виде вариантов аргументов.
Ну и как ни крути все ЯП постепенно стремятся стать лиспом.
☭ ✊ В мире нет ничего, кроме движущейся материи.
Re: Возможности C# 9.0 и NET5
От: varenikAA  
Дата: 16.04.21 03:12
Оценка:
Здравствуйте, varenikAA, Вы писали:

AA>Кто уже использует? Есть очевидные преимущества? Положительные чувства?

Все еще не работает обрезка кода. впф начинает падать, кроме того в один файл почему-то не упакавался сиплюсный рантайм.
обрезка удалила всего 8 из 118МБ
☭ ✊ В мире нет ничего, кроме движущейся материи.
Re[4]: Возможности C# 9.0 и NET5
От: Codealot Земля  
Дата: 16.04.21 21:23
Оценка:
Здравствуйте, Don Reba, Вы писали:

DR>В Немерле, к слову, было бы:

DR>
DR>def _handlers = Dictionary();
DR>


И это реально работает?
Ад пуст, все бесы здесь.
Re[5]: Возможности C# 9.0 и NET5
От: rameel https://github.com/rsdn/CodeJam
Дата: 16.04.21 22:18
Оценка:
Здравствуйте, Codealot, Вы писали:

C>И это реально работает?


Работает, тип определяется из первого использования

def map = Dictionary();
map.Add(100, 100.0); // <-- Вот здесь map будет определен как Dictionary<int, double>
... << RSDN@Home 1.0.0 alpha 5 rev. 0>>
Re[6]: Возможности C# 9.0 и NET5
От: Codealot Земля  
Дата: 16.04.21 23:20
Оценка:
Здравствуйте, rameel, Вы писали:

R>Работает, тип определяется из первого использования


А если остальные использования оказываются несовместимы с этим типом?
Ад пуст, все бесы здесь.
Re[7]: Возможности C# 9.0 и NET5
От: rameel https://github.com/rsdn/CodeJam
Дата: 16.04.21 23:31
Оценка:
Здравствуйте, Codealot, Вы писали:

R>>Работает, тип определяется из первого использования


C>А если остальные использования оказываются несовместимы с этим типом?


Ошибка компиляции
... << RSDN@Home 1.0.0 alpha 5 rev. 0>>
Re[8]: Возможности C# 9.0 и NET5
От: Codealot Земля  
Дата: 16.04.21 23:57
Оценка:
Здравствуйте, rameel, Вы писали:

R>Ошибка компиляции


То есть он не может определить, что к примеру
map.Add(100, 100.0);
map.Add("text", 100.0);

означает словарь, у которого тип первого аргумента — object?
Ад пуст, все бесы здесь.
Re[9]: Возможности C# 9.0 и NET5
От: rameel https://github.com/rsdn/CodeJam
Дата: 17.04.21 10:24
Оценка:
Здравствуйте, Codealot, Вы писали:

C>То есть он не может определить, что к примеру

C>
C>map.Add(100, 100.0);
C>map.Add("text", 100.0);
C>

C>означает словарь, у которого тип первого аргумента — object?

В немерле, если аргументы сводятся к object — ошибка компиляции, и сделано это намеренно, в остальном случае типы могут уточнятся, насколько я помню. Если так нужен object, то либо специализируешь дженерики, либо так
map.Add(100:object, 100.0);


C# тебе тоже не даст вывести тип к общему типу, если общий тип — это object
var i = true ? 100 : "text";
... << RSDN@Home 1.0.0 alpha 5 rev. 0>>
Re[9]: Возможности C# 9.0 и NET5
От: hi_octane Беларусь  
Дата: 17.04.21 10:43
Оценка: 6 (2) +1
C>означает словарь, у которого тип первого аргумента — object?
Не может не потому что это сложно, а потому что авто-вывод типа object в Nemerle вывели в отдельный вид ошибок. К object приводится почти всё, и при этом в большинстве случаев object совсем не то что хотел программист. Да и dictionary это частный случай, а вывод типов из использования работает в этом же стиле для любых generics, и внутри методов, и в локальных функциях, и т.д. Появление где-то внутри object, и последующее распространение object вверх и вниз по коду, приводило бы к ошибкам по понятности соперничающим с шаблонами C++

Если хочется именно object — достаточно в первой строчке сделать map.Add((object)100, 100.0); ну или объявить тип Dictionary как это обычно делается в C#. Вывод типов настолько всеобщий, что даже объявление типа внутри компилятора — своего рода подсказка для алгоритма вывода, а не что-то супер-жёсткое. Т.е. компилятор поймёт код в котором ты задашь только часть типов-ограничений для Dictionary (или любого другого дженерика):

def map = Dictionary.[object, _](); //TKey object, TValue пусть компилятор разбирается сам
map.Add(100, 100.0);


и этот же механизм работает даже в объявлениях переменных:

mutable map : Dictionary[object, _] = null; //объявили переменную, у которой первый тип object, а второй неизвестно
map = Dictionary();//создали экземпляр, но пока не совсем понятно чего
map.Add(100, 100.0);//вот теперь ясно что тип Dictionary[object, double]


Вывод типов распространяется. Т.е. если бы этот массив возвращался из локальной функции, параметризированной типом TKey, то TKey стал бы int, и всё остальное бы вывелось и для мест откуда функцию вызвали, и в местах которые функция вызывает, а если бы не сошлось — была бы ошибка.
Ну и тот же вывод работает на любую глубину вложенности. Нет проблем вывести(или задать) тип Dictionary[MultiKey[_, long, object], List[_]]

Из-за того что вывод типов реализован в максимально общем виде — писать без типов получается офигенно. Например я здоровенные алгоритмы мог реализовывать, а потом проверял какой перфоманс они показывают на разных видах контейнеров, меняя буквально по одной строке в определённых местах.
Re: Возможности C# 9.0 и NET5
От: VladCore  
Дата: 17.04.21 14:02
Оценка:
Здравствуйте, varenikAA, Вы писали:

AA>Смущают маленькие сроки LTS (всего 3 года).


а сфера какая? если не обработка платежей по картам то на LTS все забивают.
Re[2]: Возможности C# 9.0 и NET5
От: varenikAA  
Дата: 18.04.21 08:02
Оценка:
Здравствуйте, VladCore, Вы писали:

VC>а сфера какая? если не обработка платежей по картам то на LTS все забивают.


не платежи, нет. вообще в целом впечатляет особенно записи.
плохо только с размером. 120МБ приложение. надо правда зипануть попробовать может ужмется в 10 раз.
а вот интересно клик-ванс уже умеет с логином-паролем подключаться по http?
все что раньше было это ftp user@pass
☭ ✊ В мире нет ничего, кроме движущейся материи.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.