Berkus
ну то есть ты согласен что HANDLE и указатель СЕМАНТИЧЕСКИ очень разные вещи, неважно как конкретная реализация решила их определить
Constantine
нет, не согласен, я все еще считаю, что HANDLE это в точности СЕМАНТИЧЕСКИ указатель, потому что его можно копировать, сравнивать на равенство и он бывает NULL
Alexander "SonnySlave"
Berkus
нет, тут ты не прав
Berkus
на равенство handle надо сравнивать специальной функцией
Constantine
и при этом еще его копирование будет точно такое же, как у других указателей, например, у void*
Constantine
?
Viacheslav
Berkus
посмотри на JNI хотя бы - там handle тоже вроде бы указатель, но семантика там совсем другая
Viacheslav
Что уже несёт дополнительную информацию.
Berkus
Ioann_
Вообще то, HANDLE
Ioann_
Есть как бы ссылка на объект (число, по которому ядро может идентифицировать объект), но не обязательно адрес. Т.е может быть индексом во внутренней таблице, нативным указателем, в котором некоторые биты используются «не по назначению» или с несколькими специальными значениями, чем угодно и т.п
Ioann_
Сказать, что это чистый указатель - неверно, указатель - это адрес
Berkus
Ioann_
но семантически они похожи, да
Berkus
просто в винде криворукие индусы тоже как и ты не понимают разницы между хендлом и указателем
Ioann_
Тогда, если так, то в твоих словах истина есть
Berkus
это не значит что они подтверждают твои слова, они просто тупые
Viacheslav
И никаких assumptions о том, как этот opaque type реализован, делать просто нельзя.
Viacheslav
И точка.
Constantine
Constantine
или сравнивать handle на равенство специальной функцией?
Berkus
Berkus
смотри
Constantine
хорошо, но зачем
Berkus
0xabba0003 и 0xabba0000 это одинаковые хендлы?
Constantine
разные
Berkus
одинаковые, ведь они на один тот же объект указывают
Viacheslav
И ещё вопрос, а что вообще понимать под тем, что handles are equal.
Berkus
или ты через что равенство хендлов определяешь?
Viacheslav
IsEqual and IsIdentical — две разные вещи.
Constantine
как равенство значений
Berkus
Berkus
сам он значением не является
Constantine
да, как и указатель int*
Constantine
указывает на значение
Berkus
да
Constantine
вот только значением почему-то является
Berkus
видишь разницу теперь?
Constantine
нет, ты сказал без аргументации, что handle значением не является
Berkus
хендл не является и ты не можешь его просто так сравнивать
Constantine
почему?
Berkus
почему?
потому что 0xabba0000 это тот же объект что и 0xabba0003 просто там еще служебные биты какие-то
Constantine
какая вообще есть причина во вселенной запрещать сравнивать то, что ляжет в регистры, на равенство
Berkus
для сборщика мусора или там еще для чего-то
Berkus
это непринципиально
Constantine
и что
Berkus
и что
что "что"
Constantine
смотри, когда ты сравниваешь указатели, ты подразумеваешь, что будет restrict или что
Constantine
сравнение указателей имеет семантику "да"
Constantine
в смысле, равны - точно одно и тоже
Berkus
а сравнение хендлов имеет семантику "хуй"
Constantine
почему
Berkus
следовательно эти две семантики разные
Berkus
ЧТД
Constantine
если два хендла равны в смысле интов в регистрах
Constantine
я не могу передать один вместо другого?
Berkus
почему
потому что (handle1 == handle2) != (IsEqual(handle1, handle2))
Berkus
Constantine
/report
Ioann_
Беркус, прости конечно, но хамить дело дерьмовое
Ioann_
Вспоминая cyberzx
Berkus
сила-хуила это не хамство, это констатация факта
Constantine
@AlexFails нельзя, пожалуйста, указать моему собеседнику, что данный стиль дискуссии не соответствует правилам сообщества?
Constantine
он уйдет и так и не узнает, что равенство понятие логическое и может быть определено по-разному для одинаковых типов
Constantine
например, пространство многочленов степени не выше 2 может быть равно или не равно R^3
Ioann_
Ну, вот я помню, что Беркус в чате графона ошибался в своих фактах, но никто его конечно не обзывал и не хамил.
Berkus
Constantine
смотри тебе, я затираю, что семантика указателя это то, что остается у void*