Здравствуйте, AndrewVK, Вы писали:
N>>Как бы оно там внутри не было реализовано, оно не должно нарушать правила языка. AVK>Рантайма, ты хотел сказать? При помощи динамической компиляции можно нарушать любые правила языка, если они не противоречат рантайму.
Не понял твою мысль. Тело лямбды, записанной в C#, должно выполняться одинаково, независимо от того, преобразована ли она непосредственно в делегат, или преобразована в expression tree и затем скомпилирована.
AVK>В SP1 меняют компилятор???
Здравствуйте, nikov, Вы писали:
N>Не понял твою мысль. Тело лямбды, записанной в C#, должно выполняться одинаково, независимо от того, преобразована ли она непосредственно в делегат, или преобразована в expression tree и затем скомпилирована.
Это не имеет отношения к языку. Если формирование expression tree еще можно как то к языку привязать, то уж динамическая компиляция — чисто библиотечная фишка.
... <<RSDN@Home 1.2.0 alpha 4 rev. 1090 on Windows Vista 6.0.6001.65536>>
Здравствуйте, AndrewVK, Вы писали:
N>>Не понял твою мысль. Тело лямбды, записанной в C#, должно выполняться одинаково, независимо от того, преобразована ли она непосредственно в делегат, или преобразована в expression tree и затем скомпилирована.
AVK>Это не имеет отношения к языку. Если формирование expression tree еще можно как то к языку привязать, то уж динамическая компиляция — чисто библиотечная фишка.
Я хочу сказать, что компилятор должен формировать expression tree с оглядкой на то, как реализована динамическая компиляция в библиотеке, так чтобы конечный наблюдаемый результат был таким же, как и после преобразования в делегат.
Здравствуйте, nikov, Вы писали:
N>Я хочу сказать, что компилятор должен формировать expression tree с оглядкой на то, как реализована динамическая компиляция в библиотеке
Не согласен. Динамическая компиляция в библиотеке вторична (она, собственно, и появилась в последний момент, перед релизом).
N>, так чтобы конечный наблюдаемый результат был таким же, как и после преобразования в делегат.
Вот и надо подкручивать динамическую компиляцию, чтобы она не позволяла подобных финтов ушами.
... <<RSDN@Home 1.2.0 alpha 4 rev. 1090 on Windows Vista 6.0.6001.65536>>
Здравствуйте, _FRED_, Вы писали:
_FR>Смотрю исходники System.String ("\redbits\ndp\clr\src\BCL\System\String.cs")
_FR>// Determines whether two strings match.
_FR>[ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
_FR>public override bool Equals(Object obj) {
_FR> String str = obj as String;
_FR> if (str == null)
_FR> {
_FR> // exception will be thrown later for null this
_FR> if (this != null) return false;
_FR> }
_FR> return EqualsHelper(this, str);
_FR>}
_FR>(то же и с перегруженной версией с параметром типа string) и не понимаю, зачем проверка "this != null" Индусы? "Наследие" C++?
И вот пришёл четвёртый фреймворк (и наступил "later" ):
public override bool Equals(Object obj) {
if (this == null) //this is necessary to guard against reverse-pinvokes and throw new NullReferenceException(); //other callers who do not use the callvirt instruction
Help will always be given at Hogwarts to those who ask for it.