Re[2]: Summer of Code ...
От: Ночной Смотрящий Россия  
Дата: 21.05.20 11:34
Оценка: 15 (2)
Здравствуйте, hi_octane, Вы писали:

_>Ну и конечно фичи есть куда развивать. Явно нехватает двух вещей: value-type records это раз.


data struct вроде уже есть. Но доживут ли они до релиза — ХЗ, там есть некоторое количество логических проблем.
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[2]: Welcome to C# 9.0
От: Ночной Смотрящий Россия  
Дата: 21.05.20 11:34
Оценка:
Здравствуйте, AlexRK, Вы писали:

ARK>Почему "data class", а не просто "record"?


Потому что, скорее всего, будут еще data struct
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[6]: Welcome to C# 9.0
От: hi_octane Беларусь  
Дата: 21.05.20 11:37
Оценка: :))) :))
ARK>Что за тупые ублюдки там язык дизайнят?
Редчайший случай, коллега! Точно знаю что кто-то из нас двоих оказался слабее в пост-иронии. Но не могу обосновать кто!
Re[3]: Welcome to C# 9.0
От: AlexRK  
Дата: 21.05.20 11:51
Оценка: +1
Здравствуйте, Ночной Смотрящий, Вы писали:

ARK>>Почему "data class", а не просто "record"?


НС>Потому что, скорее всего, будут еще data struct


Тогда странно, что вовсю используется термин record. Это только усиливает путаницу.
Re[4]: Welcome to C# 9.0
От: Mr.Delphist  
Дата: 21.05.20 15:21
Оценка: 1 (1)
Здравствуйте, AlexRK, Вы писали:

ARK>Здравствуйте, Mr.Delphist, Вы писали:


MD>>Налицо явный многолетний тренд на возрождение Паскаля. Дочитал до "with" и аж вздрогнул. А так — чувствуется лютое влияние Kotlin и Swift (читай — стараются не отставать от Google и Apple).


ARK>Лично я не считаю, что паскаль — это плохо (даже считаю наоборот, но это неважно). Плохи бессистемность и эклектичность. Раз уже есть && и || — так делайте дальше в том же стиле, а не пихайте and/or. Та же байда с == и equals и многим другим. Получается уродливое месиво — тут си, тут паскаль, тут рыбу заворачивали. Логика, последовательность? Какое там. "Запомнытэ это, дэти, потому что понять это — нэвозможно!" (с)


Что Вы, Паскаль — ни в коем случае не плохо (гляньте мой ник). Вот именно про эклектичность и был оригинальный посыл. Из C-образного семейства язык начинает миграцию к совсем иной парадигме, но обратную совместимость не отменяют, и получаем что получаем. Собственно, выше всё и описано.
Re: Welcome to C# 9.0
От: vmpire Россия  
Дата: 21.05.20 16:30
Оценка:
Здравствуйте, Serginio1, Вы писали:

S>Welcome to C# 9.0

positional deconstruction — это какая-то шляпа. Ошибки пойдут косяками.
Неявные преобразования типов для with — тоже не очень.
А супер-эконопия на "static void Main()"вообще повысит производительность на порядки.

Остальное — вроде, ничего, может пригодится.
Re[2]: Welcome to C# 9.0
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 21.05.20 17:05
Оценка:
Здравствуйте, 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
и солнце б утром не вставало, когда бы не было меня
Re[4]: Welcome to C# 9.0
От: Ночной Смотрящий Россия  
Дата: 21.05.20 21:33
Оценка: +1
Здравствуйте, AlexRK, Вы писали:

НС>>Потому что, скорее всего, будут еще data struct

ARK>Тогда странно, что вовсю используется термин record. Это только усиливает путаницу.

Релиза еще не было, даже публичного превью не было, официальная терминология тоже не декларировалась, странно придираться к терминам в посту Мэдса.
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[3]: Welcome to C# 9.0
От: rameel https://github.com/rsdn/CodeJam
Дата: 21.05.20 22:08
Оценка:
Здравствуйте, Ночной Смотрящий, Вы писали:

