Re[3]: Краткий пересказ
От: VladD2 Российская Империя www.nemerle.org
Дата: 15.09.05 13:40
Оценка:
Здравствуйте, 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>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.