Re[5]: C# 6.0
От: VladD2 Российская Империя www.nemerle.org
Дата: 19.12.13 12:42
Оценка: +1
Здравствуйте, nikov, Вы писали:

N>...


Вы бы хоть какой-нить простенький type-switch замутили. Ну, жудко же не удобно писать в стиле:
var x = y as X;
if (x != null)
...


Про ПМ я уже молчу.

Без декомпозиции кортежей использовать их в шарпе просто противно. Казалось бы сделай:
var (a, b, c) = new Tuple(42, "a", 2.3);

И будет людям счастье. Не уж то в Розлине такое долго залудить?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[4]: C# 6.0
От: VladD2 Российская Империя www.nemerle.org
Дата: 19.12.13 12:44
Оценка:
Здравствуйте, Jack128, Вы писали:

J>Правильно. По мне так дальше нужно идти, не только облегчить работу с out-параметрами, но еще и максимально усложнить работу с туплами. Чтоб даже мысли не возникало их использовать.


Они именно так и поступают.

На банальную декомпозицию кортежей у них еще 10 лет уйдет (прошлые ушли на оператор ?. и прочие приятные рюшечки). Хорошо что хоть что-то тырят из правильных идей правильных языков.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: C# 6.0
От: VladD2 Российская Империя www.nemerle.org
Дата: 19.12.13 12:46
Оценка:
Здравствуйте, Константин, Вы писали:

К>Проще, но хуже. У out-аргументов кроме типов есть ещё имена. У членов кортежа только типы.


На то есть записи. Это как анонимные типы, но которые можно из методов возвращать.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: C# 6.0
От: VladD2 Российская Империя www.nemerle.org
Дата: 19.12.13 12:59
Оценка:
Здравствуйте, Аноним, Вы писали:

А>>//primary constructors —

А>>public class Point(int x, int y) { }

А>Кто-нибудь может объяснить, что это? А то все читают с таким видом, будто это есть во всех языках и только c# наконец до этого докатился!


Это аналогично немерловой макре Record, но несколько более гибко, так как можно реализовать логику в кострукторе.
Фича взята из ML-семейсва. Есть в Scala, F#...

Параметры такого конструктора автоматически превращаются в поля класса. Такой конструктор может быть только один.
Если реализуют все грамотно, то тело класса при этом станет единым "скриптом" инициализации (заменой тела конструктора).

А>>using System.Math;

А>Это как в Немерле — импорт класса и вызов в коде статических методов без указания класса?

Да.

А>>//monadic null checking —

А>>if (points?.FirstOrDefault()?.X ?? -1) { }

А>Больше говнокода! Даёшь жабоскрипт!

А>Мрак, если откровенно.

Не скажи. Мы это в Nemerle из Groovy уже дано передрали. Очень удобно когда нужно делать много проверок на null.
Код сокращается в разы. Так что говнокод скорее без этого оператора.

Его суть очень проста. Это точка с проверкой на нул. Если выражение перед ?. вычислится в null, то выражение идущее за ?. не будет вычисляться, а будет возвращен null.
Это повзоволяет создать аналог множественного доступа к членам, но если одни из членов будет null, вместо вылета по исключению будет возвращен null, который нужно будет проверить ровно один раз.

А>А что там народ заикался про множественный return? Разве это возможно? (без хаков) Мой эксперимент на MSIL показал, что возврат из функции с более чем одним элементом на стеке сразу разрывает на куски. Т.е. "напрямую" не получится, значит опять индусские дуроломы прикрутят на изоленте hidden class, который будет прятать в себе массив возвращаемых значений.


Для этого придуманы кортежи и записи. Но до них МС будет доходить следущие 10 лет.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[5]: C# 6.0
От: VladD2 Российская Империя www.nemerle.org
Дата: 19.12.13 13:01
Оценка:
Здравствуйте, nikov, Вы писали:

N>Пока что это список идей для гипотетических будущих версий C#. Некоторые из этих идей прототипировались, однако не нужно воспринимать пару слайдов на конференции как официальное объявление новых фич или как обязательство реализовать их в ближайшей следующей версии. Скорее, это приглашение к неформальной дискуссии, чтобы лучше понять, в чём нуждаются разработчики.


Что тут дискуритровать? Все эти "идеи" сто лет как реализованы в куче языков и используются на практике. Все они зарекомендовали себя очень хорошо.

Я вот только не понял, что за фигня этот ваш "=>" синтаксис при объявлении членов. Это чтобы блок с return-ом не писать?
Если да, то решение спорное. Люди для этого сто лет как используют "=".
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[4]: C# 6.0
От: Ziaw Россия  
Дата: 19.12.13 13:06
Оценка:
Здравствуйте, AndrewVK, Вы писали:

