Re[6]: C# 6.0
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 19.12.13 15:17
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Я вот только не понял, что за фигня этот ваш "=>" синтаксис при объявлении членов. Это чтобы блок с return-ом не писать?

VD>Если да, то решение спорное. Люди для этого сто лет как используют "=".

Да, C# это не Немерле и никогда, слава богу, им не будет.

В С# с первой версии = для присваивания. => уже используется для лямбд, что бы блок с ретурном не писать. Так что всё очевидно
Re[6]: C# 6.0
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 19.12.13 15:39
Оценка:
Здравствуйте, adontz, Вы писали:

A>Ты предалагешь SQL генерировать с помошью Razor?


Да.

A>Все эти @Parameters? Не, спасибо.


На Т4 мусора все равно будет больше. Ну и вместо @ там вроде ? можно.
... << 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 15:39
Оценка:
Здравствуйте, VladD2, Вы писали:

AVK>>Надо уже с боями вместо Т4 пропихивать Razor

VD>Сдается мне, что как мета-тул он будет мало интересен.

Почему?

VD> Разве что как довесок к тому же Т4.


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

AVK>>Это проблема далеко не только ПМ. Те же визиторы или мультиметоды от нее страдают в полный рост.


VD>У шаблона Посетитель такой проблемы нет. Там интерфейс определяет список альтернатив.


Определять то определяет, но никак не запрещает подсунуть любого наследника. Точно такую же схему можно и в ПМ реализовать.

AVK>>Тут, скорее, надо просто ввести ключевое слово типа static, которое одновременно и sealed добавит и запретит создание свойств, которые ПМ обработать не сможет.


VD>Про статик не понял.


Ну есть такое ключевое слово static, которое навешивает sealed и запрещает нестатические члены.
... << RSDN@Home 1.2.0 alpha 5 rev. 100 on Windows 8 6.2.9200.0>>
AVK Blog
Re[8]: C# 6.0
От: Евгений Акиньшин grapholite.com
Дата: 19.12.13 15:48
Оценка:
Здравствуйте, VladD2, Вы писали:

ЕА>>
ЕА>>public var F()
ЕА>>{
ЕА>>  return new { Name = "A", Age = 10 };
ЕА>>}
ЕА>>


VD>Это не разумное предложение. Оно быстро сломает интелисенс в больших проектах. В методе может быть 100500 выражений, и методов может быть 100500. Для вывода типов придется протипизировать все их тела. А это самая долгая операция. Решарпер даже не парсит тела методов до того как пользователь к ним не обратится. А ты предлагаешь их все типизировать.


VD>Правильное решение для языка с хорошей поддержкой IDE будет возможность декларировать анонимные типы (превращение их в записи):

VD>
VD>public <string Name, int Age> F()
VD>{
VD>  return new { Name = "A", Age = 10 };
VD>}
VD>


Согласен, так меня тоже вполне устроит.
Не шалю, никого не трогаю, починяю примус Diagrams Designer for iPad and Windows 10
Re[4]: C# 6.0
От: Ziaw Россия  
Дата: 20.12.13 01:44
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Скорее это шаг в сторону. Если бы хотели сделать "все есть выражение", то не стали бы городить отдельный синтаксис для инициализации членов, а сделали бы универсальное решение.


Там не только инициализация, но и тело метода может быть.
Re[7]: C# 6.0
От: Jack128  
Дата: 20.12.13 10:13
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Хреново он ее решает. Неудобно. Лучше бы довели до ума анонимные типы. Сделали бы синтаксисх их декларации по месту, как у записей в ML-е. Например:

VD>
VD><int a; string b;> Foo()
VD>{
VD>  return new { a=42, b="text" };
VD>}
VD>


А такие типы между сборок должны шарится?
Re[8]: C# 6.0
От: VladD2 Российская Империя www.nemerle.org
Дата: 20.12.13 12:41
Оценка:
Здравствуйте, Jack128, Вы писали:

J>А такие типы между сборок должны шарится?