ARK>>Почему "data class", а не просто "record"?


НС>Потому что, скорее всего, будут еще data struct


Да, в примерах есть
https://sharplab.io/#v2:EYLgZgpghgLgrgJwgZwLRIMYHsEBNkA+AAgEwCMAsAFDVEDMABLrFA6QwMIAUAlgHYwGANygAbOBACUAblqNmMVshgI4GQQGVeA4WIkygA==
... << RSDN@Home 1.0.0 alpha 5 rev. 0>>
Re[2]: Welcome to C# 9.0
От: IT Россия linq2db.com
Дата: 22.05.20 03:29
Оценка: +1
Здравствуйте, nikov, Вы писали:

N>Синтаксис впечатляющий:


N>
N>    < 3000 => 10.00m - 2.00m,
    >>= 3000 and <= 5000 => 10.00m,
    >> 5000 => 10.00m + 5.00m,
N>


Боюсь, что из-за такого синтаксиса они уже никогда не сделают как в Немерле что-то типа:

| (s, _) => 
| (_, s) =>
| _ with s = 1 => s.ToString()
Если нам не помогут, то мы тоже никого не пощадим.
Re[2]: Summer of Code ...
От: rameel https://github.com/rsdn/CodeJam
Дата: 22.05.20 05:52
Оценка: +2
Здравствуйте, hi_octane, Вы писали:

_>И только Covariant returns штука хорошая, даст возможность выкинуть куски повторяющегося и тупого кода.


Согласен, covariant returns единственное, что радует. В меньшей степени можно и init свойства сюда отнести. А вот вместо всего остального лучше сделали бы варианты как в немерле и запилили квазицитаты, а то до генераторов дошли, а до квазицитат не додумались, хотя казалось бы, есть успешный пример применения перед глазами — Expression, ну и еще до кучи typedef как том же немерле или С++.

После этого и top-level declaration можно было бы представлять как вишенку на торте.
... << RSDN@Home 1.0.0 alpha 5 rev. 0>>
Re[3]: Welcome to C# 9.0
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 22.05.20 07:19
Оценка:
Здравствуйте, IT, Вы писали:

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


N>>Синтаксис впечатляющий:


N>>
N>>    < 3000 => 10.00m - 2.00m,
    >>>= 3000 and <= 5000 => 10.00m,
    >>> 5000 => 10.00m + 5.00m,
N>>


IT>Боюсь, что из-за такого синтаксиса они уже никогда не сделают как в Немерле что-то типа:


IT>
IT>| (s, _) => 
IT>| (_, s) =>
IT>| _ with s = 1 => s.ToString()
IT>


https://developers.redhat.com/blog/2020/02/27/c-8-pattern-matching/

static Sector GetSector(Point point)  => point switch
{
    (0, 0) => Sector.Origin,
    (2, _) => Sector.One,
    var (x, y) when x > 0 && y > 0 => Sector.Two,
    (1, var y) when y < 0 => Sector.Three,
    _ => Sector.Unknown
};
и солнце б утром не вставало, когда бы не было меня
Отредактировано 22.05.2020 7:19 Serginio1 . Предыдущая версия .
Re[4]: Welcome to C# 9.0
От: hi_octane Беларусь  
Дата: 22.05.20 08:20
Оценка: 4 (1) +5
Ты обрати внимание — в примере на Nemerle на все 3 шаблона создаётся одна переменная 's' с разными значениями. В современном C# это вообще никак.

Второе — там 3 варианта выбора заканчиваются одним действием. В современном C# этого тоже нет.

