Искусство программирования для Unix - Реймонд Эрик Стивен
Шрифт:
Интервал:
Закладка:
Преимущества использования Glade должны быть очевидны. Данная программа специализируется на создании кода, что освобождает разработчика от необходимости его собственной специализации. То есть Glade принимает на себя одну рутинную задачу, которую в противном случае придется решать вручную. Кроме того, разработчик избавляется от одного из источников ошибок, неизбежных при ручном кодировании.
Более подробная информация, включая исходный код, документацию и ссылки на примеры приложений, доступны на странице проекта Glade <http: //glade. gnome. org/>. Программа Glade перенесена на платформу Microsoft Windows.
60 Однако неочевидно, что XSLT мог бы быть несколько проще при тех же функциональных возможностях, поэтому его нельзя охарактеризовать как плохую конструкцию.
61 Концепции и практическое применение XSL <http://nwalsh.com/docs/tutorials/xsl/xsl/ slides .html>.
62 http://www.netlib.org/
63 Пример 8.5. Синтетический код f etchmailrc
# Опрашивать данный узел первым в цикле. poll pop.provider.net proto рорЗ
user "jsmith" with pass "secretl" is "smith" here
user jones with pass "secret2" is "jjones" here with options keep
# Опрашивать данный узел вторым
poll billywig.hogwarts.com with proto imap:
user harry_potter with pass "floo" is harry_potter here
64 Цитата принадлежит Алану Перлису (Alan Perils), который провел ряд передовых работ по модульности программного обеспечения приблизительно в 1970 году. Двоеточие в данном случае означало разделитель или ограничитель операторов в различных потомках языка Algol, включая Pascal и С.
65 Существует сайт проекта GhostScript chttp: //www. cs .wise. edu/~ghost/>.
66 Первое руководство no PostScript <http://www.cs.indiana.edu/docproject/programming/ postscript/postscript.html>.
67 Реализации JavaScript с открытыми исходными кодами на С и Java доступны на сайте <http: / /www. mozilla. org/ js/>.
68 20 миллионов — сдержанная оценка, основанная на графиках Linux Counter и других источниках по состоянию на середину 2003 года.
69 Рассматривалась идея написания связующего уровня, который имел бы явную информацию о структуре всех 3 классов и использовал бы данную информацию для просмотра инициализатора при создании соответствующих объектов. Однако данная идея была отклонена, поскольку существовала вероятность добавления со временем новых членов класса, по мере создания новых функций в конфигурационном языке. Если бы код создания объектов был написан таким очевидным путем, то он также был бы хрупким и склонным к рассинхронизации при изменении определения классов либо структуры инициализатора, выводимой с помощью генератора отчетов - - conf igdump. Подобный подход приводит к бесконечному появлению ошибок.
Более надежным способом было бы использование создание программы, управляемой данными, т.е. кода, который анализировал бы форму и члены инициализатора, опрашивал бы определения классов об их членах, а затем согласовывал бы оба набора.
Программисты, работающие с Lisp и Java, называют данную методику интроспекцией (introspection). В некоторых других объектно-ориентированных языках она называется программированием метаклассов (metaclass hacking) и, как правило, считается "черной магией", понятной только "посвященным". В большинстве объектно-ориентированных языков данная методика не поддерживается вообще, а в тех языках, где она поддерживается (среди них Perl и Java), она часто сложна и ненадежна. Однако в языке Python средства интроспекции и программирования метаклассов исключительно доступны.
В примере 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 ("&");/'
Поэтому при сборке программы файл splashscreen автоматически преобразовывается в серию вызовов функции вывода, которые С-препроцессор затем включает в необходимую функцию.
Путем создания кода из данных поддерживается редактируемая версия справочного экрана, идентичного его представлению на дисплее. В результате этого повышается прозрачность. Более того, при желании можно модифицировать справочный экран, не затрагивая С-кода вообще, а верное внешнее представление будет автоматически получено при следующей сборке.
По тем же причинам инициализатор, содержащий строки синонимичных названий, также генерируется посредством $е</-сценария в шаке-файле из файла с именем 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 Управляющая программа (harness programm) представляет собой упаковщик, предназначенный для того, чтобы предоставлять вызываемым им программам доступ к некоторому специальному ресурсу. Данный термин часто употребляется при характеристике средств тестирования, которые предоставляют тестовые нагрузки и (часто) примеры корректного вывода для проверки фактического вывода тестируемых программ.
82 СтраницаScript-Fu <http: //www.xcf .Berkeley.edu/-gimp/script-fu/script-fu.html>.