Z>>Это первый шаг в сторону "все есть выражение". Похоже, что вводить такое сразу по многим причинам (в том числе неприятие разработчиков) тяжело. Это легкий вариант.


AVK>Дело не в неприятии разработчиков, дело в том что C# не Немерле, и туда никто ничего не добавляет просто потому что кому то захотелось (если, конечно, захотелось не Андерсу ).


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

AVK>Конкретно declaration expressions придумали, потому что не получается качественно добавить кортежи.


Они как-то связаны или просто остались свободные ресурсы?

AVK>Ну а фокусы типоа того, что я показал — просто побочные эффекты. Из той же оперы, кстати (оператор as is ):

AVK>
AVK>if ((var y = x as SomeClass) != null)
AVK>    Foo(y);
AVK>else
AVK>  Bar();
AVK>


Это 6.0 или дальнейшие планы?

AVK>Но таки да, дальняя цель — как можно больше конструкций сделать выражениями. Некоторые, к примеру, жаловались что нет statement формы для оператора ?:, теперь вот она есть. Еще обсуждал с Мэдсом expression форму switch (он, сктати, сказал, что и сишную бредятину с break надо выкидывать, и что как в VB позволить условия сложные писать в кейсах) — вроде бы есть какие то эксперименты (просьба воспринимать это как мои домыслы, потому что NDA) с все тем же оператором ?:, у которого может быть несколько вариантов как в switch.


switch конечно самое вкусное, но сразу же захочется try/catch и using. Ну и иммутабельные переменные на закуску, ведь в нормальном коде большинство их станет именно такими.
Re[4]: C# 6.0
От: VladD2 Российская Империя www.nemerle.org
Дата: 19.12.13 13:08
Оценка: +1
Здравствуйте, _NN_, Вы писали:

_NN>Может просто добавить вывод типов из использования для out.

_NN>Скажем, Nemerle:
_NN>
_NN>mutable x, y;
_NN>def z = Foo(out x, out y);
_NN>


Вывод типов полезен сам по себе. Но для out-параметров, действительно удобно было бы объявлять переменные прямо в параметрах. Тогда можно было бы писать как-то так:
var x = !map.TryGetValue(42, out var value) ? value : -1;
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[5]: C# 6.0
От: VladD2 Российская Империя www.nemerle.org
Дата: 19.12.13 13:10
Оценка:
Здравствуйте, AndrewVK, Вы писали:

_NN>>Может просто добавить вывод типов из использования для out.

_NN>>Скажем, Nemerle:
_NN>>
_NN>>mutable x, y;
_NN>>def z = Foo(out x, out y);
_NN>>


AVK>Зачем? Смысл этой конструкции как раз в том чтобы предварительно ничего не декларировать.


Не всегда переменная нужна для out-параметров. Часто она просто по разному инициализируется в разных подветках if-ов и т.п. В шарпе очень задалбывает, что в основном можно писать var, но иногда нужно по приседать (описать тип явно).
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[7]: C# 6.0
От: VladD2 Российская Империя www.nemerle.org
Дата: 19.12.13 13:15
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Вывода типов по имспользованию в C# все равно не будет.


Да, бдудет. Лет эдак через 15-20.

Я закладку на это твое сообщение поставил. Через 15 лет обсудим (если живы будем).

Вывод типов по использованию — это очень удобно. Единственная проблема — сложность алгоритмов. Но это проблема времени, а не идеологическая. А значит рано или поздно ее устранят.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: C# 6.0
От: VladD2 Российская Империя www.nemerle.org
Дата: 19.12.13 13:17
Оценка:
Здравствуйте, Ziaw, Вы писали:

Z>Это первый шаг в сторону "все есть выражение". Похоже, что вводить такое сразу по многим причинам (в том числе неприятие разработчиков) тяжело. Это легкий вариант.


Скорее это шаг в сторону. Если бы хотели сделать "все есть выражение", то не стали бы городить отдельный синтаксис для инициализации членов, а сделали бы универсальное решение.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[4]: C# 6.0
От: VladD2 Российская Империя www.nemerle.org
Дата: 19.12.13 13:22
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Дело не в неприятии разработчиков, дело в том что C# не Немерле,


+1

И это его главный недостаток.

А главное достоинство C#-а — это ReSharper!
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[7]: C# 6.0
От: VladD2 Российская Империя www.nemerle.org
Дата: 19.12.13 13:24
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>И чем это отличается от "true?1:2" кроме лишней писанины?


