avva: (Default)
[personal profile] avva
Реймонд Чен: 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. Бедный, бедный мой мозг.

Было бы полезно сделать подборку записей Реймонда Чена (а у него немало записей в таком духе) обязательной для изучения будущими программистами в университетах.
Page 1 of 2 << [1] [2] >>

Date: 2010-10-14 09:58 pm (UTC)
From: [identity profile] dmarck.livejournal.com
мало какие вещи в мире содержат больше ужасного, чем попытки сохранить обратную совместимость ;-P
Edited Date: 2010-10-14 09:59 pm (UTC)

Date: 2010-10-14 10:05 pm (UTC)
From: [identity profile] gaal.livejournal.com
What I want to know is why "drives" exist at all. They're not significantly easier to understand than a single-root fs (I think), and are much more of a pain to administer. AFAIK this evil started with CP/M, not Microsoft, but perhaps it's even more ancient.

Date: 2010-10-14 10:19 pm (UTC)
From: [identity profile] mfi.livejournal.com
Вот за такое трепетное отношение к совместимости, DOS и Форточки вынесли своих конкурентов. Я читал у Сполянски еще пару крышесносных примеров - про игру-полетный симулятор и про Lotus 1-2-3.

Date: 2010-10-14 10:22 pm (UTC)
From: [identity profile] fyysik.livejournal.com
for sure, lot of CP/M specifics is borrowed from DEC's RT-11. So it adds symbolic meaning to fact of creation of Windows NT by DEC-refugee:)

Date: 2010-10-14 10:32 pm (UTC)
From: [identity profile] mfi.livejournal.com
Работал в обоих системах, причем с RT-11 ушел на CP/M. Большой связи не заметил.

Date: 2010-10-14 10:36 pm (UTC)
From: [identity profile] chessplayer.livejournal.com
кстати, такая подборка уже есть

Date: 2010-10-14 10:43 pm (UTC)

Date: 2010-10-14 10:47 pm (UTC)
From: [identity profile] fyysik.livejournal.com
Синтаксис командной строки. Тот самый прямой слэш. Батч-файлы. Идеология драйверов. Ограничение файловых имен, вытекающее из компактификации кодировки RADIX (то самое знаменитое правило 8.3). Плоские файловые системы с непрерывными файлами. И это на фоне уже вполне весьма продвинутого к тому моменту UNIX-а:)
Edited Date: 2010-10-14 10:48 pm (UTC)

Date: 2010-10-14 11:06 pm (UTC)
From: [identity profile] http://users.livejournal.com/_iga/
Там же он пишет, что это заморочка исключительно cmd.exe. Win32 подсистема и ядро такими глупостями не затронуто.

Date: 2010-10-14 11:10 pm (UTC)
From: [identity profile] http://users.livejournal.com/_iga/
в radix-50 имена 6.3

Date: 2010-10-14 11:23 pm (UTC)
From: [identity profile] fyysik.livejournal.com
ну тут наверное все же про унаследованную традцию трехбуквенного расширения. Которая шла именно оттуда - в 2 байта уместить три символа.

Date: 2010-10-14 11:36 pm (UTC)
From: [identity profile] mfi.livejournal.com
Синтаксис командной строки - он везде был такой, даже на майнфреймах:

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 - на восьми битовых процессорах. Это два разных мира.

Date: 2010-10-14 11:53 pm (UTC)
From: [identity profile] 1master.livejournal.com
У него книжка есть.

Date: 2010-10-15 12:04 am (UTC)
From: [identity profile] fyysik.livejournal.com
В юникс были не батч файлы, а уже сразу плотные шелл-скрипты, с гибкой логикой и обработкой переменных.
Батч-файлы вообще от перфокартной технологии идут.

Насчет РАДИКС - да, я ответил кому-то за вами. Скорей для простоты переняли традицию без технологии сжатия.

Про слэши - имеется ввиду знаменитая оппозиция юникса и "другого мира". В первом прямые слэшы разделяли каталоги, а признаком флага команды был -. А в "другом мире" - команду от флагов отделял прямой слэш, поэтому, когда им наконец пришла в голову идея иерархической файловой системы, пришлось для разделения каталогов использовать обратный слэш.

