Re[9]: [Ann] .Net Core roadmap
От: VladD2 Российская Империя www.nemerle.org
Дата: 28.07.16 20:01
Оценка:
Здравствуйте, gbear, Вы писали:

G>
G>var t = (int a, int b) => new (int x, int y) {x = a, y = b};
G>t(t(1,2)); // splatting;
G>


Пример, конечно, потрясающий. Верхний набор букв к шарпу не откносится. Но идея ясна. Никогда не знал, что передача кортежа в фукнцию так мудрено называется.

Кстати, на практике вещь практически не нужная. Немерл ее поддерживат, но желания применять особо нет.

А вот в типизаторе это проблем создает.


VD>>ПМ — это хорошо, но проблем, вызванных тем что в кортежах отсутствуют имена, он никак не решает.

G>Мы же прекрасно понимаем, что у элементов кортежа нет имен просто в силу их (кортежей) принципиальной структурной типизации. При номинативной типизации — это будут уже не кортежи, а рекорды.

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


VD>>Имена переменных, при декомпозиции кортежей, придется задавать вручную.

G>Кхм... как бы это вообще нормально,

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

G>что "проблема" интерпретации данных, типизированных структурно, она на стороне интерпретатора целиком.


Если проблем есть, то ее лучше решать, а не перекладывать на других. Вот если ее нельзя решить, то другое дело. Но тут то можно!

G>Что тут такого-то? В противном случае, мы меняем кортежи на рекорды.


Меняем. МС и предлагает создать рекорды. Просто по глупости их кортежами назвал.

В СБУД вот вообще нет кортежей. Там именно что записи. И все довольны. И никому не мешает, что в реляционной теории, на которой они основаны, используются кортежи.

Запись она вполне себе применима вместо кортежа.

VD>>Интеллисенс тут ничем не поможет. А вот если имена будут, то IDE сможет сделать имена для переменны в автомате.

G>Для того, чтобы IDE могла "сделать имена для переменных в автомате" — вообще не обязательно эти самые имена тащить в систему типов.

А куда их тащить?

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

G>Вот и ты туда же... как и авторы "предложения" Ну, или либо чего-то не понимаю.

Тут оно как. Может я чего не понимаю. А может ты.

G>"Рекорды"... по крайней мере, то, что под этим понимают канонически:


G>
G>var (int a, int b) A;
G>var (int x, int y) B;
G>


Синтаксис какой-то непонятный. Зачем тут "var"?

G>Тип у A и B — _разный_ — и это важно.


Еще бы понять как ты себе свои гипотетические примеры понимаешь. Если А и B — это именованные типы, а не переменные — то не нужно.

Если речь идет о совпадении имен у полей, то в принципе это полезно.

G>В этом — номинативной типизации — основной смысл "рекордов".


Похоже, ты не правильно понимаешь термин "номинативная типизация". Наминативная типизация — это когда:
class A
{
  publib int X;
}

и
class B
{
  publib int X;
}

это разные типы только лишь на том основании, что у них разные имена.

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

И такое более строгое определение структуры — полезно. Причем полезно не для теоретиков, а для практиков. Банально будет меньше ошибок и можно будет не заниматься декомпозицией, когда нужно одно поле из 10.

G>Если тоже самое предполагается для "именованных кортежей", то надо просто перестать их называть _кортежами_.


Я не знаю, что такое "именованные кортежи".

G>Если же для них тип А и тип В будет совпадать, то — кроме потенциальных проблем, с очевидной локальностью таких типов — непонятно, а "зачем вообще козе такой баян" на уровне _системы типов_? Чего мы получаем-то, спуская это на такой уровень? Разве нельзя добиться ровно того же, не затрагивая систему типов вообще?


Ты явно запутался в понятии структурной типизации. Включать в структуру имена поле ни разу не проблема.

G>"Да_ладно.жпг". Я, правда, дааавненько ничем серьезным на C# не страдал... но, сдается мне, делегаты и до лямбд структурно типизировались. И совсем не понятно, причем тут типизация лямбд, если в топике речь о несколько другом?


Ну, не понял, значит не понял. Я вряд ли могу помочь. Хочешь еще раз повторю, что с появлением лмябд Шарп сделал шаг к ФП. Теперь на нем можно программировать в ФП стиле, но есть проблемы. И раз шаг к ФП сделан, то надо идти дальше упрощая людям жизнь.

G>Возможно я смотрел "не на тех дроидов", но вот, например, это:


G>в моем представлении, имеет не много общего с номинативной типизацией. Из предложения вообще, имхо, местами весьма трудно понять "чего таки хотим"... какую такую "проблему" решаем


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