Не то чтобы "шариться". Их в рантайме нужно поддерживать. Для них должна быть реализована структурная эквивалентность. Тип объявленный в одной сборке должен быть совместим с таким же типом из другой сборки. Еще имеет смысл явное приведение сделать с кортежами и типами эквивалентными структурно, но имеющими другие названия полей.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[9]: C# 6.0
От: Jack128  
Дата: 20.12.13 12:48
Оценка:
Здравствуйте, VladD2, Вы писали:

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


J>>А такие типы между сборок должны шарится?


VD>Не то чтобы "шариться". Их в рантайме нужно поддерживать. Для них должна быть реализована структурная эквивалентность. Тип объявленный в одной сборке должен быть совместим с таким же типом из другой сборки. Еще имеет смысл явное приведение сделать с кортежами и типами эквивалентными структурно, но имеющими другие названия полей.


Хе. Структурная эквивалентность в .NET ?? Что то не верится -)
Re[5]: C# 6.0
От: VladD2 Российская Империя www.nemerle.org
Дата: 20.12.13 12:57
Оценка:
Здравствуйте, Ziaw, Вы писали:

Z>Там не только инициализация, но и тело метода может быть.


Ну, вот и нужно было для тела выбрать "=", а инициализацию как-то по другому сделать.

Собственно мы так и сделали. NN по началу тоже хотел вариант
X : int { get; } = 42;

выбрать. Но мы подумали и решили, что это чревато проблемами.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[11]: C# 6.0
От: VladD2 Российская Империя www.nemerle.org
Дата: 20.12.13 13:00
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Определять то определяет, но никак не запрещает подсунуть любого наследника. Точно такую же схему можно и в ПМ реализовать.


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

AVK>>>Тут, скорее, надо просто ввести ключевое слово типа static, которое одновременно и sealed добавит и запретит создание свойств, которые ПМ обработать не сможет.


VD>>Про статик не понял.


AVK>Ну есть такое ключевое слово static, которое навешивает sealed и запрещает нестатические члены.


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

VD>>Сдается мне, что как мета-тул он будет мало интересен.


AVK>Почему?


1. Нерасширяем. Поддерживает только шарп и васик.
2. Заточен на языковый сервис в IDE и компилятор.
3. Не позволяет вмешиваться в процесс парсинга/типизации.
4. Не имеет никаких средств ни для декомпозиции, ни для композиции кода.

Единственное его применение — это получение метаинформации о коде шарпа. Это очень узкая ниша. В реальных задачах придется сделать еще 100500 приседаний.

VD>> Разве что как довесок к тому же Т4.


AVK>Вот уж как довесок к Т4 он точно не нужен.


Ну, почему же? Т4 позволяет худо-бедно автоматизировать генерацию кода. Розлин — получить информацию о коде из проекта. Соединяем их вместе и получаем более интеллектуальную систему генерации кода, для тех кто боится использовать Немерл .
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[9]: C# 6.0
От: Sinix  
Дата: 20.12.13 13:12
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Не то чтобы "шариться". Их в рантайме нужно поддерживать. Для них должна быть реализована структурная эквивалентность. Тип объявленный в одной сборке должен быть совместим с таким же типом из другой сборки.


С структурной эквивалентностью вылазят проблемы с рефлексией (начиная c type.AssemblyQualifiedName), сериализацией и с xml-комментариями. Решить можно, но я не уверен что затраты соответствуют выигрышу. Если уж передавать тип за границы сборки, то лучше объявить его явно и не возиться с "добавили поле в результат метода в сборке А -> всё упало в B".
Re[7]: C# 6.0
От: VladD2 Российская Империя www.nemerle.org
Дата: 20.12.13 13:29
Оценка:
Здравствуйте, Ikemefula, Вы писали:

I>Да, C# это не Немерле и никогда, слава богу, им не будет.


I>В С# с первой версии = для присваивания. => уже используется для лямбд, что бы блок с ретурном не писать. Так что всё очевидно


Для тебя. Но тут дело в тебе.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[8]: C# 6.0
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 20.12.13 14:04
Оценка:
Здравствуйте, VladD2, Вы писали:

