Искусство программирования для Unix
Шрифт:
В примере 9.3 приведен фрагмент кода приблизительно со строки 1895 в версии 1.43.
70 Данная проблема решается следующим образом. В состав исходного дистрибутива входит файл с именем splashscreen, в котором содержится такой же экран использования, как в приведенном примере. Исходный код на С содержит следующую функцию.
void
showHelp(FILE *out, char *progname) {
fprintf(out,"Usage: %s t-dxohv] [-t] [char-alias...]\n", progname); ftinclude "splashscreen.h"
exit(0);
}
Файл splashscreen. h генерируется инструкцией шаке-файла.
splashscreen.h: splashscreen
sed «splashscreen >splashscreen.h \
– e 's/W/WW/g' -e ,s/'7\\,7' -e ' s/. */puts ("&");/'
Поэтому
Путем создания кода из данных поддерживается редактируемая версия справочного экрана, идентичного его представлению на дисплее. В результате этого повышается прозрачность. Более того, при желании можно модифицировать справочный экран, не затрагивая С-кода вообще, а верное внешнее представление будет автоматически получено при следующей сборке.
По тем же причинам инициализатор, содержащий строки синонимичных названий, также генерируется посредством $е</-сценария в шаке-файле из файла с именем nametable, входящего в состав исходного дистрибутива ascii. Большая часть файла nametable просто копируется в С-инициализатор. Но процесс генерации упростил бы адаптацию данного средства для других 8-битовых наборов символов, таких как ISO-8859 (Latin-1 и подобные).
71 Здесь CGI означает lie Computer Graphic Imagery, а технологию Common Gateway Interface (интерфейс общего шлюза), которая применяется для создания интерактивных Web-документов.
72 Для отображения скрытых файлов используется параметр -а утилиты ls(1).
73 Суффикс "гс" связан с системой, предшествующей Unix, CTSS. В ней присутствовала функция сценария команд, которая называлась "runcom". В ранних Unix-систсмах имя "гс" использовалось для загрузочного сценария операционной системы как дань runcom в CTSS.
74 Никто не знает действительно изящного способа представить эти распределенные данные о настройках. Переменные среды, вероятно, не являются этим способом, однако для всех известных альтернатив характерны одинаково неприятные проблемы.
75 i В действительности, большинство Unix-программ вначале проверяют переменную VISUAL, и только если она не установлена, обращаются к переменной EDITOR. Это пережиток того времени, когда пользователи имели различные настройки для строковых и визуальных редакторов.
76 См. стандарты GNU-нрограммирования на странице <http: //www. gnu. org/prep/standards. html».
77 Файл .xinitrc является аналогом каталога автозагрузки в Windows и других операционных системах.
78 Диспетчер окон (window manager) поддерживает связи между окнами на экране и запущенными заданиями. Диспетчер окон управляет такими функциями, как расположение, отображение заголовков, свертывание, развертывание, перемещение, изменение размеров и затенение окон.
79 Такой взгляд на проблему характерен для нетсхнического конечного пользователя.
80 Исходные коды данной программы и других конвертеров с подобными интерфейсами доступны на странице <http://ww.cdrom.com/pub/png>.
81
82 СтраницаScript-Fu <http: //www.xcf .Berkeley.edu/-gimp/script-fu/script-fu.html>.
http://www.cs.yorku.ca/~oz/wily
http://plan9.bell-labs.com/sys/doc/acme/acme.html
83 формуле: An + с, где А — некоторый неизвестный постоянный коэффициент пропорциональности, а С — неизвестная константа, представляющая время установки. Линейный поиск определенного значения в списке представляет собой алгоритм типа О (и). Алгоритм О(п') выполняется за время An' плюс величина более низкого порядка (которая может быть линейной либо логарифмической или любой другой функцией ниже квадратичной). Поиск повторяющихся значений в списке (примитивным методом, без сортировки списка) является алгоритмом О(п'). Аналогично, алгоритмы порядка О(п') имеют среднее время выполнения, вычисляемое по кубической формуле. Такие алгоритмы часто слишком медленны для практического применения. Порядок О (log п) типичен для поиска по дереву. Взвешенный выбор алгоритма часто может сократить время выполнения с 0(п') до О (log п). Иногда, когда требуется рассчитать использование алгоритмом памяти, можно заметить, что оно изменяется как O(l) или О (я), или О(п). Как правило, алгоритмы с использованием памяти О(п') или более высокого порядка являются непрактичными.
2 Удвоение мощности в течение каждых 18 месяцев, обычно цитируемое в контексте закона Мура, подразумевает, что можно достичь 26% прироста производительности просто путем приобретения нового аппаратного обеспечения через 6 месяцев.
Молодые читатели могут не знать, что раньше терминалы печатали (на бумаге и очень медленно).
84 Термины, введенные здесь для обозначения проблем проектирования, происходят из устоявшегося жаргона хакеров, описанного в книге lb66].
85 Разделение случайной и необязательной сложности означает, что рассматриваемые здесь категории не являются тем же, что сущность и случайность в очерке Фреда Брукса "No Silver Bullet" [8], однако в философском смысле они имеют одинаковое происхождение.
86 http://plan9.bell-labs.com/sys/doc/sam/sam.html
87 Разработчиками Emacs были Ричард М. Столлмен (Richard М. Stallman) и Берии Гринберг (Bcrnie Greenberg). Первоначальный редактор Emacs был изобретением Столлмена, первая версия со встроенным языком Lisp была создана Гринбергом, а окончательная на сегодняшний день версия создана Стол-лменом на основе версии Гринберга. К 2003 году нет полного изложения истории разработки редактора, но эту тему освещает статья Гринберга "Multics Emacs: The History, Design, and Implementation", которую можно найти в Web но ключевым словам.