Искусство программирования для Unix
Шрифт:
52 Коллега, порекомендовавший этот учебный пример, прокомментировал его гак: "Да, можно выйти из положения с помощью этой методики..., если имеется всего несколько легко распознаваемых блоков информации, поступающих обратно от подчиненного процесса, а также есть щипцы и противорадиационный костюм".
53 Особенно опасным вариантом этой атаки является вход в именованный Unix-сокет, где программы, создающие и использующие данные, пытаются найти временный файл.
54 Средство STREAMS было гораздо более сложным. Деннису
55 Разработчики основного конкурирующего с GNOME пакета KDE вначале использовали технологию CORBA, но отказались от нес в версии 2.0. С тех пор они ищут более легковесные IPC-методы.
56 Лее Хаттоп в письме, где речь идет о его очередной книге, Software Failure, сообщает: "Если для измерения плотности дефектов учитывать только выполняемые строки, то плотность дефектов в зависимости от языка почта на порядок меньше плотности дефектов в зависимости от квалификации инженера".
57 Для менее технически подготовленных читателей: скомпилированная форма С-программы производится из ее исходного С-кода путем компиляции и связывания. PostScript-версия troffpyMeHTOB troff-документа является производной от исходного troff-кода; чтобы осуществить это преобразование используется команда troff. Существует множество других видов производных. Почти все они могут быть выражены с помощью make-файлов.
58 Любой язык Тьюринга мог бы теоретически использоваться для универсального программирования и теоретически является в точности таким же мощным, как любой другой язык Тьюринга. На практике некоторые языки Тьюринга были бы слишком сложными для использования за пределами специфической или узкой предметной области.
59 Такая прозрачность и простота являются следствием хорошей конструкции мини-языка. Соответствие между нотацией и объектами предметной области весьма очевидно. Связи между объектами выражаются непосредственно, а не через именованные ссылки или другое непрямое преобразование, которого необходимо придерживаться.
Основой функциональный тест для подобного мини-языка прост: возможно ли разобраться в данном языке, не изучая руководство? Для значительного количества случаев использования Glade это так. Например, зная константы С-уровня, которые в GTK используются для описания параметров позиционирования окна, можно распознать константу GTK_WIN_POS_NONE как одну из них и немедленно получить возможность изменить параметры позиционирования, связанные с данным GUI-интерфейсом.
Преимущества использования Glade должны быть очевидны. Данная программа специализируется на создании кода, что освобождает разработчика от необходимости его собственной специализации. То есть Glade принимает на себя одну рутинную задачу, которую в противном случае придется решать вручную. Кроме того, разработчик избавляется от одного из источников ошибок, неизбежных при ручном кодировании.
Более подробная информация, включая исходный код, документацию и ссылки на примеры приложений, доступны на странице проекта Glade <http: //glade. gnome. org/>. Программа Glade
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 средства интроспекции и программирования метаклассов исключительно доступны.