Книга: Искусство программирования для Unix

Пример 9.4. Вызывающий контекст для copy_instance

Пример 9.4. Вызывающий контекст для copy_instance

#Сложная часть - инициализация объектов из глобального класса
#`configuration'.
#`Configuration' - верхний уровень объектного дерева,
#который планируется изменить
Configuration = Controls()
copy_instance(Configuration, configuration)
Configuration.servers = [];
for server in configuration['servers']:
 Newsite = Server()
 copy_instance(Newsite, server)
 Configuration.servers.append(Newsite)
 Newsite.users = [];
 for user in server['users']:
  Newuser = User()
  copy_instance(Newuser, user)
  Newsite.users.append(Newuser)

Другое понимание (того, что метакласс copy_instance может быть общим) происходит из Unix-традиции старательного поиска способов избежать кодирования вручную. Но особенно, Unix-программисты привыкли к написанию спецификаций для генерации синтаксических анализаторов для обработки языков разметки. Это скоро привело к предположению, что остальная часть работы может быть выполнена путем некоторого общего обхода дерева конфигурационной структуры. Для четкого разрешения задачи проектирования необходимо было два отдельных (один над другим) этапа создания программы, управляемой данными.

Интуитивное понимание подобное описанному может быть необыкновенно действенным. Рассматриваемый код был написан в течение приблизительно 90 минут, был работоспособен при первом запуске и с тех пор в течение многих лет оставался стабильным (единственный сбой произошел при обработке исключительной ситуации в присутствии действительного перекоса версий). Данный код содержит менее 40 строк и великолепно прост. Не существует способа, при котором примитивный подход полного создания второго синтаксического анализатора мог бы привести к созданию такого же удобства сопровождения, такой же надежности или компактности. Повторное использование кода, упрощение, обобщение, ортогональность — Дзэн операционной системы Unix в действии.

В главе 10 рассматривается синтаксис файла конфигурации fetchmail в качестве примера стандартного shell-подобного метаформата для конфигурационных файлов. В главе 14 fetchmailconf используется как пример, демонстрирующий мощность языка Python в быстрой разработке GUI-интерфейсов.

Оглавление книги


Генерация: 1.214. Запросов К БД/Cache: 3 / 1
поделиться
Вверх Вниз