Искусство программирования для Unix - Реймонд Эрик Стивен
Шрифт:
Интервал:
Закладка:
14 Современные и исторические графики рыночных долей Wcb-еерверов доступны в ежемесячном обзоре "Netcraft Web Server Survey" по адресу chttp: / /www. net craft. com/survey/>.
MacOS фактически состоит из двух частных уровней (перенесенные приложения OpenStep и классические GUI-интерфейсы Macintosh) поверх Unix-основы с открытым исходным кодом (проект Darwin).
15 Для читателей, не имеющих опыта работы в Unix: канал представляет собой способ соединения вывода одной программы с вводом другой. Возможные варианты применения данной идеи для обеспечения взаимодействия программ рассматриваются в главе 7.
16 Периодические прерывания от аппаратного таймера (periodic clock interrupt) необходимы в виде-тактовых импульсов для системы разделения времени. В каждом такте таймер сообщает системе о том, что можно переключиться на другую задачу, определяя длительность кванта времени. В настоящее время Unix-системы настроены на 60 или 100 тактовых импульсов в секунду.
17 Для обозначения этого подхода в настоящее время используется новомодное понятие система безо паашсти па основе ролей (role-based security).
18 Данная проблема весьма серьезно рассматривалась в корпорации Microsoft в ходе перестройки службы Hotmail. См. [7|.
19 Более подробный анализ технических характеристик различных операционных систем приведен на Web-сайтс OSData <http: / /www. osdatа. com/ >.
20 За исключением системы Multics, которая в основном оказывала влияние в период между опубликованием се спецификаций в 1965 году и ее фактической поставкой в 1969 году.
21 1° Возвращаясь к вопросу о части технологии Amiga, IBM предоставила компании Commodore лицензию на свой язык сценариев REXX. Данная сделка описана на странице http://wvnm.os2bbs.com/ os2news/OS2Warp. html.
22 В качестве примера рекомендуются сайты OS Voice <http://www.os2voice.org/> и OS/2 BBS.COM <http: / /www. os2bbs. com/ >.
23 Возможно. Это подтверждает тот факт, что унифицирующей метафорой для всех операционных систем Microsoft является тезис "потребитель должен быть замкнут".
24 http: //security. tombom. со .uk/shatter .html
25 Корпорация Microsoft в марте 2003 года фактически публично признала, что NT-безопасность невозможна. См. Web-страпицу http://www.microsoft. com/technet/treeview/default .asp?url=/ technet/security/bulletin/MS03 -010.asp.
26 Технология Cygwin в значительной мере согласована с Единым стандартом Unix (Single Unix Specification), однако программы, требующие непосредственного доступа к аппаратным ресурсам, запускаются с ограничениями в ядре поддерживающей их Windows-системы. Так, широко известны проблемы с Ethernet-платами.
http: / /www. cbttape. org/cdrom.htm
27 Результаты Linux-стратегии эмуляции и поглощения заметно отличаются от практики захвата и расширения, характерной для некоторых се конкурентов. Для начинающих: Linux не нарушает совместимости с тем, что эмулирует, и таким образом не привязывает клиентов к "расширенной" версии.
28 Закон Брукса гласит, что подключение к запаздывающему проекту новых программистов еще больше замедляет работу, В более широком смысле рост затрат и количества ошибок можно выразить квадратом числа, соответствующего количеству программистов, которые были задействованы в проекте.
29 Согласно модели Хаттона, небольшие различия в максимальном размере элемента кода, который программист может держать в краткосрочной памяти, непосредственно влияют на эффективность работы программиста.
30 В основном труде по рассматриваемой теме, а именно "Refactoring" [21], автор фактически указывает, что принципиальная цель рефакторинга состоит в усилении ортогональности. Однако ввиду недостаточно развитой концепции он может только аппроксимировать данную идею из необходимости устранения дублирования кода и других нежелательных явлений, многие из которых являются следствием нарушения ортогональности.
31 < Типичным примером плохой организации кэширования является директива rehash в csh(1) введите man 1 csh для получения более подробных сведений. Другой пример приведен в разделе 12.4.3.
32 Последний пример "переплетения" Unix и Дзэн приведен в приложении Г.
33 Архитектурный выбор порядка интерпретации битов в машинном слове — "обратный" и "прямой" (big-endian и little-endian). Хотя канонический адрес отсутствует, поиск в Web по фразе "On Holy Wan and a Plea for Peace" позволит найти классическую и интересную статью по данной теме.
34 Широко распространенное мнение о том, что автоинкрементная и автодекрементная функции вошли в С, поскольку они представляли машинные команды PDP-11, - это не более чем миф. Согласно воспоминаниям Денниса Ритчи, данные операции были предусмотрены в предшествующем языке В еще до появления PDP-11.
Наличие глобальных переменных также означает, что повторно использовать данный код невозможно, то есть, множество экземпляров в одном процессе, вероятно, препятствуют работе друг друга.
35 Много лет назад я узнал из книги Кернигаиа и Плоджера "The Elements of Programming Style" полезное правило: писать однострочный комментарий немедленно после прототипа функции, причем для вся без исключения функций.
36 Простейший способ сбора данных сведений заключается в анализе тег-файлов, сгенерированных с помощью таких утилит, как etags(1) или ctags( 1).
Пример 5.5. XML-формат
<?xtnl version=" 1.0"?> <kprintf ilter name="imagetops"> <filtercommand
data=11 imagetops %filterargs %filterinput %filteroutput" /> <filterargs>
<filterarg name="center"
description»"Image centering"
format»"-nocenter" type="bool" default»"true"> cvalue name»"true" description="Yes" /> cvalue name»"false" description»"No" /> </filterarg> <filterarg name»"turn"
description»"Image rotation" format»"-%value" type="list" default»"auto"> cvalue name="auto" description="Automatic" /> cvalue name»"noturn" description="None" /> cvalue name="turn" description»"90 deg" /> c/filterarg> cfilterarg name="scale"
description»"Image scale" format»"-scale %value" type»"float"
min="0.0" max="1.0" default»"!.000" />
37 Даже не зная ничего о семантике полей, можно отметить, что более плотно упаковать данные в двоичном формате было бы весьма трудно. Ограничивающие поля символы двоеточия должны были бы иметь функциональные эквиваленты, которые, как минимум, занимали бы столько же места (обычно либо определенное количество байтов, либо строки нулевой длины). Каждая запись, содержащая данные одного пользователя, должна была бы иметь ограничитель (который едва ли мог бы быть короче, чем один символ новой строки), либо неэкономно заполняться до фиксированной длины.
В действительности, перспективы сохранения пространства посредством двоичного кодирования почти полностью исчезают, если известна фактическая семантика данных. Значения числового идентификатора пользователя (третье поле) и идентификатора группы (четвертое поле) являются целыми числами, поэтому на большинстве машин двоичное представление данных идентификаторов заняло бы по крайней мере 4 байта и было бы длиннее текста для всех значений до 999. Это можно проигнорировать и предположить наилучший случай, при котором значения числовых полей находятся в диапазоне 0-255.