Re[5]: Зачем this != null
От: nikov США http://www.linkedin.com/in/nikov
Дата: 20.06.08 10:09
Оценка:
Здравствуйте, AndrewVK, Вы писали:

N>>Как бы оно там внутри не было реализовано, оно не должно нарушать правила языка.

AVK>Рантайма, ты хотел сказать? При помощи динамической компиляции можно нарушать любые правила языка, если они не противоречат рантайму.

Не понял твою мысль. Тело лямбды, записанной в C#, должно выполняться одинаково, независимо от того, преобразована ли она непосредственно в делегат, или преобразована в expression tree и затем скомпилирована.

AVK>В SP1 меняют компилятор???


Баги фиксят. Например, это
Автор: nikov
Дата: 23.12.07
пофиксили.
Re[6]: Зачем this != null
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 20.06.08 10:34
Оценка:
Здравствуйте, nikov, Вы писали:

N>Не понял твою мысль. Тело лямбды, записанной в C#, должно выполняться одинаково, независимо от того, преобразована ли она непосредственно в делегат, или преобразована в expression tree и затем скомпилирована.


Это не имеет отношения к языку. Если формирование expression tree еще можно как то к языку привязать, то уж динамическая компиляция — чисто библиотечная фишка.
... <<RSDN@Home 1.2.0 alpha 4 rev. 1090 on Windows Vista 6.0.6001.65536>>
AVK Blog
Re[7]: Зачем this != null
От: nikov США http://www.linkedin.com/in/nikov
Дата: 20.06.08 10:38
Оценка:
Здравствуйте, AndrewVK, Вы писали:

N>>Не понял твою мысль. Тело лямбды, записанной в C#, должно выполняться одинаково, независимо от того, преобразована ли она непосредственно в делегат, или преобразована в expression tree и затем скомпилирована.


AVK>Это не имеет отношения к языку. Если формирование expression tree еще можно как то к языку привязать, то уж динамическая компиляция — чисто библиотечная фишка.


Я хочу сказать, что компилятор должен формировать expression tree с оглядкой на то, как реализована динамическая компиляция в библиотеке, так чтобы конечный наблюдаемый результат был таким же, как и после преобразования в делегат.
Re[8]: Зачем this != null
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 20.06.08 11:41
Оценка: +1
Здравствуйте, nikov, Вы писали:

N>Я хочу сказать, что компилятор должен формировать expression tree с оглядкой на то, как реализована динамическая компиляция в библиотеке


Не согласен. Динамическая компиляция в библиотеке вторична (она, собственно, и появилась в последний момент, перед релизом).

N>, так чтобы конечный наблюдаемый результат был таким же, как и после преобразования в делегат.


Вот и надо подкручивать динамическую компиляцию, чтобы она не позволяла подобных финтов ушами.
... <<RSDN@Home 1.2.0 alpha 4 rev. 1090 on Windows Vista 6.0.6001.65536>>
AVK Blog
Re: Зачем this != null
От: _FRED_ Черногория
Дата: 20.07.10 08:58
Оценка:
Здравствуйте, _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.
Re: Зачем this != null
От: bober_maniac Россия http://bober-maniac.livejournal.com/
Дата: 20.07.10 14:09
Оценка:
Здравствуйте, _FRED_, Вы писали:

_FR>Смотрю исходники System.String ("\redbits\ndp\clr\src\BCL\System\String.cs")

_FR>
_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>

_FR>(то же и с перегруженной версией с параметром типа string) и не понимаю, зачем проверка "this != null" Индусы? "Наследие" C++?

VB.NET и C++/CLI позволяют вызов функций от null-аргумента. C# при попытке сделать такое падает с NullReferenceException.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.