ARK>Что за тупые ублюдки там язык дизайнят?
Редчайший случай, коллега! Точно знаю что кто-то из нас двоих оказался слабее в пост-иронии. Но не могу обосновать кто!
Здравствуйте, AlexRK, Вы писали:
ARK>Здравствуйте, Mr.Delphist, Вы писали:
MD>>Налицо явный многолетний тренд на возрождение Паскаля. Дочитал до "with" и аж вздрогнул. А так — чувствуется лютое влияние Kotlin и Swift (читай — стараются не отставать от Google и Apple).
ARK>Лично я не считаю, что паскаль — это плохо (даже считаю наоборот, но это неважно). Плохи бессистемность и эклектичность. Раз уже есть && и || — так делайте дальше в том же стиле, а не пихайте and/or. Та же байда с == и equals и многим другим. Получается уродливое месиво — тут си, тут паскаль, тут рыбу заворачивали. Логика, последовательность? Какое там. "Запомнытэ это, дэти, потому что понять это — нэвозможно!" (с)
Что Вы, Паскаль — ни в коем случае не плохо (гляньте мой ник). Вот именно про эклектичность и был оригинальный посыл. Из C-образного семейства язык начинает миграцию к совсем иной парадигме, но обратную совместимость не отменяют, и получаем что получаем. Собственно, выше всё и описано.
Здравствуйте, Serginio1, Вы писали:
S>Welcome to C# 9.0
positional deconstruction — это какая-то шляпа. Ошибки пойдут косяками.
Неявные преобразования типов для with — тоже не очень.
А супер-эконопия на "static void Main()"вообще повысит производительность на порядки.
Здравствуйте, vmpire, Вы писали:
V>Здравствуйте, Serginio1, Вы писали:
S>>Welcome to C# 9.0 V>positional deconstruction — это какая-то шляпа. Ошибки пойдут косяками.
На самом деле они уже давно есть https://docs.microsoft.com/ru-ru/dotnet/csharp/deconstruct
V>Неявные преобразования типов для with — тоже не очень.
with это не преобразование а копирование с замещением в with
и солнце б утром не вставало, когда бы не было меня
Здравствуйте, AlexRK, Вы писали:
НС>>Потому что, скорее всего, будут еще data struct ARK>Тогда странно, что вовсю используется термин record. Это только усиливает путаницу.
Релиза еще не было, даже публичного превью не было, официальная терминология тоже не декларировалась, странно придираться к терминам в посту Мэдса.
Здравствуйте, hi_octane, Вы писали:
_>И только Covariant returns штука хорошая, даст возможность выкинуть куски повторяющегося и тупого кода.
Согласен, covariant returns единственное, что радует. В меньшей степени можно и init свойства сюда отнести. А вот вместо всего остального лучше сделали бы варианты как в немерле и запилили квазицитаты, а то до генераторов дошли, а до квазицитат не додумались, хотя казалось бы, есть успешный пример применения перед глазами — Expression, ну и еще до кучи typedef как том же немерле или С++.
После этого и top-level declaration можно было бы представлять как вишенку на торте.
Ты обрати внимание — в примере на Nemerle на все 3 шаблона создаётся одна переменная 's' с разными значениями. В современном C# это вообще никак.
Второе — там 3 варианта выбора заканчиваются одним действием. В современном C# этого тоже нет.
И дело не в том что без этих фич жить нельзя. Выжить можно на одних if и goto. Просто если изначально компилятор делать по уму, концептуально, потом самые навороченные фичи появляются без проблем.
R>Согласен, covariant returns единственное, что радует. В меньшей степени можно и init свойства сюда отнести. А вот вместо всего остального лучше сделали бы варианты как в немерле и запилили квазицитаты, а то до генераторов дошли, а до квазицитат не додумались, хотя казалось бы, есть успешный пример применения перед глазами — Expression, ну и еще до кучи typedef как том же немерле или С++.
Ага.
Ну и не expression единым, вторая версия квази-цитат, возможно даже более подходящая — dynamic. Типы не определены, корректность кода язык проверяет, всё в compile-time. Equals для небольших кусочков любой студент наляпать может — вот и сопоставление одного куска кода с другим. Подставить типы тоже элементарно, более того jit это уже делает.
Здравствуйте, hi_octane, Вы писали:
R>>Согласен, covariant returns единственное, что радует. В меньшей степени можно и init свойства сюда отнести. А вот вместо всего остального лучше сделали бы варианты как в немерле и запилили квазицитаты, а то до генераторов дошли, а до квазицитат не додумались, хотя казалось бы, есть успешный пример применения перед глазами — Expression, ну и еще до кучи typedef как том же немерле или С++. _>Ага. _>Ну и не expression единым, вторая версия квази-цитат, возможно даже более подходящая — dynamic. Типы не определены, корректность кода язык проверяет, всё в compile-time. Equals для небольших кусочков любой студент наляпать может — вот и сопоставление одного куска кода с другим. Подставить типы тоже элементарно, более того jit это уже делает.
> IT>| (s, _) => IT>| (_, s) => IT>| _ with s = 1 => s.ToString() IT>
static Sector GetSector(Point point) => point switch
{
var (x, y) when x > 0 && y > 0 => Sector.Two,
(1, var y) when y < 0 => Sector.Three,
_ => Sector.Unknown
};
ну разница только в var
плюс добавили
DeliveryTruck t when t.GrossWeightClass switch
{
< 3000 => 10.00m - 2.00m,
>= 3000 and <= 5000 => 10.00m,
> 5000 => 10.00m + 5.00m,
},
и солнце б утром не вставало, когда бы не было меня
Здравствуйте, AlexRK, Вы писали:
ARK>Почему "data class", а не просто "record"?
Это просто легализация DTO. Люди прямо сейчас плодят классы в которых нет ничего, кроме свойств. Проблема в том, что классы позволяют делать с собой намного больше, чем нужно для DTO, что может привести к порче данных и багам.
Никакой record не нужен, у тебя уже есть struct.
Короче, я вижу это как костыли для убогих, умеющих писать код только в процедурном стиле.
Здравствуйте, AlexRK, Вы писали:
ARK>Вроде и есть полезные штуки, но как-то все убого. Как кусок дерьма, присыпанный сахаром.
В целом согласен. Правильные фичи, но со спорным синтаксисом.
ARK>Магия и сахар для top-level инструкций.
Ну, выбрасывание case/break это очень даже правильно. То что | как в других ML-наследниках есть не ввели — плохо (как по мне). Но в целом, нечитаемо оно тебе только от непричычки. На самом деле case/break куда как хуже.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, Mystic Artifact, Вы писали:
MA> Единой терминологии на этот счет нет нигде. В мире около ФП и хипсиеров record используется именно так. В классике жанра — record это просто составной тип. Поэтому, честно говоря наскоро пролистал всю статью, понял о чем они и закрыл. В принципе не плохо, на мой взгляд.
Нет, все несколько сложнее. Рекорд — это разновидность алгебраического типа. Они в спеке шарпа это позиционностью называют. А вот вэлью он или референсный — без разницы.
Ну, и надо понимать, что майкрософтовские рекорды по сути не рекорды, а юнионы, так как поддерживают наследование.
MA>PS: Улучшенный паттернматчинг местами переулучшен.
Есть момент. Но точно лучше чем case/break.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.