И дело не в том что без этих фич жить нельзя. Выжить можно на одних if и goto. Просто если изначально компилятор делать по уму, концептуально, потом самые навороченные фичи появляются без проблем.
Re[3]: Summer of Code ...
От: hi_octane Беларусь  
Дата: 22.05.20 08:27
Оценка: +1
R>Согласен, covariant returns единственное, что радует. В меньшей степени можно и init свойства сюда отнести. А вот вместо всего остального лучше сделали бы варианты как в немерле и запилили квазицитаты, а то до генераторов дошли, а до квазицитат не додумались, хотя казалось бы, есть успешный пример применения перед глазами — Expression, ну и еще до кучи typedef как том же немерле или С++.
Ага.
Ну и не expression единым, вторая версия квази-цитат, возможно даже более подходящая — dynamic. Типы не определены, корректность кода язык проверяет, всё в compile-time. Equals для небольших кусочков любой студент наляпать может — вот и сопоставление одного куска кода с другим. Подставить типы тоже элементарно, более того jit это уже делает.
Re[4]: Summer of Code ...
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 22.05.20 08:35
Оценка:
Здравствуйте, 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>


https://developers.redhat.com/blog/2020/02/27/c-8-pattern-matching/

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,
},
и солнце б утром не вставало, когда бы не было меня
Re[4]: Welcome to C# 9.0
От: IT Россия linq2db.com
Дата: 22.05.20 13:34
Оценка: 4 (1) +2
Здравствуйте, Serginio1, Вы писали:

S>https://developers.redhat.com/blog/2020/02/27/c-8-pattern-matching/


Ты не понял. Я не про tuple patterns, а про multiple patterns and one execution branch.

| (s, _) => 
| (_, s) =>
| _ with s = 1 => s.ToString()


Здесь нет многоточий. 's' везде одна и та же переменная. Для любого паттерна выполняется s.ToString().
Если нам не помогут, то мы тоже никого не пощадим.
Re: Welcome to C# 9.0
От: Kolesiki  
Дата: 23.05.20 12:54
Оценка: +2 -3 :))) :)
    < 3000 => 10.00m - 2.00m,


Если "четыре пробела" меньше 3000, пойти вычитать из 10 миллионов 2 миллиона.
Просто гениально!

*шёпотом* "Сестра, готовьте эвтаназию!"
Re[2]: Welcome to C# 9.0
От: Vladek Россия Github
Дата: 25.05.20 09:03
Оценка:
Здравствуйте, AlexRK, Вы писали:

ARK>Почему "data class", а не просто "record"?


Это просто легализация DTO. Люди прямо сейчас плодят классы в которых нет ничего, кроме свойств. Проблема в том, что классы позволяют делать с собой намного больше, чем нужно для DTO, что может привести к порче данных и багам.

Никакой record не нужен, у тебя уже есть struct.

Короче, я вижу это как костыли для убогих, умеющих писать код только в процедурном стиле.
Re[2]: Welcome to C# 9.0
От: VladD2 Российская Империя www.nemerle.org
Дата: 25.05.20 10:23
Оценка:
Здравствуйте, AlexRK, Вы писали:

ARK>Вроде и есть полезные штуки, но как-то все убого. Как кусок дерьма, присыпанный сахаром.


В целом согласен. Правильные фичи, но со спорным синтаксисом.

ARK>Магия и сахар для top-level инструкций.


Ну, выбрасывание case/break это очень даже правильно. То что | как в других ML-наследниках есть не ввели — плохо (как по мне). Но в целом, нечитаемо оно тебе только от непричычки. На самом деле case/break куда как хуже.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[5]: Welcome to C# 9.0
От: VladD2 Российская Империя www.nemerle.org
Дата: 25.05.20 11:27
Оценка: +1
Здравствуйте, Mystic Artifact, Вы писали:

MA> Единой терминологии на этот счет нет нигде. В мире около ФП и хипсиеров record используется именно так. В классике жанра — record это просто составной тип. Поэтому, честно говоря наскоро пролистал всю статью, понял о чем они и закрыл. В принципе не плохо, на мой взгляд.


Нет, все несколько сложнее. Рекорд — это разновидность алгебраического типа. Они в спеке шарпа это позиционностью называют. А вот вэлью он или референсный — без разницы.

Ну, и надо понимать, что майкрософтовские рекорды по сути не рекорды, а юнионы, так как поддерживают наследование.

MA>PS: Улучшенный паттернматчинг местами переулучшен.


Есть момент. Но точно лучше чем case/break.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.