I>>Да, C# это не Немерле и никогда, слава богу, им не будет.


I>>В С# с первой версии = для присваивания. => уже используется для лямбд, что бы блок с ретурном не писать. Так что всё очевидно


VD>Для тебя. Но тут дело в тебе.


Не льсти себе — это вызывает слепоту.
Re[10]: C# 6.0
От: VladD2 Российская Империя www.nemerle.org
Дата: 20.12.13 18:31
Оценка:
Здравствуйте, Jack128, Вы писали:

J>Хе. Структурная эквивалентность в .NET ?? Что то не верится -)


А какие проблемы?

Они ее даже реализовали, но только для отдельных типов данных, для улучшения поддержки COM-а.

С точки зрения компьютера никаких типов данных не существует. Есть только области памяти. А типы данных — это их интерпретация. Структурная эквивалентность — это не более чем возможность использовать один "объект" вместо другого. МС без проблем может залудить это дело как только на то появится "политическая" воля.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[10]: C# 6.0
От: VladD2 Российская Империя www.nemerle.org
Дата: 20.12.13 18:39
Оценка:
Здравствуйте, Sinix, Вы писали:

S>С структурной эквивалентностью вылазят проблемы с рефлексией (начиная c type.AssemblyQualifiedName), сериализацией и с xml-комментариями.


Эти смелые утверждения нужно как следует обосновать. Я вот никаких проблем не вижу.

S>Решить можно, но я не уверен что затраты соответствуют выигрышу.


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

Проверка структурной эквивалентности типов производится в момент загрузки сборок/типов. Далее для нужд рефлексии и т.п. используем первый попавшийся тип, а остальные позволяет передавать там где ожидаются их структурные эквиваленты.

S>Если уж передавать тип за границы сборки, то лучше объявить его явно и не возиться с "добавили поле в результат метода в сборке А -> всё упало в B".


Это физически невозможно. Будет "брильянтовая проблема". В одной библиотеке объявляем тип. Другой объявляем тот же тип. Что делать приложению которое хочет использовать обе библиотеки и этот тип? Единственный выход — объявить свой тип, проверить, что он структурно эквивалентен двум других типам из других сборок и позволить использовать один тип вместо другого.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[9]: C# 6.0
От: VladD2 Российская Империя www.nemerle.org
Дата: 20.12.13 18:40
Оценка:
Здравствуйте, Ikemefula, Вы писали:

I>Не льсти себе — это вызывает слепоту.


Я то тут причем? Ты уж как-нить со своей слепотой сам разбирайся.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[10]: C# 6.0
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 21.12.13 06:10
Оценка:
Здравствуйте, VladD2, Вы писали:

I>>Не льсти себе — это вызывает слепоту.


VD>Я то тут причем? Ты уж как-нить со своей слепотой сам разбирайся.


А кто по твоему, не видит что = это присваивание ?
Re[8]: C# 6.0
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 21.12.13 15:08
Оценка: :)
Здравствуйте, VladD2, Вы писали:

VD>1. Нерасширяем. Поддерживает только шарп и васик.


Пфф.

VD>2. Заточен на языковый сервис в IDE и компилятор.


Нет.

VD>3. Не позволяет вмешиваться в процесс парсинга/типизации.


Т4 тоже не позволяет.

VD>4. Не имеет никаких средств ни для декомпозиции, ни для композиции кода.


Имеет.

VD>Единственное его применение — это получение метаинформации о коде шарпа.


Ты, видимо, о чем то о своем, а не про razor.

AVK>>Вот уж как довесок к Т4 он точно не нужен.

VD>Ну, почему же? Т4 позволяет худо-бедно автоматизировать генерацию кода. Розлин — получить информацию о коде из проекта.

Ну понятно, как обычно читаем по диагонали. Не розлин, а razor.
... << RSDN@Home 1.2.0 alpha 5 rev. 100 on Windows 8 6.2.9200.0>>
AVK Blog
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.