Экстентов я не застал точно. Посему основной спасительной командой был squeez - собрать непрерывные файлы в единый блок, чтоб теоретически доступное место стало реально доступным. Очень смеялся года три назад, когда выяснилось, что пресловутая проблема пожирания памяти Firefox-ом примерно в этом и состоит:)

Так что с последним тезисом не согласен никаким боком. Разве что за ооочень солидное материальное вознаграждение.

P.S. Застал СP/M и для 16-разрядников. И даже его "мультизадачное" расширение - MP/M
Edited Date: 2010-10-15 12:06 am (UTC)

Date: 2010-10-15 12:46 am (UTC)
From: [identity profile] mfi.livejournal.com
Ну, если плясать от еэсовских перфокартных заданий и JCL - приходило в голову, но отбросил, уж сильно они от нормальных shell-ов отличаются. Но в CP/M батчей просто не было вообще, как класса.

Про РАДИКС - ага. Точнее, Гэри Килдалл перенял понятие окончания имени - хорошая идея была, даже если осью поддерживалось только .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.

Date: 2010-10-15 12:47 am (UTC)
From: [identity profile] msh.livejournal.com
Я недавно столкнулся с проблемой, когда у нового сервера с 24 процессорами и 36 гигабайтами памяти, с встроенным гипервизором, веб-сервером и удаленным десктопом случайно сломали эмуляцию BIOS IBM XT и чипсета IBM AT, и это оказалось очень серьезной проблемой. Я даже не знаю с чем это сравнить в других областях техники.

Date: 2010-10-15 12:59 am (UTC)
From: [identity profile] ygam.livejournal.com
С латинским алфавитом? Вы знаете, почему в нем Z - последняя буква, а в греческом - шестая?

Date: 2010-10-15 01:12 am (UTC)
From: [identity profile] msh.livejournal.com
Нет, не знаю, почему?

Date: 2010-10-15 01:35 am (UTC)
From: [identity profile] ygam.livejournal.com
Она была исключена за ненадобностью, и на ее место вставили новую букву G (до этого римляне использовали букву C как для глухого звука к, так и для звонкого г). Потом буква все-таки понадобилась, но место уже было занято.

Date: 2010-10-15 01:39 am (UTC)
From: [identity profile] ygam.livejournal.com
In PowerShell, you can create multiletter drives with directories of virtual objects. For example, the registry hive HKEY_LOCAL_MACHINE is one such drive. You can do

dir 'HKLM:\SOFTWARE\JavaSoft\Java Runtime Environment'

Date: 2010-10-15 01:48 am (UTC)
From: [identity profile] cryinstone.livejournal.com
Упаси боже нас от дней, когда изучение Виндовс будет обязательным в университетах.

Date: 2010-10-15 02:33 am (UTC)
From: [identity profile] meshko.livejournal.com
А мне вот интересно, почему когда я на дисе d:, команда
cd c:\temp не переводит меня на диск c?

Date: 2010-10-15 02:48 am (UTC)
From: [identity profile] selfmade.livejournal.com
Ещё нельзя создать динамическую веб страницу на IIS с именем con.aspx, prn.aspx и подобными из-за обратной совместимости уходящей в глубину веков к CP/M.

Date: 2010-10-15 04:16 am (UTC)
From: [identity profile] hiend.livejournal.com


c:
cd a
> c:\a\
cd b
> c:\a\b\
d:
cd docs
> d:\docs\
copy *.* c:
____________
и вот тут он как раз и скопирует все файлы из d:\docs в текущую дирректорию на диске (c:\a\b\)
именно поэтому мне всегда казалось удобным, что он помнит текущую диру на каждом диске...

Date: 2010-10-15 06:01 am (UTC)
From: [identity profile] dmpogo.livejournal.com
Попытки переписать все заново с чистого листа часто с ними соревнуются :)
Page 1 of 2 << [1] [2] >>

December 2025

S M T W T F S
  123 4 56
78 9 10 11 1213
1415 1617181920
21 22 23 24 2526 27
28293031   

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Dec. 29th, 2025 11:22 am
Powered by Dreamwidth Studios