Очевидно, тем что применимо к любой конструкции. А ?: — это хардкод.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[8]: C# 6.0
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 19.12.13 13:40
Оценка:
Здравствуйте, VladD2, Вы писали:

AVK>>Вывода типов по имспользованию в C# все равно не будет.

VD>Да, бдудет. Лет эдак через 15-20.

Только это будет уже не C#.
... << RSDN@Home 1.2.0 alpha 5 rev. 100 on Windows 8 6.2.9200.0>>
AVK Blog
Re[6]: C# 6.0
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 19.12.13 13:40
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Не всегда переменная нужна для out-параметров. Часто она просто по разному инициализируется в разных подветках if-ов и т.п. В шарпе очень задалбывает, что в основном можно писать var, но иногда нужно по приседать (описать тип явно).


Это понятно, но тут предлагается это вместо declaration expression.
... << RSDN@Home 1.2.0 alpha 5 rev. 100 on Windows 8 6.2.9200.0>>
AVK Blog
Re[5]: C# 6.0
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 19.12.13 13:40
Оценка:
Здравствуйте, Ziaw, Вы писали:

AVK>>Конкретно declaration expressions придумали, потому что не получается качественно добавить кортежи.

Z>Они как-то связаны или просто остались свободные ресурсы?

Связаны конечно. Туплы, применительно к шарпу, в основном, могут решить две проблемы:
1) Инлайн декларация сложного возвращаемого результата.
2) Хранение составных типов в нелокальных контейнерах.
DE решает только первую проблему, но решает ее лучше туплов, потому что у out параметров есть имена. Ну и собственно DE заменяет операцию распаковки тупла в локальные переменные.

Z>Это 6.0 или дальнейшие планы?


Я так думаю (ну ты понял, да?) что 6.0. Но пока, в отличие от первичных конструкторов и новых литералов, это все писями по воде виляно.

Z>switch конечно самое вкусное, но сразу же захочется try/catch и using.


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

Z> Ну и иммутабельные переменные на закуску, ведь в нормальном коде большинство их станет именно такими.


В локальном контексте не так критично. Я только обратил внимание, что неплохо бы добавить вывод типов для локальных констант. Можно заодно расширить их семантику до ro переменных, все равно наружу оно не смотрит и в сборке не фиксируется никак.
... << RSDN@Home 1.2.0 alpha 5 rev. 100 on Windows 8 6.2.9200.0>>
AVK Blog
Re[3]: C# 6.0
От: Ziaw Россия  
Дата: 19.12.13 13:44
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Это аналогично немерловой макре Record, но несколько более гибко, так как можно реализовать логику в кострукторе.


Ты имеешь в виду другой конструктор?
Re[3]: C# 6.0
От: VladD2 Российская Империя www.nemerle.org
Дата: 19.12.13 13:47
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Это сломает совместимость. Впрочем, кое что на эту тему, возможно, будет:

AVK>
AVK>var a = (var x = Foo(); var y = Bar(x); FooBar(y));
AVK>


А зачем в круглых то скобках, а не в фигурных?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[8]: C# 6.0
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 19.12.13 13:52
Оценка:
Здравствуйте, VladD2, Вы писали:

AVK>>И чем это отличается от "true?1:2" кроме лишней писанины?

VD>Очевидно, тем что применимо к любой конструкции.

Ну так если сделать любую конструкцию выражением, то получится то же самое, вид в профиль.
... << RSDN@Home 1.2.0 alpha 5 rev. 100 on Windows 8 6.2.9200.0>>
AVK Blog
Re[6]: C# 6.0
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 19.12.13 13:52
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>И будет людям счастье. Не уж то в Розлине такое долго залудить?


Говорят, долго. Хорошо хоть прямо не посылают, как раньше. Хотя, казалось бы, при наличии первичного конструктора и определенных ограничениях на внутренности уже никаких discriminated unions добавлять в язык не нужно, связь между параметрами и свойствами и так формально определена. Но, пока, увы.
... << RSDN@Home 1.2.0 alpha 5 rev. 100 on Windows 8 6.2.9200.0>>
AVK Blog
Re[4]: C# 6.0
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 19.12.13 13:52
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Вопрос был не в том, что такое "x", а в том является ли это именем для поля содержащего значение свойства, или "x" — это произвольное инициализирующее значение. Думаю, второе.


Это испорченный телефон. Исходный пример такой:
public class Point(int x, int y)
{
  public int X => x;
  public int Y => y;
  public int Dist { get; } = Math.Sqrt(x * x + y * y);
}
... << RSDN@Home 1.2.0 alpha 5 rev. 100 on Windows 8 6.2.9200.0>>
AVK Blog
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.