Здравствуйте, AlexRK, Вы писали:
ARK>Это понятно, но не в рамках одного языка же. Шизофрения какая-то, в тексте "record", в коде "data class".
ARK>Да и, откровенно говоря, само словосочетание "data class" мне кажется убогим. Какая разница, класс это на самом деле или нет. Делегаты тоже классы, почему бы не назвать их "callable class"?
Причем новое лючевое слово все равно вводят. Можно было бы тупо писать "record" вместо "data class" или хотя бы "data".
Тут явно вкусовщина. Причем еще и дурацкая.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, hi_octane, Вы писали:
_>Сделать одну фундаментальную фичу макросы — и вот эти "нововведения" запилит студент в корридоре кампуса на стажировке.
Если их правильно сделать, то все последующие фичи можно запелить силами студентов. Но вот поднять их без аналога Нитры не реально. А на Нитру они еще 20 лет убьют, сч их подходами.
Им надо меня с Хардкейсом на работу взять и дать нам человек 5 в подчинение. Будут тогда супер-макросы через год-два.
_> Собственно от "топовых" новинок именно такое ощущение. Если бы это выкатили пакетом в NuGet — не факт что я бы его подключил.
Не. У них там все лобзиком выпилено и гвоздями прибито. Не могут они синтаксис извне менять.
_>Ну и конечно фичи есть куда развивать. Явно нехватает двух вещей: value-type records это раз.
Может и есть. Не вижу почему бы не сделать data применимым к struct. Может потому data и выбрали, что он применяется не только к class.
_>И скобочек на клавиатуре для них это два.
_>И только Covariant returns штука хорошая, даст возможность выкинуть куски повторяющегося и тупого кода.
Не. Все нововведения полезны. Я в Немерле в 90% случаях имьютабельные рекорды использую. Вопрос лишь синтаксиса. with в Немерле тоже не хватает. Согласен, что можно сделать макрами.
Но до макросов они морально не доросли пока.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, Mr.Delphist, Вы писали:
MD>Налицо явный многолетний тренд на возрождение Паскаля. Дочитал до "with" и аж вздрогнул. А так — чувствуется лютое влияние Kotlin и Swift (читай — стараются не отставать от Google и Apple).
Какой еще Паскаль? Открой для себя ML!
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, Ночной Смотрящий, Вы писали:
НС>data struct вроде уже есть. Но доживут ли они до релиза — ХЗ, там есть некоторое количество логических проблем.
Это что за логические проблемы такие? И почему они не мешают F# и Nemerle?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, vmpire, Вы писали:
S>>Welcome to C# 9.0 V>positional deconstruction — это какая-то шляпа. Ошибки пойдут косяками.
Во всех функциональных языках почему-то не идут. Хотя их уже десятки лет используют.
Их record — это реализация в Шарпе концепции алгебраических типов. В них тип определяется структурой. Ни к каким проблемам это не приводит. Наоборот, делает код проще.
V>Неявные преобразования типов для with — тоже не очень.
Нет там никаких преобразований. Ты на входе и на выходе имеешь один и тот же тип. Просто оперировать ты можешь базовым классом, а в рантайме получишь тот тип, что был.
V>А супер-эконопия на "static void Main()"вообще повысит производительность на порядки.
Это полезно если стоит задача "поиграться". И для тестов. Куча болерплэйта уходит.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, Ночной Смотрящий, Вы писали:
НС>Релиза еще не было, даже публичного превью не было, официальная терминология тоже не декларировалась, странно придираться к терминам в посту Мэдса.
Странный выбор ключевого слова. А вот к Мэдсу претензий нет. Думаю их еще завалят подобными упреками и они вернутся к record.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, rameel, Вы писали:
R>Согласен, covariant returns единственное, что радует. В меньшей степени можно и init свойства сюда отнести. А вот вместо всего остального лучше сделали бы варианты как в немерле
Дык в Немерле кроме вариантов еще мара Record есть, которая к обычным классам и струтурам все перечисленные (кроме with) фичи прикручивает. Очень полезная вещь!
Как я понял они хотят одним выстрелом убить двух зайцев. data будет делать варинты, и рекорды одним синтаксисом. Если есть наследование и sealed, будут варианты. Если нет или структура — рекорды. По сути они только наследованием и отличаются.
R>и запилили квазицитаты,
О, да! Это было бы мега-круто и на Немерле можно было бы поставить крест (так как он свою задачу выполнил бы, а Шарп стал бы его реализацией).
Причем их можно было бы использовать как для Expression Tree, так и для кодогенерации в компайлтайме. Даже если для ET сделали бы было уже очень удобно. Пришлось тут с ET ручками поработать — это жесть как неудобно.
R>а то до генераторов дошли,
Это где? Что-то я пропустил.
R>а до квазицитат не додумались, хотя казалось бы, есть успешный пример применения перед глазами — Expression, ну и еще до кучи typedef как том же немерле или С++.
Еще есть F# где зачатки цитирования тоже есть. В общем, нет в МС решительности. Задрали еже, если честно. Я так на пенсию выйду, а Шарп в Немерл не превратится.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Блин, сначала дал ссылку на русскую Википедию, но там в корне не верное описание алгебраических типов! Какие-то неучи поставили знак раверства между алгебраическим типом и SUM-типом.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, VladD2, Вы писали:
S>>>Welcome to C# 9.0 V>>positional deconstruction — это какая-то шляпа. Ошибки пойдут косяками. VD>Во всех функциональных языках почему-то не идут. Хотя их уже десятки лет используют.
Про функциональные языки не скажу, но что будет если поменять порядок объявлений в классе? Всё же поедет. А если типы данных поменянных членов совпадут, то ошибка ещё и не сразу вылезет.
VD>Их record — это реализация в Шарпе концепции алгебраических типов. В них тип определяется структурой. Ни к каким проблемам это не приводит. Наоборот, делает код проще. V>>Неявные преобразования типов для with — тоже не очень. VD>Нет там никаких преобразований. Ты на входе и на выходе имеешь один и тот же тип. Просто оперировать ты можешь базовым классом, а в рантайме получишь тот тип, что был.
Вот это и напрягает, когда вместо базового класса появляется производный. Нет, если LSP в порядке, то проблем не будет. Но вот если не в порядке...
Хотя тут, скорее всего, дело привычки. Нужно просто запомнить, как это работает.
V>>А супер-эконопия на "static void Main()"вообще повысит производительность на порядки. VD>Это полезно если стоит задача "поиграться". И для тестов. Куча болерплэйта уходит.
Эта "куча" — 2 строки кода.
Единественно когда это может быть полезно, так это если делать интерпретатор, как в скриптовых языках.
V>Про функциональные языки не скажу, но что будет если поменять порядок объявлений в классе? Всё же поедет. А если типы данных поменянных членов совпадут, то ошибка ещё и не сразу вылезет.
Ну то же самое, что в конструкторе параметры поменять.
и солнце б утром не вставало, когда бы не было меня