Да, читал. Честно признаюсь, понравилась и напомнила про COM, поэтому и упомянул.
p.s. Тут проблема немного в другой плоскости, как она видится мне. Я рационализатор. И, понимаете, при использовании описанного подхода мне нужно постоянно помнить о нем, думать об использовании разного рода конструкций. Важное требование: я, разработчик, не хочу об этом помнить. И, если вспомните, то это требование и легло в основу GC в Java. Думаю, было бы справедливо, чтобы при использовании прежних терминов, суть их все же не менялась. auto_ptr в этом отношении ближе, чем все эти кастомные шаблоны.
p.s. По поводу контейнеров с подсчетом ссылок — так это еще со времен COM длится с его IUnknown. Но только там это было жизненно необходимо, а тут так, поиграться.
Программа — это последовательность действий. Но и последовательность может иметь изначальные правила, которые являются неотъемлемой частью.
Декларация в заголовке — это также часть программы. Без DOS- и/или PE-заголовка ваш код в EXE тоже работать не будет, так как помимо прочего там важные параметры заданы — такие как выравнивания.
p.s. Я то как раз и не спорю, а пытаюсь показать где именно Вы не правы :)
Все в жизни складывается «исторически», но это не отменяет причинно-следственную связь. Без DOS-заголовка EXE-файл для системы не является исполняемым, т.е. не является «программой». Поэтому система даже и не попытается что-то запустить не увидев эту комбинацию.
DOS-header — это заголовок DOS-программы (а именно ее декларативная часть), которую содержит в себе любой исполняемый EXE-файл в целях обратной совместимости.
К слову, COM-файлы никаких деклараций не содержат и например минимальная программа может занимать два байта (0xCD 0x20). С EXE это не так.
Таким образом, любой исполняемый файл WIN-программы содержит в себе полезного паразита в виде DOS-программы (заглушки, STUB и т.д.), который в системе DOS преспокойно запускается и завершает обработку исполняемого файла (для DOS все эти PE и далее — просто мусор). А в Windows система считывает offset PE, лежащего в зарезервированном поле DOS-заголовка. Но этот факт не дает права называть DOS-заголовок частью WIN-программы. DOS-заголвок — это часть DOS-программы.
p.s. В конце-концов у того же Luevelsmeyer'а: «For PE-files, it is a MS-DOS 2.0 compatible executable… that output an error message such as „this program needs windows NT“. You recognize a DOS-stub by validating the DOS-header, being a struct IMAGE_DOS_HEADER.»
Немного не так :) Для подробного разбора тут кое-какие детали упущены, но работа несомненно визуально приятная. Единственный терзающий лично меня вопрос — зачем она?
В хорошее время вы жили видимо. А я вот не готов был тратить свое время просто так — работа для меня была обязательным совмещением приятного (то, чем я занимался) и полезного (денег). Особенно если учесть что на дворе были последствия кризиса (1998-го года) и средняя зарплата у людей не превышала 300 баксов.
Но скажу вам более — любой разумный человек должен быть не в последнюю очередь предпринимателем своей жизни. И если такое валонтёрная трата времени принесет в будущем бОльшую выгоду, нежели традиционный подход, то это весьма похвально. Если же это все в итоге только ради самоутверждения, то грош этому цена.
Значит в статье Вы умышленно слукавили. А что касаемо подхода — мой совет — не увлекайтесь. Пару студентов возможно и согласятся так бездарно провести свое время, но более солидные дядьки просто вас пошлют лесом, и будут правы.
p.s. Тут проблема немного в другой плоскости, как она видится мне. Я рационализатор. И, понимаете, при использовании описанного подхода мне нужно постоянно помнить о нем, думать об использовании разного рода конструкций. Важное требование: я, разработчик, не хочу об этом помнить. И, если вспомните, то это требование и легло в основу GC в Java. Думаю, было бы справедливо, чтобы при использовании прежних терминов, суть их все же не менялась. auto_ptr в этом отношении ближе, чем все эти кастомные шаблоны.
p.s. По поводу контейнеров с подсчетом ссылок — так это еще со времен COM длится с его IUnknown. Но только там это было жизненно необходимо, а тут так, поиграться.
Декларация в заголовке — это также часть программы. Без DOS- и/или PE-заголовка ваш код в EXE тоже работать не будет, так как помимо прочего там важные параметры заданы — такие как выравнивания.
p.s. Я то как раз и не спорю, а пытаюсь показать где именно Вы не правы :)
DOS-header — это заголовок DOS-программы (а именно ее декларативная часть), которую содержит в себе любой исполняемый EXE-файл в целях обратной совместимости.
К слову, COM-файлы никаких деклараций не содержат и например минимальная программа может занимать два байта (0xCD 0x20). С EXE это не так.
Таким образом, любой исполняемый файл WIN-программы содержит в себе полезного паразита в виде DOS-программы (заглушки, STUB и т.д.), который в системе DOS преспокойно запускается и завершает обработку исполняемого файла (для DOS все эти PE и далее — просто мусор). А в Windows система считывает offset PE, лежащего в зарезервированном поле DOS-заголовка. Но этот факт не дает права называть DOS-заголовок частью WIN-программы. DOS-заголвок — это часть DOS-программы.
p.s. В конце-концов у того же Luevelsmeyer'а: «For PE-files, it is a MS-DOS 2.0 compatible executable… that output an error message such as „this program needs windows NT“. You recognize a DOS-stub by validating the DOS-header, being a struct IMAGE_DOS_HEADER.»
(и к слову, не надо отделять заголовок DOS от стаб программы).
Лапшой из паразитного кода в свое время уже наелся.
Для интересующихся темой:
www.zotteljedi.de/pub/pe.txt (LUEVELSMEYER, «The PE file format»)
Но скажу вам более — любой разумный человек должен быть не в последнюю очередь предпринимателем своей жизни. И если такое валонтёрная трата времени принесет в будущем бОльшую выгоду, нежели традиционный подход, то это весьма похвально. Если же это все в итоге только ради самоутверждения, то грош этому цена.