Здравствуйте, samius, Вы писали:
V>>Можем в опкодах. А в языке можем создавать ссылку на эту ссылку. S>Может в опкодах и можно взять адрес ссылки на управляемый объект, но будет ли такой код верифицирован?
Будет.
S>Насколько я понимаю, предлагаемое тобой противоречит стабильности работы GC.
GC не при чем, это стандартная инструкция ldloca. Дизассемблируй любую сборку и посмотри как часто она применяется.
S>Да и речь была за C#, а не про опкоды.
Это да... Но я же уже дал понять, что для меня будет ссылка на эту ссылку. Для меня это и есть тот самый банальный адрес для целей +1 к косвенной адресации, и ничего более.
Собственно, я не сильно различаю "оттенки" ссылочных типов данных (например, указателя и ссылки) и не собираюсь впредь. И спор пора завязывать, позиции друг друга мы поняли. Для меня указатель — это такой же обычный ссылочный тип данных, просто "с плюшками", например, можно посмотреть его двоичное устройство, отсюда его семантика как значения. Конечно, встает вопрос: "а нафига нам смотреть его двоичное устройство?".. хз, но ведь можно же...
Здравствуйте, samius, Вы писали:
V>>Не так. Оптимизация приемами суперкомпиляция — это скорее рантайм, а не compile-time. Посмотри рядом Синклеру чуть подробней обрисовал: http://www.rsdn.ru/forum/philosophy/4523815.1.aspx
S>Для того что бы выкидывать поля, переменные, структуры, функции и т.п. не нужна никакая суперкомпиляция и рантаймы.
Нужна. Например, распространение констант дальше области видимости, например при инлайне и подстановке — это и есть спекулятивные вычисления. Техникой компиляции это нерешабельно, это чистая эмуляция работы программы по заданной изначально семантике. Я не спорю, что джит это может... это ничего неменяет, просто вместо многократных вычислений некоей формулы с параметром-константой, джит вычислил ее однократно. Т.е. он не просто скомпиллировал формулу, а именно что запустил ее на исполнение.
S>Даже если оптимизация выполнена приемами суперкомпиляции, это ничего не меняет в отношении исходного кода и двоичного.
Ну да, только это уже вообще никак не относится к спору о размещении переменных. Забудь тогда про существование переменных как таковых. Например, если ты написал алгоритм, выдающий числа фибоначи, и из main() вызвал его с параметром-константой, то некий суперкомпилятор может просто преобразовать твою программу в последовательность printf(const1), printf(const2) и т.д. Но это не будет подтверждением вашей т.з., ведь переменных уже нет никаких, и самого алгоритма нет. Зато я наставиваю, что эти constX он вычислил по заданной изначально семантике. Причем, вычслил через эмуляцию работы программы, что является классическим рантайм.
Здравствуйте, DarkGray, Вы писали:
S>>Есть формальное определение отношение эквивалентности и мне не известно ни одного повода считать что его можно ослабить, в том числе для ООП.
DG>также посоветую прочитать что-то помимо букваря. DG>кроме классической эквивалентности из первого класса школы, есть также, например, эквивалентность для нечетких множеств. DG>соответственно необходимо привести пруфлинк, что в ООП нельзя применять нечеткие множества и соответствующую эквивалентность.
Предлагаю для начала представить пруфлинк что отношение сравнения даблов по эпсилону является отношением нечеткой эквивалентности, в частности что для него выполняется нечеткая транзитивность
DG>зы DG>http://www.dmtsoft.ru/bn/476/as/oneaticleshablon/ DG>читать до просветления что такое нестрогое отношение эквивалентности (оно же нечеткое отношение эквивалентности)
Google: No results found for "нестрогое отношение эквивалентности"
Здравствуйте, DarkGray, Вы писали:
V>> Конечно, встает вопрос: "а нафига нам смотреть его двоичное устройство?"..
DG>это обычно необходимо для операции сериализации.
Ну если адрес показывает некое смещение относительно некоей метки сериализуемого блока, то да... а в общем случае, при последующей дессериализации адрес станет невалидный.
Здравствуйте, DarkGray, Вы писали:
V>> Конечно, встает вопрос: "а нафига нам смотреть его двоичное устройство?"..
DG>это обычно необходимо для операции сериализации.
Кстати, вспомнил, что внутри windows младшие биты указателей (нулевые при выровненных данных) используются для защиты от ABA в lock-free алгоритмах...
DG>>кроме классической эквивалентности из первого класса школы, есть также, например, эквивалентность для нечетких множеств. DG>>соответственно необходимо привести пруфлинк, что в ООП нельзя применять нечеткие множества и соответствующую эквивалентность. S>Предлагаю для начала представить пруфлинк что отношение сравнения даблов по эпсилону является отношением нечеткой эквивалентности, в частности что для него выполняется нечеткая транзитивность
согласен. в общем случае, не будет для таких double-ов нечеткого отношения эквивалентности.
в общем случае будет лишь выполняться отношение толерантности.
для появления эквивалентности необходимо округлять на epsilon перед сравнением.
S> Google: No results found for "нестрогое отношение эквивалентности"
DG>>почти нет моделей, которые позволяют описывать эквивалентность моделей(кода). S>Просто удивительно — как же Чёрч с Тьюрингом ухитрились договориться.
Здравствуйте, DarkGray, Вы писали:
S>>Предлагаю для начала представить пруфлинк что отношение сравнения даблов по эпсилону является отношением нечеткой эквивалентности, в частности что для него выполняется нечеткая транзитивность
DG>согласен. в общем случае, не будет для таких double-ов нечеткого отношения эквивалентности. DG>в общем случае будет лишь выполняться отношение толерантности. DG>для появления эквивалентности необходимо округлять на epsilon перед сравнением.
Не понял, это как?
S>> Google: No results found for "нестрогое отношение эквивалентности"
DG>тогда ищи что такое отношение толерантности
А какое отношение имеет толерантность к идентичности?
Здравствуйте, vdimas, Вы писали:
V>Здравствуйте, samius, Вы писали:
V>>>Не так. Оптимизация приемами суперкомпиляция — это скорее рантайм, а не compile-time. Посмотри рядом Синклеру чуть подробней обрисовал: http://www.rsdn.ru/forum/philosophy/4523815.1.aspx
S>>Для того что бы выкидывать поля, переменные, структуры, функции и т.п. не нужна никакая суперкомпиляция и рантаймы.
V>Нужна. Например, распространение констант дальше области видимости, например при инлайне и подстановке — это и есть спекулятивные вычисления. Техникой компиляции это нерешабельно, это чистая эмуляция работы программы по заданной изначально семантике. Я не спорю, что джит это может... это ничего неменяет, просто вместо многократных вычислений некоей формулы с параметром-константой, джит вычислил ее однократно. Т.е. он не просто скомпиллировал формулу, а именно что запустил ее на исполнение.
Тот же инлайн — это не суперкомпиляция, но пример того что суперкомпиляция не нужна для того что бы выкинуть функцию.
S>>Даже если оптимизация выполнена приемами суперкомпиляции, это ничего не меняет в отношении исходного кода и двоичного.
V>Ну да, только это уже вообще никак не относится к спору о размещении переменных. Забудь тогда про существование переменных как таковых. Например, если ты написал алгоритм, выдающий числа фибоначи, и из main() вызвал его с параметром-константой, то некий суперкомпилятор может просто преобразовать твою программу в последовательность printf(const1), printf(const2) и т.д. Но это не будет подтверждением вашей т.з., ведь переменных уже нет никаких, и самого алгоритма нет. Зато я наставиваю, что эти constX он вычислил по заданной изначально семантике. Причем, вычслил через эмуляцию работы программы, что является классическим рантайм.
Алгоритм есть, переменные есть (если с их помощью описан алгоритм). А то что после суперкомпиляции не осталось переменных — как раз и подтверждает ту точку зрения что делать выводы о сущностях программы по сущностям времени выполнения наивно.
DG>>для появления эквивалентности необходимо округлять на epsilon перед сравнением. S>Не понял, это как?
есть стандартная формула Round(x, точность) = точность * Round(x/точность)
S>>> Google: No results found for "нестрогое отношение эквивалентности"
DG>>тогда ищи что такое отношение толерантности S>А какое отношение имеет толерантность к идентичности?
все тоже самое, что необходим пруфлинк, что идентичность должна быть Единой для всего пространства объектов в ООП.
если берется сумма множеств с отношениями эквивалентности на каждом, то суммарное множество обладает в общем случае лишь отношением толерантности.
тоже самое с идентичностью, если берется сумма множеств с отношением идентичности на каждом, то суммарное множество обладает лишь свойством нетранзитивной идентичности.
это кстати активно используется в реальных ООП-языках, например, для null. нетипизированный null (или константный null) идентичен типизированному null, но null-и разных типов не идентичны друг другу. и это полностью соответствует выше написаному (внутри отдельных множеств строгая идентичность и эквивалентность вводится, но поверх всех множества объекта уже нет): внутри объектов одного типа идентичность транзитивная, но при этом между объектами разных типов транзитивность уже нарушается. соответственно также может вводится типы, для которых строгая идентичность есть только на подмножествах объектов данного типа.
Здравствуйте, vdimas, Вы писали:
V>Здравствуйте, samius, Вы писали:
V>>>Можем в опкодах. А в языке можем создавать ссылку на эту ссылку. S>>Может в опкодах и можно взять адрес ссылки на управляемый объект, но будет ли такой код верифицирован?
V>Будет.
S>>Насколько я понимаю, предлагаемое тобой противоречит стабильности работы GC.
V>GC не при чем, это стандартная инструкция ldloca. Дизассемблируй любую сборку и посмотри как часто она применяется.
Если ты про передачу ссылки by ref, то это не взятие адреса ссылки. Взятие, но лишь для того, что бы передать ссылку by ref. На сколько я понимаю, рантайм заботится о том, что бы адрес ссылки не мог бы взяться для любых других целей.
S>>Да и речь была за C#, а не про опкоды.
V>Это да... Но я же уже дал понять, что для меня будет ссылка на эту ссылку. Для меня это и есть тот самый банальный адрес для целей +1 к косвенной адресации, и ничего более.
Это я понял.
V>Собственно, я не сильно различаю "оттенки" ссылочных типов данных (например, указателя и ссылки) и не собираюсь впредь. И спор пора завязывать, позиции друг друга мы поняли. Для меня указатель — это такой же обычный ссылочный тип данных, просто "с плюшками", например, можно посмотреть его двоичное устройство, отсюда его семантика как значения. Конечно, встает вопрос: "а нафига нам смотреть его двоичное устройство?".. хз, но ведь можно же...
Вообще говоря, сначала был указатель, а потом уж ссылка, которая вроде как указатель, но с другой семантикой. Согласен, пора завязывать.
Здравствуйте, DarkGray, Вы писали:
DG>>>для появления эквивалентности необходимо округлять на epsilon перед сравнением. S>>Не понял, это как?
DG>есть стандартная формула Round(x, точность) = точность * Round(x/точность)
Да, это обеспечит транзитивность.
DG>>>тогда ищи что такое отношение толерантности S>>А какое отношение имеет толерантность к идентичности?
DG>все тоже самое, что необходим пруфлинк, что идентичность должна быть Единой для всего пространства объектов в ООП.
Я просто не представляю, как может быть иначе. Опять подвох с транзитивностью?
DG>если берется сумма множеств с отношениями эквивалентности на каждом, то суммарное множество обладает в общем случае лишь отношением толерантности. DG>тоже самое с идентичностью, если берется сумма множеств с отношением идентичности на каждом, то суммарное множество обладает лишь свойством нетранзитивной идентичности.
Не знаю такой "нетранзитивной идентичности".
DG>это кстати активно используется в реальных ООП-языках, например, для null. нетипизированный null (или константный null) идентичен типизированному null, но null-и разных типов не идентичны друг другу. и это полностью соответствует выше написаному (внутри отдельных множеств строгая идентичность и эквивалентность вводится, но поверх всех множества объекта уже нет): внутри объектов одного типа идентичность транзитивная, но при этом между объектами разных типов транзитивность уже нарушается. соответственно также может вводится типы, для которых строгая идентичность есть только на подмножествах объектов данного типа.
Я вообще не понимаю, о чем речь. Идентичность в C# определена через storage location, для проверки идентичености используется Object.ReferenceEquals (по определению идентичностии ECMA). Соответсвенно, объекты разных типов не могут быть друг другу идентичны. null любого типа идентичен любому другому null.
S>Я вообще не понимаю, о чем речь. Идентичность в C# определена через storage location, для проверки идентичености используется Object.ReferenceEquals (по определению идентичностии ECMA). Соответсвенно, объекты разных типов не могут быть друг другу идентичны. null любого типа идентичен любому другому null.
опять же это идентичность только на подмножестве всех объектов, потому что еще есть value-типы.
и следующий код выдает что-то странное, и соответственно Object.ReferenceEquals не является функцией идентичности, потому что не обладает свойством рефлексивности
int y = 2;
Console.WriteLine(Object.ReferenceEquals(y, y));
Здравствуйте, DarkGray, Вы писали:
S>>Я вообще не понимаю, о чем речь. Идентичность в C# определена через storage location, для проверки идентичености используется Object.ReferenceEquals (по определению идентичностии ECMA). Соответсвенно, объекты разных типов не могут быть друг другу идентичны. null любого типа идентичен любому другому null.
DG>опять же это идентичность только на подмножестве всех объектов, потому что еще есть value-типы.
Для которых идентичность определена по-другому той же ECMA.
DG>и следующий код выдает что-то странное, и соответственно Object.ReferenceEquals не является функцией идентичности, потому что не обладает свойством рефлексивности DG>
DG> int y = 2;
DG> Console.WriteLine(Object.ReferenceEquals(y, y));
DG>
DG>
DG>False
DG>
Она является функцией идентичности по ECMA для ссылочных типов.
DG>>опять же это идентичность только на подмножестве всех объектов, потому что еще есть value-типы. S>Для которых идентичность определена по-другому той же ECMA.
т.е. в С# нет единой функции идентичности? и соответственно, C# не является ООП-языком, т.к. ранее тот же Sinclair утверждан, что в ООП функция идентичности должна быть одна.
DG>>>опять же это идентичность только на подмножестве всех объектов, потому что еще есть value-типы. S>>Для которых идентичность определена по-другому той же ECMA.
DG>т.е. в С# нет единой функции идентичности?
Нет, но ее легко определить. DG>и соответственно, C# не является ООП-языком, т.к. ранее тот же Sinclair утверждан, что в ООП функция идентичности должна быть одна.
Вот тут немного непонятно. Что будет если функций будет 10 и все они будут давать одинаковый результат?
Здравствуйте, DarkGray, Вы писали:
S>>Для которых идентичность определена по-другому той же ECMA.
DG>каким же образом? и является ли при этом это отношением транзитивным?
Побитовым сравнением. Да, транзитивность выполняется.