Здравствуйте, nikov, Вы писали:
IT>>А в чём проблема создать внутренний паблик класс и выставить наружу его? Нужно только подумать о наименовании.
N>Хе-хе! А сколько он параметров будет иметь? Или надо будет накладывать искусственное ограничение на количество элементов к кортеже?
Каких параметров?
... << RSDN@Home 1.2.0 alpha rev. 0>>
Если нам не помогут, то мы тоже никого не пощадим.
Здравствуйте, IT, Вы писали:
IT>А в чём проблема создать внутренний паблик класс и выставить наружу его? Нужно только подумать о наименовании.
А дальше? Как заставить tuple1.GetType() == tuple2.GetType() вернуть true, если tuple1 и tuple2 совместимы по сигнатуре, но при этом физически это два разных класса? Тут хак в рантайме нужен типа делегатов, бо это duck typing в чистом виде. Ну или работать через TransparentProxy, но производительность такого решения ты наверное представляешь.
Здравствуйте, AndrewVK, Вы писали:
IT>>А в чём проблема создать внутренний паблик класс и выставить наружу его? Нужно только подумать о наименовании.
AVK>А дальше? Как заставить tuple1.GetType() == tuple2.GetType() вернуть true, если tuple1 и tuple2 совместимы по сигнатуре, но при этом физически это два разных класса?
Вопрос зачем это надо?
... << RSDN@Home 1.2.0 alpha rev. 0>>
Если нам не помогут, то мы тоже никого не пощадим.
Здравствуйте, IT, Вы писали:
IT>>>А в чём проблема создать внутренний паблик класс и выставить наружу его? Нужно только подумать о наименовании.
N>>Хе-хе! А сколько он параметров будет иметь? Или надо будет накладывать искусственное ограничение на количество элементов к кортеже?
IT>Каких параметров?
Может быть, я не понял тебя... Какой тип ты предлагаешь создать и выставить?
Здравствуйте, IT, Вы писали:
IT>Вопрос зачем это надо?
Чтобы кортежи, использованные в разных сборках, но совместимые по сигнатуре, были совместимы между собой. Т.е. для того же, для чего duck typing между делегатами и методами.
Спасибо. Да, я и без пдсказаок заметл, что твои слова про контракты — это демагогия.
[Много неубедительной защиты кривых решений поскипаны]
VD>> Ведь если есть шанс повлиять на плохое решение, то его обязательно надо использовать.
AVK>Есть ли он в ситуации, когда дизайн языка утвержден?
Всегда самая удобная позиция — это сидеть на пятой точке и ничего не делать. Потом всегда можно сказать "А что я мог сделать?".
AVK>Может и есть, если вспомнить про nullable типы.
Темболее надо попробовать воздействовать. Сказать, что мол это мнение всего комьюнити РСДН и т.п.
VD>> Уверен, что мы не одни кто понимает, что такая половинчатасть — это плохо.
AVK>Да понимают они это. 100%.
Значит лишний пинок под зад может сдвинуть дело в нужном направлении.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, nikov, Вы писали:
N>Может быть, я не понял тебя... Какой тип ты предлагаешь создать и выставить?
Насколько я понимаю, сейчас создаётся private internal класс для таких анонимных типов, который соответственно доступен только внутри класса. Если решить вопрос с именованием этого типа, то можно его делать не private, а public и смело выставлять наружу.
Если нам не помогут, то мы тоже никого не пощадим.
Здравствуйте, AndrewVK, Вы писали:
IT>>Вопрос зачем это надо?
AVK>Чтобы кортежи, использованные в разных сборках, но совместимые по сигнатуре, были совместимы между собой. Т.е. для того же, для чего duck typing между делегатами и методами.
Вот я и спрашиваю зачем это надо.
Если нам не помогут, то мы тоже никого не пощадим.
Здравствуйте, IT, Вы писали:
IT>Насколько я понимаю, сейчас создаётся private internal класс для таких анонимных типов, который соответственно доступен только внутри класса. Если решить вопрос с именованием этого типа, то можно его делать не private, а public и смело выставлять наружу.
Значит, я неверно понял вначале. Тогда игнорируй то мое замечание.
Здравствуйте, AndrewVK, Вы писали:
IT>>Вот я и спрашиваю зачем это надо.
AVK>Ну, типа, чтобы не был "кастрированный кортеж" (С).
Ну понятно.
Вообще, конечно, сранное решение. Не то чтобы я переживал как Влад, но чесно говоря, если нельзя выставить такой тип наружу, то чисто с практической точки зрения такая фича видится мне пока совершенно бесполезной, хотя возможно я и не прав Столько усилий непонятно ради чего.
Если нам не помогут, то мы тоже никого не пощадим.
Здравствуйте, IT, Вы писали:
IT>Вообще, конечно, сранное решение. Не то чтобы я переживал как Влад, но чесно говоря, если нельзя выставить такой тип наружу, то чисто с практической точки зрения такая фича видится мне пока совершенно бесполезной, хотя возможно я и не прав Столько усилий непонятно ради чего.
Ну ради чего как раз понятно. Анонимные типы придумывались ради query comprehension, чтобы текст запроса был читаем и с минимумом "синтаксического оверхеда"(С). Но Владу очень хотется и ФПшные кортежи.
VD>Я в курсе. Еще мама учила не делать уродов ради частных случаев, а пытаться делать гормоничный дизайн. Вот этого я и не вижу. Причем не вижу причины зачем так делать.
Hi IT
AV>>В этом отношении мне нравиться как сделано в Питоне
IT>Именно об этом и речть. Только для одной переменной это выглядит так:
IT>def (_, b) = Fun();
Спасибо. Буду знать. Хотя еще не скоро будет возможность даже попробовать Nemerle.
P.S. Правда, слишком рьяно идет здесь реклама Nemerle. Даже отбивает желание смотреть на это. Но я сволочь любознательная — при возможности попробую посмотреть.
AV>>В этом отношении мне нравиться как сделано в Питоне AV>>AV>(a,b)=Fun() AV>>
AV>>где a,b — локальные переменные. И перебор не надо.
n>В Nemerle тоже можно так. Более того, с левой стороны можно использовать любой образец (pattern). Например, если на этапе компиляции известно, что второй элемент кортежа — список, то можно написать так:
n>def (x, h :: t) = Fun();
Спасибо. Буду знать что в Nemerle тоже так можно сделать.
Здравствуйте, IT, Вы писали:
IT>Насколько я понимаю, сейчас создаётся private internal класс для таких анонимных типов, который соответственно доступен только внутри класса. Если решить вопрос с именованием этого типа, то можно его делать не private, а public и смело выставлять наружу.
private internal — не бывает. Но это так... мелкое замечание.
По сути же... проблема в том, что классы в разных сборках должны быть совместимы.
Если мы, скажем, создали в одной сборке анонимный тип { DateTime Age; string Name; }, то нам надо, чтобы если в другой сборке будет такой же, то чтобы мы могли передать экземпляр этого туда. А если каждая сборка для реализации нашего анонимного типа создаст по классу, то они (по правилам дотенета) окажутся несовместимыми.
Проблема решается прой if-ов в загрузчеке типов дотнета. Надо просто тупо проверять не загружен ли уже такой тип и если загружен все отсальные вхождения подменят на первый. Но это изменение в рантайме, а по словам АВК Хейлсберг и ко. говорят что по не озвученым причинам они не хотят править рантайм.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, AndrewVK, Вы писали:
AVK>Ну ради чего как раз понятно. Анонимные типы придумывались ради query comprehension, чтобы текст запроса был читаем и с минимумом "синтаксического оверхеда"(С). Но Владу очень хотется и ФПшные кортежи.
Честно говоря теперь не то что бы очень хотелось. Откровенно говоря сейчас возвращаться на Шарп нет никакого желания. Я уж лучше потерплю позиционные кортежи.
Просто мне всегда не нравятся половинчатые решения приводящие к решению частных проблем, но не пригодных ни для чего больше (хотя очевидно полезных и для других задач).
В прочем хардкодинг query comprehensions сам по себе решение кривое. Но хотя бы поняты основания почему это так.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, VladD2, Вы писали:
IT>>Насколько я понимаю, сейчас создаётся private internal класс для таких анонимных типов, который соответственно доступен только внутри класса. Если решить вопрос с именованием этого типа, то можно его делать не private, а public и смело выставлять наружу.
VD>private internal — не бывает. Но это так... мелкое замечание.
Под internal имелся ввиду класс, вложенный в другой класс.
VD>По сути же... проблема в том, что классы в разных сборках должны быть совместимы.
Я понимаю проблему. Вопрос, проблема ли это и нужно ли её решать.
Если нам не помогут, то мы тоже никого не пощадим.