TGStat
TGStat
Введите текст для поиска
Расширенный поиск каналов
  • Язык сайта
    flag Russian flag English flag Uzbek
  • Вход на сайт
  • Каталог
    Каталог каналов и чатов Региональные подборки Тематические подборки Платные каналы Поиск каналов
    Добавить канал/чат
  • Рейтинги
    Рейтинг каналов Рейтинг чатов Рейтинг публикаций
    Рейтинги брендов и персон
  • Аналитика
  • Поиск по публикациям
  • Мониторинг Telegram
  • Продвижение
    Реклама через Яндекс Бизнес Реклама в каналах через TGStat Agency Реклама на сайте TGStat.ru
Mithgol the Webmaster

15 Jun, 15:44

Открыть в Telegram Поделиться Пожаловаться

В 1989 году издана была книга «Персональные ЭВМ в инженерной практике» трёх авторов (Кренкель, Коган, Тараторин), которая донынѣ (болѣе 35 лѣтъ) сохраняется в памяти людей — да и в файлах также (напримѣръ, вон там на сайте old-dos.ru) — благодаря тому, что авторы посвятили нѣсколько страниц книги курьёзному выпаду против операционной системы Microsoft Windows, который в исторической перспективе выглядит смѣхотворно далёким от дальновидности.

На странице 166 они пишут:

Одним из примеров громоздкой и, по мнению авторов, бесполезной надстройки является интегрированная система WINDOWS фирмы Microsoft. Эта система занимает почти 1 Мбайт дисковой памяти и рассчитана на преимущественное использование совместно с устройством типа «мышь». Она объединяет в себе функции просмотра файлов в каталогах, текстового редактора, калькулятора, календаря, графического редактора и позволяет подгружать ряд других систем.


По правде говоря, в 1989 году мегабайт и впрямь мог казаться величиною преизрядною, а посягательство на эту величину — расточительством.

Особенно для тѣхъ совѣтскихъ людей, для которых далёким или даже совершенно неизвѣстнымъ событием оставалась первая из таких компьютерных выставок COMDEX, которые начали тогда происходить ужé не только в Неваде, но и в Японии (в марте 1985 года в Токио) — и на которой компании Denon и Sony совмѣстно представили первые диски CD-ROM, каждый из которых способен был без большого труда вмѣщать аж 650 этих ваших драгоцѣнныхъ мегабайтов.

Ужé в 1988 году (то есть на годъ ранѣе появления книги «Персональные ЭВМ в инженерной практике») вышло въ свѣтъ первое сидиромное издание энциклопедии коннектикутской фирмы Grolier, у нас здѣсь совершенно не извѣстной, но въ Сѣверо-Американскихъ Соединённых Штатах, по-видимому, хорошо извѣстной как энциклопедисты ещё с 1910 года.

На странице 167 авторы книги «Персональные ЭВМ в инженерной практике» продолжают так:

По нашему мнению, символом чрезмерного эстетизма и громоздкости этой системы является подсистема, показывающая время. При вызове этой системы на экране появляются красивые часы с привычным циферблатом и движущимися стрелками… За красоту всегда надо чем-то платить. В системе WINDOWS эта плата — большое время перехода из одной системы в другую, громоздкость переключающих конструкций и большой объём необходимой памяти ЭВМ.


Обратите внимание на то, что чувство громоздкости вызывают в читателях искусственно — силою того, что приложение названо подсистемою, а слово это обыкновенно означает нѣчто большее.

На странице 168 они пишут:

…среди надстроек над ДОС бывают довольно бесполезные системы, которые только выглядят красиво, а на самом деле отнимают время пользователя, память на дисках и оперативную память ЭВМ. Обманчивая красота таких систем, однако, сильно воздействует на неискушённых пользователей, которые не имели практики работы на машине. Инерция мышления бывает столь сильна, что авторам приходилось наблюдать, как люди, начавшие работать с подобной надстройкой, впоследствии с трудом заставляют себя изучать команды ДОС. Хочется предостеречь от этой ошибки читателей.


А насколько сами-то авторы знакомы были с нюансами употребления команд DOS? — на странице 180 у них можно видѣть примѣръ пакетнаго файла (бáтника), начинающагося такими командами:

echo off
IF %1==ivanov GOTO IVAN
IF %1==petrov GOTO PETR
IF %1==sidorov GOTO SIDOR
echo Кто Вы такой? Я Вас не знаю
goto END

Нетрудно видѣть, что авторы ещё не знакомы с записью «@echo off» для подавления вывода команды «echo off» на экран, хотя она считается появившеюся раньше выхода их книги и в DR DOS, и в MS-DOS.

Нетрудно видѣть, что авторы не учитывают возможность вызова бáтника без параметров, приводящую къ замѣщенію параметра «%1» пустой строкою и к исполнению команды «IF ==ivanov GOTO IVAN» (что завершится синтаксическою ошибкою).

Для сравнения можно указать на то, что через три года (в 1992 г.) Фигурнов во втором издании книги «IBM PC для пользователя» ужé упоминает обѣ этѣ проблемы, а для подавления синтаксических ошибок он предлагает ставить минус перед сравниваемыми величинами:

if -%1 == -строка . . .

