Реймонд Чен: Why does each drive have its own current directory?
Во всех версиях DOS и Windows командная строка "помнит" отдельно текущую директорию для каждого диска. Если на C: сделать cd foo, потом пойти на D: и там сделать cd bar, а потом вернуться "c:", то окажешься в запомненной директории foo. Так было всегда, но я никогда не понимал, зачем это нужно. У такого поведения были свои преимущества, но были и недостатки.
Из этой записи Чена я наконец узнал, зачем это так сделано: для совместимости DOS 2.0 с программами DOS 1.0. И по этой причине текущая директория так работает во всех версиях DOS и Windows, включая самые последние. Потому что когда-то нужно было, чтобы программы для DOS 1.0, не знавшие что такое "директория", могли писать в разные директории на дискетах, когда их запускали в DOS 2.0. Бедный, бедный мой мозг.
Было бы полезно сделать подборку записей Реймонда Чена (а у него немало записей в таком духе) обязательной для изучения будущими программистами в университетах.
Во всех версиях DOS и Windows командная строка "помнит" отдельно текущую директорию для каждого диска. Если на C: сделать cd foo, потом пойти на D: и там сделать cd bar, а потом вернуться "c:", то окажешься в запомненной директории foo. Так было всегда, но я никогда не понимал, зачем это нужно. У такого поведения были свои преимущества, но были и недостатки.
Из этой записи Чена я наконец узнал, зачем это так сделано: для совместимости DOS 2.0 с программами DOS 1.0. И по этой причине текущая директория так работает во всех версиях DOS и Windows, включая самые последние. Потому что когда-то нужно было, чтобы программы для DOS 1.0, не знавшие что такое "директория", могли писать в разные директории на дискетах, когда их запускали в DOS 2.0. Бедный, бедный мой мозг.
Было бы полезно сделать подборку записей Реймонда Чена (а у него немало записей в таком духе) обязательной для изучения будущими программистами в университетах.
no subject
Date: 2010-10-15 06:27 am (UTC)no subject
Date: 2010-10-15 08:06 am (UTC)А у EXE (во временах MS-DOS) в начале файла шёл кусок данных описывающий расположение отдельных сегментов кода внутри файла, таким образом обходилось ограничение на размер. Во времена Windows формат развился дальше.
no subject
Date: 2010-10-16 11:29 pm (UTC)Для EXE файлов таких ограничений не было, можно было использовать все адресное пространство 16-разрядной машины (1 мегабайт), использовать разные адресные экстенты для данных, для разных частей кода и т.п. Загрузчик понимал, куда что положить в памяти - что в начало, что в конец и т.п., т.е. один файл мог раскидываться по частям, а не одним непрерывным куском в память.
no subject
Date: 2010-11-07 05:08 am (UTC)