Здравствуйте, AndrewVK, Вы писали:
AVK>Это из другой оперы.
Как сказать.
AVK> Большевики еще, к примеру, очень долго говорили, что одним из самых больших недостатков императивных возможностей шарпа является отсутствие возможности подключения реализаций. Тем не менее воз и ныне там.
Это да.
AVK>Вот бы еще они mixins скоммунизьмили.
Опять таки смотря как это будет реализовано. А вот что они сделали с кортежами мне очень не нарвится. Решение убогое и половинчатое.
VD>>Вот и ответ на все несоотвестия. Таки теперь мы будет иметь нормальный ОО-синтаксис вызова методов расширения. В общем, объект все что качается, если не качается, то раскачивается и признается объектом.
AVK>Ну, надо признать, что в Delphi.NET похожее уже есть.
Думашь, только в МС читают форумы посвященные стандартизации С++?

К тому же уверен, что фишка уже реализована в других языках за долго до того как она попала в Дельфи.
AVK>ХЗ. ИМХО вопрос культуры программирования. С точки зрения архитектурных проблем это ничего не дает. А меня это волнует в первую очередь.
Это дает логичный и более краткий код. Мелочь казалось бы, но если вспомнить чем отличается ассемблер от языков высокого уровня...
AVK>Возможно, как с дженерик-свойствами, есть какие то синтаксические проблемы. Т.е. для методов добавление модификатора к параметру естественно, а вот со свойствами и событиями уже не так очевидно и требует сурового перетряхания грамматики. А вот почему операторы не добавили — ХЗ.
Возможно.
VD>>То есть это только сахар?
AVK>Все, что сейчас описано это сахар, потому что существующая реализация работает на 2 фреймворке.
У тебя странное понятие сахара. Итераторы по-твоему тоже сахар?
VD>>Однако для полноценного применения функционального стиля нужно сделать еще два шага. Во первых ввести передачу лямд без делегатов, чтобы можно было делать лямбда-преоразования и соответсвенно строить методы из кусков,
AVK>Возможно можно будет что то соорудить на базе expression tree.
Пока что я не понял как из них получить скомпилированный код.
AVK>Не факт
. В нем тоже может многое из этого появится. Надо глядеть. Да и потом — для любителей извратов есть С++/CLI
Тут уже любители С++ смогут на поном основании говорить о том к кого какие картиночки.
AVK>Не, это работать не будет. Во-первых это просто неверный синтаксис, правильно так:
AVK>AVK>var dict2 = new Dictionary<string, int>
AVK>{
AVK> new { Key = "one", Value = 1 },
AVK> new { Key = "two", Value = 2 },
AVK> new { Key = "three", Value = 3 }
AVK>};
AVK>
Ну, да... им нужны имена. Уроды, былин.
AVK>Потом, компилятор создаст свой класс, а в collection initializer нужно тот тип, который T в реализованном ICollection<T>. Т.е., в случае Dictionary это KeyValuePair. Текущий компилятор на такой код говорит следующее:
С какого интересно перепуга нельзя добавить в Dictionary конструктор принимающий new { Key = "...", Value = ... }?
AVK>AVK>TupleDic.cs(15,9): error CS0029: Cannot implicitly convert type 'Test.<Projection>f__0' to 'System.Collections.Generic.KeyValuePair<string,int>'
AVK>
Дык коллекции то старые. Параметра нет. Вот и все.
VD>>А с чего он взял, что Name и Price — это свойства, а не поля?
AVK>С того, что так написано в спецификации.
Нда, дурь. Что-то они с этими анонимными типами намудрили. Видимо будет такой же критинизм как с анонимными методами, когда сначало выйдет дебильная версия, а потом они почешут репу и скажут — надо бы поправить.
VD>>Не. Ты точно не правильно понял. Анонимные типы == кортежи. Кортежи сравниваются по значению и должны мочь использоваться везде где применимы длругие типы. Но должен быть синтаксис описания анонимных типов без декларации. Тогда их можно будет использовать как возвращаемые занчения функций и как параметры функций. Корче это неотемлемая часть функционального стиля!
AVK>Может быть. Но если ты приведешь компилируемый пример, тогда я поверю.
Я уже проверил. Уроды они. Анонимные типы пока что < кортежи.
AVK> Пока же, по текущей спецификации, это не работает. Единственное — компилятор на одинаковые объявления генерирует один и тот же класс. Это видно в самой последней строчке примера.
Ага, вот только экземляры даже одинаковые сравниваются по адерсам и:
var x = new { X = 0, yield = 1 };
var y = new { X = 0, yield = 1 };
Console.WriteLine(x == y);
возвращает False.
Ну, что за дебилы это разрабатывали? Ну, неужели нельзя было просто скомуниздить идею кортежей 1 в 1? И ведь в роде в это СиОмеге все грамотно было сделано! Может они просто недоделали?
VD>>...хотя очень уж смахивает на list comprehension из таких языков как Питон, Хаскель и т.п. Вообще штука забавная, но уж больно диковинно реализованно. Хотя я могу ошибаться. Тут нужно попробовать на практике.
AVK>ИМХО слишком узкоспециализированно.
Наоборот. list comprehension намного более узкое решение. Это как гигантский foreach. Синтаксический сахар над паттерном проектирования.
Это решение уж точно не уже foreach-а. Другое дело, что конечно такие вещи нужно не в язык встраивать, а делать средства расширения языка чтобы их можно было делать оп своему разумению.
VD>>Гы. Темнота. Это такой изращенческий способ открыть дверь в мир лямбда-исчислений, а точнее лямбда-конверсий, т.е. в мир комбинаторной логики. Дело в том, что делегаты далеко не самый эффективный способ работы с функциями. Они приводят к динамическому полиморфизму, что как минимум медленее нежели статический. Теория лямбда-конверсий подразумевает, что над методами можно производить разные вычисления какбудто это объекты. Таким образом можно из одних методов создавать другие. Причем результат может быть очень и очень забавным.
AVK>Но из текущей спецификации ничего такого не видно.
Видно. Просто в спецификации пара слов всего. А вот в компиляторе уже по более. Плюс два примера есть. Жаль что они слишком огромные. Но похоже это именно возможность заставить преобразовать код в АСТ и обратно. Какого хрена не сделать это для любой конструкции и не позволить делать преобразования во время компиляции я не знаю. А было бы удобно. Ну, да возможно и без того будет круто.
VD>>Про операциями над этими выражениями ничего не сказано?
AVK>Нет. Там почти ничего не рассказано про эту фишку.
Ну, на операции я уже посморел. Чистое АСТ которое можно менять как хочешь. Только не понял как из него получить скомпилированный код.
... << RSDN@Home 1.2.0 alpha rev. 611>>