Однако слегка болѣе популярным, кажется, сдѣлалося заключение сравниваемых строк в кавычки:

if "%1" == "строка" . . .

Автора этой послѣдней идеи я даже не смогу назвать по фамилии — авторство выглядит утраченным в ходе прошедших десятилѣтій. Но могу осторожно предположить, что идея эта явилася под влиянием других таких языков программирования, в которых принято заключать строки текста в кавычки — таков и язык Си, и Си++, и Java, и JavaScript, и PHP, и проч.

Недостатком же этой идеи можно назвать то обстоятельство, что ещё года через два (в 1994 г., с появлением операционной системы Windows NT 3.5) такой подход начал вплотную сталкиваться с новинкою — с появлением длинных имён у файлов. Для примѣра разсмотримъ вот такой бáтник, провѣряющій существование файла, указаннаго в первом параметре его (а наперёд провѣряющій указанность самогó параметра):

@echo off
if "%1" == "" goto noFilename
if exist %1 goto exists
echo Does not exist.
goto end

:exists
echo Exists.
goto end

:noFilename
echo Filename?
:end

Если вызывать этот бáтник с указанием краткого имени файла или без такового, то он будет исправно реагировать словом «Filename?» на неуказанное имя файла, или словом «Exists» на присутствие указаннаго файла, или словосочетанием «Does not exist» на отсутствие указаннаго файла.

Но вот если вызвать его с указанием имени файла "if only you knew how bad things really are.jpg" (в кавычках, как это принято для длинных имён файлов), то произойдёт подстановка кавычек внутри кавычек и синтаксическая ошибка.

Эта ошибка не произошла бы, если бы бáтник был составлен в согласии с предложением Фигурнова:

@echo off
if -%1 == - goto noFilename
if exist %1 goto exists
echo Does not exist.
goto end

:exists
echo Exists.
goto end

:noFilename
echo Filename?
:end

Может быть, как раз поэтому Фигурнов неуклонно повторял свою рекомендацию про минус и послѣ появления операционной системы Windows NT 3.5 (а также, напримѣръ, Windows 95 и Windows 98, ещё болѣе популяризовавших употребление длинных имён файлов пользователями) — по меньшей мѣрѣ, до 1999 года (то есть в седьмом издании книги «IBM PC для пользователя»).

Однако же с появлением длинных имён файлов и сишный принцип засовывания строк в кавычки ещё не оказался в положении совершенно безнадёжном — он ещё мог быть спасён самым минимальным (односѵмвольнымъ) подспорьем, для чего достаточно в бáтнике использовать не подстановку «%1» (на мѣсто которой первый параметр подставляется «как есть»), а появившуюся в новых Windows подстановку «%~1» (на мѣсто которой первый параметр подставляется без кавычек):

@echo off
if "%~1" == "" goto noFilename
if exist %1 goto exists
echo Does not exist.
goto end

:exists
echo Exists.
goto end

:noFilename
echo Filename?
:end

Но здѣсь надо сказать, что передѣлка эта ужé не появлялася в каких-либо популярных книжках, ориентированных на сочинителей бáтников под Windows — ну или мнѣ такія книжки не попадались.

Документация же, приводящаяся на сайте у самóй Корпорации Microsoft, в настоящее время ни словом не упоминает этот трюк с тильдою (и причины его полезности) на странице про команду if.

Хуже того: на той же странице про сравнение строк пишут, что кавычки вокруг них не нужны («You do not need to enclose literal strings in quotation marks»). А вѣдь в общем случае это не так: появление пробѣла в сравниваемых строках нарушит работу команды синтаксическою ошибкою. Вот попробуйте выполнить в командной строке Windows такую команду:

if foo bar baz == foo bar baz echo OK

Результатом будет не слово «OK», а сообщение об ошибке («Непредвиденное появление: bar» в русифицированной версии системы).

А затѣмъ попробуйте выполнить в той же командной строке ту же команду, но с кавычками:

if "foo bar baz" == "foo bar baz" echo OK

Результатом будет ожидаемое слово «OK».

Подстановки же, пользующіяся тильдою, на сайте Корпорации Microsoft разъясняются на странице про команду for.

Поэтому всё сказанное выше ещё не совершенно улеглось в голове у меня: я всё ещё иногда записываю «if "%1" == ""» машинально — и далеко не сразу ловлю себя на пренебрежении тильдою.
for
Reference article for the for command, which runs a specified command for each file, within a set of files.

683 0 6 3 9
Каталог
Каталог каналов и чатов Подборки каналов Поиск каналов Добавить канал/чат
Рейтинги
Рейтинг каналов Telegram Рейтинг чатов Telegram Рейтинг публикаций Рейтинги брендов и персон
API
API статистики API поиска публикаций API Callback
Наши каналы
@TGStat @TGStat_Chat @telepulse @TGStatAPI
Почитать
Академия TGStat Исследование Telegram 2019 Исследование Telegram 2021 Исследование Telegram 2023
Контакты
Справочный центр Поддержка Почта Вакансии
Всякая всячина
Пользовательское соглашение Политика конфиденциальности Публичная оферта
Наши боты
@TGStat_Bot @SearcheeBot @TGAlertsBot @tg_analytics_bot @TGStatChatBot