Re: C# 7 - названия и прочее
От: Sinix  
Дата: 29.04.15 15:49
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Назвать записи (record-ы) кортежами (tuple-ами), а алгебраические типы record-ами — это по нашему!

А они сами до конца не определились с терминологией. Это не больше, чем предварительные наброски, которые относительно легко поменять.
Оно так и с шестым шарпом было, и с await в пятом. Кучу раз спецификацию и синтаксис меняли.


VD>Люди близкие к телу дизайнеров языка, доведите, плиз, до ведома авторов C#, что они делают ерунду. Во всех языках то что они назвали record называется как угодно, но не record. В ML (где они и родились) — tagged union. В Немерле — это variant-ы. В Скале — это case classes. В F# — discriminated unions.


Название фиговое конечно. Но не в названии проблема, там всё хуже: пока нет согласованного набора фич, которые в record надо впихнуть.
По уму рекорды надо пилить одновременно с primary ctor, PM, тюплами, операторами для PM и синтаксическим сахаром для immutable types. Ну и наконец разобраться с тюплами — они всё-таки нужны, или проще будет рекорды до ума довести. Если отказываться — надо возвращать declaration expressions.

Короче, пока до конца не понятно, во что рекорды в итоге превратятся, а ты уже им название требуешь придумать
И да, довести очень легко — в issues на гитхабе они активно общаются и отвечают.


VD> В F# — discriminated unions.

???
Мы точно про одно и то же говорим? record в шарпе — это просто сахар для immutable-типа, боль-менее актуальная спецификация тут. Или я отстал от жизни и они опять всё поменяли?


VD>2. Хочется заметить, что ключевое слово record (да и любое другое) в C#-ных аналогах вариантов вообще не нужно. Стинаксически они отлично отличимы по круглым скобками "первичного конструктора".


Не, record — это primary ctor + immutable + is_operator + equality operators. Всё вышеперечисленное можно и по отдельности использовать, так что отдельное ключевое слово нужно. Месяц назад обсуждалось, если надо — могу ссылку найти.


VD>3. Кортежи C# (которые, как мы выяснили, являются по сути записями) дублируют функциональность анонимных типов. Будет довольно криво иметь в язык две похожих вещи.

+ 100500 Только не две, а три. Рекорды в ту же степь на сегодня.


VD>2. Допилить рантайм донтета так чтобы он поддерживал структурные типы, т.е. ввести типы считающиеся эквивалентными при совпадении всех их полей.

Там куда больше надо сделать. Причём как я понял из очень обтекаемых комментариев, на CLR team надежды на этот и следующий релизы нет от слова совсем. То ли ресурсов у них нет, то ли совместимость превыше всего. Буду рад, если ошибаюсь, но пока так.

Кстати, что-то похожее есть уже, но только в K runtime и только для интерфейсов. Причём их по слухам (совсем слухам, без подтверждений) выпиливают.


VD>4. Имеет смысл реализовать в языке и обычные котежи (с неименованными полями). Это должен быть обычный сахар над имеющимися типами System.Tuple<...>. Этот пункт не обязательный, но разумный и желательный. Все полноценные ФЯ поддерживают котежи.


А они точно нужны, при наличии нормальных рекордов и сахара для разбора рекорда на отдельные переменные? Выставлять кортежи в public api... не нравится мне эта идея.


VD>5. Предлагаю добавить дженерики с переменным числом параметров, по анологии с C++ поледних версий.

А вот это принципе интересная мысль, но я пока не могу придумать ни одного разумного сценария использования. Можешь привести пример?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.