Искусство программирования для Unix - Эрик Реймонд
Шрифт:
Интервал:
Закладка:
119
Серьезность данной проблемы подтверждается богатым сленгом, выработанным Unix-программистами для описания различных ее разновидностей: "псевдонимная ошибка" (aliasing bug), "нарушение выделенной области памяти" (arena corruption), "утечка памяти" (memory leak), "переполнение буфера" (buffer overflow), "разрушение стека" (stack smash), "отклонение указателя" (fandango on core), "недействительный указатель" (stale pointer), "подкачка памяти" (heap trashing), а также вызывающее справедливые опасения "вторичное повреждение" (secondary damage). Пояснения приведены в Словаре хакера <http://www.catb.org/~esr/jargon>.
120
Последний стандарт С++, датированный 1998 годом, был широко распространенным, но слабым, особенно в области библиотек.
121
См. очерк Тома Кристиансена (Tom Christiansen) "Csh Programming Considered Harmful" который можно легко найти в Web.
122
Существует Web-сайт проекта Freenet <http://freenetproject.org>.
123
URL-запроса для получения статистических данных: <http://sourceforge.net/softwaremap/trove_list.php?form_cat=160>.
124
URL-запроса для получения статистических данных: <http://freshmeat.net/browse/160/?topic_id=160>.
125
Распространенное более новое описание языка Perl как "швейцарской бензопилы" является производным.
126
PLY можно загрузить со страницы <http://systems.cs.uchicago.edu/ply/>.
127
Пакет CUP доступен на странице <http://www.cs.princeton.edu/~appel/modern/java/CUP>.
128
Пакет Jack доступен на странице <http://www.javaworld.com/javaworld/jw-12-1996/jw-12-jack.html>.
129
Пакет Yacc/M доступен на странице <http://david.tribble.com/yaccm.html>.
130
http://cm.bell-labs.com/cm/cs/upe/
131
Статья доступна в Web: <http://www.tip.net.au/~millerp/rmch/recu-make-cons-harm.html>.
132
Блочный тест представляет собой тестовый код, прикрепленный к модулю для проверки корректности представления. Использование термина "блочный тест" подразумевает, что тест написан разработчиком одновременно с основным кодом и означает порядок, при котором версии модуля не считаются завершенными до тех нор, пока к ним не прикреплен тестовый код. Данный термин и идея возникли в методологии "Экстремального программирования", популяризированной Кентом Беком (Kent Beck), но получили широкое распространение среди Unix-программистов примерно с 2001 года.
133
Более подробная информация по данным и родственным командам управления компиляцией приведена в справочном меню Emacs: p+processes->compile.
134
Подробнее эти и родственные команды описываются в подразделе справочной системы Emacs, озаглавленном Version Control (Управление версиями).
135
Агентство NASA, в котором целенаправленно создавалось программное обеспечение, предназначенное для использования в течение десятилетий, научилось настаивать на доступности исходного кода для всех создателей программного обеспечения для аэрокосмической техники.
136
Обе системы PDP-7 Unix и Linux стали примерами "неожиданной живучести". Unix в качестве "игрушки для опытов" была создана несколькими исследователями в перерывах между основными проектами. Наполовину она была предназначена для экспериментов с файловой системой и наполовину для поддержки компьютерной игры. Linux была охарактеризована своим создателем как "мой эмулятор терминала с выросшими ногами" [85]
137
Таким образом, литера "С" в названии языка С означает Common (общий) или, возможно, "Christopher". Аббревиатура BCPL первоначально расшифровывалась как "Bootstrap CPL" — сильно упрощенная версия языка CPL, весьма интересного, но слишком претенциозного языка общего программирования (Common Programming Language) Оксфордского и Кембриджского университетов, также называемого "языком программирования Кристофера" (Christopher Programming Language) по имени его главного пропагандиста, первопроходца компьютерной науки Кристофера Стрэчи (Christopher Strachey).
138
Документ доступен в Web: <http://anubis.dkuug.dk/JTC1/SC22/WG14/www/charter>.
139
Первоначальный пробный стандарт в 1985 году назывался IEEE-IX. Название "POSIX" было предложено Ричардом Столлменом. Введение в POSIX.1 гласит "Ожидается произношение "поз-икс" как "позитив", а не "по-сикс" или в других вариантах. Произношение опубликовано в целях обнародования стандартного способа ссылки на стандартный интерфейс операционной системы".
140
Один Linux-дистрибьютор, а именно Лазермун (Lasermoon) из Великобритании, добился сертификации POSIX.1 FIPS 151-2, но вышел из бизнеса, поскольку потенциальных клиентов сертификация не интересовала.
141
Эта тема обсуждается в книге "Just for Fun " [85]
142
Web-поиск, вероятно, предоставит популярную страницу, на которой сатирически описывается семиуровневая модель OSI сравнивается.
143
Эти слова впервые были произнесены членом руководства IETF Дэйвом Кларком (Dave Clark) в 1992 году на бурном собрании, в ходе которого IETF отвергла протокол открытого взаимодействия систем.
144
9 RFC 1149 доступен в Web — <http://www.ietf.org/rfc/rfc1149.txt>. Его реализация описана на стр. <http://www.blug.linux.no/rfc1149/writeup.html>.
145
10 RFC 2324 доступен в Web — <http://www.ietf.org/rfc/rfc2324.txt>.
146
11 RFC 3514 доступен в Web — <http://www.ietf.org/rfc/rfc3514.txt>.
147
В XML-жаргоне то, что здесь названо "диалектом" (dialect), называется "приложением" (application). Автор избегает использования слова "приложение", поскольку в данном случае оно противоречит другому более широко распространенному его значению.
148
В течение нескольких лет казалось, что семиуровневый стандарт ISO может успешно конкурировать с набором протоколов TCP/IP. Он продвигался Европейским комитетом стандартов, напуганным мыслью о заимствовании любой технологии, рожденной в недрах Пентагона. Увы, их негодование превысило остроту их технического зрения. Результат оказался чрезмерно сложным и напрасным. Более подробно эта тема описана в книге [60].
149
Это название — дань кинофильму, вышедшему в 1958 году, который вошел в историю как "наихудшее из созданного", "Plan 9 from Outer Space". Документацию, включая обзорную статью, описывающую архитектуру, наряду с полным исходным кодом и дистрибутивом, который инсталлируется на PC, можно без труда найти с помощью Web-поиска по фразе "Plan 9 from Bell Labs".
150
История о том, как была создана UTF-8, включает в себя описание безумной ночной работы Кена Томпсона и Роба Пайка — <http://www.cl.cam.ac.uk/~mgk25/ucs/utf-8-history.txt>.
151
Ищите F_NOTIFY в fcntl(2).
152
Данный параграф основывается на аналитической статье Генри Спенсера, вышедшей в 1984 году. Он отметил, что управление задачами было необходимо и целесообразно точно учесть в POSIX.1 и последующих стандартах Unix, поскольку оно "просачивается" в каждую программу и, следовательно, должно быть продумано в любом интерфейсе "приложение-система". Отсюда и одобрение POSIX ошибочной конструкции, когда правильные решения "выходили за рамки", а следовательно, даже не рассматривались.
153
Web-страница проекта screen(1) — http://www.math.fu-berlin.de/~guckes/screen/.
154
Для непрограммистов: обработка исключительных ситуаций — способ, с помощью которого программа прерывается в середине процедуры. Это не совсем то же, что выход, поскольку такой останов может быть обработан кодом ловушки во включающей его процедуре. Исключительные ситуации обычно используются для сигнализации об ошибках или неожиданных обстоятельствах, которые означают, что продолжение обычной работы нецелесообразно.
155
http://www.cros-os.org/
156
Что же касается операционной системы Apple Newton, мини-компьютера AS/400 и карманного компьютера Palm, то здесь речь может идти об исключении.
157
Более полное обсуждение данного эффекта приведено в главе "The Magic Cauldron" книги [67].
158
Весьма пугающий перечень возможностей, созданный известным специалистом по безопасности, приведен в TCPA FAQ <http://www.cl.cam.ас.uk/~rjа14/tcpa-faq.html>.
159