Здравствуйте, AndrewVK, Вы писали:
<skipped>
PD>>Я уже не знаю, как еще объяснять. Никогда не думал, что это так сложно, хотя 20 лет преподаю. Еще раз — все я понял. Что не надо так делать — понял. Что парадигма здесь другая — понял, Что я все неправильно делаю — понял. Что я ничего не понимаю, по вашему мнению, тоже понял. Достаточно ?
AVK>Нет. Надо еще научится не делать одну и ту же ошибку в следующий раз.
Похоже, мои педагогические способности полностью исчерпались. Когда 10 раз объясняешь одно и то же, а в ответ видишь, что человек попросту не слышал твои объяснения — тяжелый случай. Не воспринимает и все!
Ладно, еще раз попробую. Постарайся просто понять, чего я хочу и не ломись в открытую дверь, доказывая мне то, что для меня совершенно очевидно. Пойми же наконец, что не об этом вообще речь идет.
Я вот недавно в очередной раз начал занятия по Win32 со студентами. Одно из первых понятий, которое там надо рассмотреть — дескрипторы. Сказал, все что на этот счет полагается, и разумеется, о том, что численное значение дескриптора для нас не важно и т.д.
А вот теперь представь себе, что приходит ко мне студент и спрашивает — а что такое дескриптор в действительности, что это число означает. (Кстати, в своем спецкурсе я этого вопроса касаюсь).
Вот мой ответ.
1. Работа с дескрипторами прозрачна для приложения, поэтому тебе это не надо знать
2. Если все же узнаешь — ты не должен это знание использовать, это некорректно.
3. То, что ты знаешь, может измениться в следующей версии Windows или даже SP, и твоя программа перестанет работать.
И т.д. Не кажется ли тебе, что эти аргументы вполне совпадают по духу с теми, которые ты пытаешься использовать ?
Только после всего этого я добавлю вот что
"Надеюсь, ты понял, что я тебе сказал и учтешь это в своей работе. А теперь я расскажу тебе, что такое дескриптор".
И дальше — недокументированная информация из Соломона-Руссиновича и Шрайбера или Фень Юаня соответственно.
Потому что бывают случаи, когда все эти 3 правила не играют никакой роли. И некорректно, и недокументировано, и непереносимо и бог знает что еще не. А жить надо, и программу сделать надо. И уж лучше ее сделать не слишком корректными способами, чем корректно ничего не сделать.
Тебе метод Руссиновича перехвата системных вызовов Win32 знаком ? (На всякий случай — это когда в ядре патчится таблица адресов системных вызовов). Метод абсолютно непереносимый, номера функций меняются от одного билда Windows к другому, приходится ссылаться на файлы символов — сам понимаешь, насколько это корректно и т.д. Но другого метода — по крайней мере я не знаю. А этот все же работает, хоть и проблем хватает. Дайте корректный способ — об этом все забудут. Так не дают...
Вот и мои вопросы вовсе не тем объясняются, что не понимаю я идеологию .Net. Прекрасно понимаю, и что то, чего я хочу, не вполне корректно — тоже понимаю. Пока меня не припрет по скорости или памяти — я и не подумаю правила нарушать. А вот если припрет — может, и придется. Потому что отказаться от C# я, вполне возможно, и не смогу, а программу делать надо.
И даже не это главное. Вопрос не столько в том, чтобы найти, где можно нарушить. Вопрос-то мой в совсем другом. Я же вижу, что попал в систему, в которой, мягко говоря, несколько иные принципы в плане эффективности исповедуются. Так вот, главное, что я понять хочу — где в ней основные неэффективнсти находятся !!! Когда я в С++ програмирую, я всегда знаю, что мне та или иная конструкция стоить будет. А здесь — пока не знаю. И вот я вижу конструкцию, которая мне подозрительной по эффективности кажется. И спрашиваю — нельзя ли здесь как-то иначе. Потому как если начну я просто писать — как бы потом не вышло, что программа будет работать с неприемлемой скоростью. Подводные камни я найти хочу и знать о них заранее...
А ты мне в ответ в 10-й раз — здесь указатели использовать нельзя и прямого доступа к памяти нет...