Реймонд Чен: 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-14 10:32 pm (UTC)no subject
Date: 2010-10-14 10:47 pm (UTC)no subject
Date: 2010-10-14 11:10 pm (UTC)no subject
Date: 2010-10-14 11:23 pm (UTC)no subject
Date: 2010-10-14 11:36 pm (UTC)RUN []
Батч-файлы были с Unix, а может еще до него, но на CP/M не использовались..
Драйверы .. в CP/M - не помню, там вроде компилировали сразу всю ОС и по ^C шла горячая перезагрузка - ( в районе полсекунды - считать с восьмидюймовой дискеты один файл и закинуть его в память. Потом MS DOS, который грузился с пятидюймовки целых две минуты вызывал удивление). В RT-11 драйверы были, сам писал, но они вроде отдельными модулями лежали?
В CP/M не было 8.3, если моя память мне не врет(проверил, врет). В RT-11 был стандарт 6.3, не 8.3. А вот если в MS DOS и CP/M оно идет из триад RADIX - это объясняет многое, кроме одного - в каталогах этих ОС использовали просто побайтовый текст, а не сжатый код RADIX!
Слэшэй в СП/М и RT-11 - не помню в упор, там разве вообще было понятие пути и подкаталоги? ДИСК:ФАЙЛ.ЕХТ - и все. (В MS DOS даже сначала была переменная и прерывание, определяющее, какой символ разделителя использовать - прямой, как в Юниксе - или обратный слэш.)
У RT-11 файлы были вроде с экстентами, соответственными экстентам - записям в каталоге диска (каталог представлял собой навороченный бинарный список-дерево, автоматически перетряхивавшийся). Странно, Wiki этого не подтверждает, но я их точно помню - разбирался с дефрагментацией. У СП/М - таки непрерывные файлы, устройство главного каталога не помню, но простое какое то.
В общем, если бы Вы сказали, что DOS - гибрид CP/M и Unix - я бы горячо одобрил. А вот RT-11, как отец CP/M - тут я в больших сомнениях. И не забудьте - RT-11 работал на 16-ти разрядниках, а CP/M - на восьми битовых процессорах. Это два разных мира.
no subject
Date: 2010-10-15 12:04 am (UTC)Батч-файлы вообще от перфокартной технологии идут.
Насчет РАДИКС - да, я ответил кому-то за вами. Скорей для простоты переняли традицию без технологии сжатия.
Про слэши - имеется ввиду знаменитая оппозиция юникса и "другого мира". В первом прямые слэшы разделяли каталоги, а признаком флага команды был -. А в "другом мире" - команду от флагов отделял прямой слэш, поэтому, когда им наконец пришла в голову идея иерархической файловой системы, пришлось для разделения каталогов использовать обратный слэш.
Экстентов я не застал точно. Посему основной спасительной командой был squeez - собрать непрерывные файлы в единый блок, чтоб теоретически доступное место стало реально доступным. Очень смеялся года три назад, когда выяснилось, что пресловутая проблема пожирания памяти Firefox-ом примерно в этом и состоит:)
Так что с последним тезисом не согласен никаким боком. Разве что за ооочень солидное материальное вознаграждение.
P.S. Застал СP/M и для 16-разрядников. И даже его "мультизадачное" расширение - MP/M
no subject
Date: 2010-10-15 12:46 am (UTC)Про РАДИКС - ага. Точнее, Гэри Килдалл перенял понятие окончания имени - хорошая идея была, даже если осью поддерживалось только .COM. А сама длина имени в 8 байт - FILE9999.TXT - это просто - заведомо больше, чем можно было поместить файлов на дискету :-)
Слэши в плане оппозиции двух миров - пожалуй соглашусь тоже.
Насчет экстентов - Wiki говорит, что я ошибаюсь, может я помню экстенты дескрипторов файла в каталоге (но зачем они тогда?) а не экстенты файлов? Я как то писал на Macro-11 самопальную файловую систему для дискет - и мне пришлось разбираться с главным каталогом жесткого диска RT-11.
Материального вознаграждения предложить не могу, но в итоге мы имеем слеши и трехбайтовое окончание имен - маловато для родственных связей :-)
П.С. Ага, я видел ее для 16-ти разрядников тоже - но это сразу стало столь несерьезно... В конце концов, весь софт CP/M отлично бегал под MS DOS, требуя минимума поддержки от разработчика (помните разницу между .COM и .EXE и специальный режим intel процессора?). Oн выглядел там чужим и убогим - но он был!
Когда мы впервые увидели MS DOS, первый вопрос всей команды был - а утилита поддержки ххх (не помню имя, но мы из нее не вылезали) - тут пойдет? Она есть? И ответ "Да", был решающим. Тут же появился PC Tools, не говоря уже о Нортоновских утилитах, крывших CP/M-овские как бык овцу, но для нас было главное, что в первые же минуты мы не оставались с незнакомым софтом (или без него) в руках. А если учесть, что dBase-3, редакторы текстов и SuperCalc остались неизменны (скопируй информацию клиентов as is и продолжай разработку), то переход на другую ОС был вопросом решенным. Умные парни сидели в Microsoft.
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)насчет экстентов
Date: 2010-10-19 04:35 pm (UTC)А это точно была RT-11, а не RSX-11?
Re: насчет экстентов
Date: 2010-10-19 06:26 pm (UTC)Клинит меня что то.