8 Мини-языки: поиск выразительной нотации

8

Мини-языки: поиск выразительной нотации

Хорошая нотация обладает тонкостью и выразительностью, которая со временем делает ее почти похожей на живого учителя.

The World of Mathematics (1956)

—Бертранд Рассел (Bertrand Russell)

Одним из самых последовательных результатов крупномасштабных исследований ошибок в программировании является то, что уровень ошибок программиста, выраженный в количестве дефектов на 100 строк кода, почти не зависит от языка, на котором написана программа[76]. Высокоуровневые языки, которые позволяют добиться больших результатов, используя меньшее количество строк, также означают меньшее количество ошибок.

В Unix имеется давняя традиция поддержки небольших языков, предназначенных для определенной прикладной области, языков, которые могут способствовать в радикальном сокращении количества строк кода в программах. Примеры узкоспециальных (domain-specific) языков включают в себя многочисленные языки разметки текстов (troff, eqn, tbl, pic, grap), утилиты оболочки (awk, sed, dc, bc) и средства разработки программного обеспечения (make, уасс, lex). Невозможно провести четкие границы между узкоспециальными языками и более гибким видом файлов конфигурации программ (sendmail, BIND, X), или форматами файлов данных, или языками сценариев (которые рассматриваются в главе 14).

В сообществе Unix для таких языков узкоспециального назначения исторически определилось название "малые языки" или "мини-языки" , поскольку ранние их примеры были небольшими и имели небольшую сложность по сравнению с универсальными языками (в настоящее время широко используются все 3 термина для данной категории). Однако если предметная область сложна (тем, что имеет множество различных примитивных операций или включает в себя манипуляцию сложными структурами данных), то для нее может понадобиться прикладной язык, гораздо более сложный, чем некоторые универсальные языки. В данной книге используется традиционный термин "мини-язык" (minilanguage), для того чтобы подчеркнуть, что мудрое решение обычно заключается в сохранении данных конструкций небольшими и простыми насколько это возможно.

Узкоспециальный небольшой язык — чрезвычайно мощная конструкторская идея. Он позволяет определить собственный высокоуровневый язык для указания соответствующих методов, правил и алгоритмов, направленных на разрешение ближайшей задачи, сокращая глобальную сложность по сравнению с конструкцией, в которой для тех же целей используется жестко встроенный низкоуровневый код. Прийти к использованию мини-языка можно как минимум тремя путями, два из которых хороши, а один опасен.

Один из верных путей заключается в том, чтобы заранее осознать возможность использования конструкции на основе мини-языка, для того чтобы поднять данную спецификацию проблемы программирования на уровень выше к форме записи, которая является более компактной и выразительной, чем нотация, поддерживаемая в универсальном языке. Как и в случае с генерацией кода и создания программ, управляемых данными, мини-язык позволяет извлечь практическое преимущество из того факта, что количество ошибок в программном обеспечении будет почти не зависеть от уровня используемого языка; использование более выразительных языков означает более короткие программы и меньшее количество ошибок.

Второй правильный путь — заметить, что один из файловых форматов разрабатываемой спецификации очень похож на мини-язык, т.е. в нем развиваются сложные структуры и подразумеваются действия в контролируемом приложении. Можно ли с помощью данного языка попытаться описать управляющую логику так же, как форматы данных? Если это так, то, возможно, настало время перевести управляющую логику из неявного вида в явный в языке спецификации.

Ошибочный путь к конструкции мини-языка — это растягивать путь к нему, постепенно добавляя заплатки и сложные функции. На этом пути файл спецификации содержит задатки более скрытой управляющей логики и более замысловатых специализированных структур до тех пор, пока незаметно не станет сложным уникальным языком. Несколько "легендарных кошмаров встают" на этом пути. Каждый Unix-гуру вздрогнет при упоминании конфигурационного файла sendmail.cf, связанного с почтовым транспортом sendmail.

К сожалению, большинство разработчиков создают свой первый мини-язык ошибочным способом и только позднее осознают, насколько он запутан. Как очистить мини-язык? Иногда ответ предполагает переосмысление конструкции всего приложения. Другим печально известным примером был редактор TECO, в котором возник первый макрос, а затем появились циклы и условные операторы по мере того, как программисты хотели использовать его для упаковки редактирующих подпрограмм с возрастающей сложностью. Созданная в результате уродливая конструкция была в конечном итоге исправлена путем переработки всего редактора, основанного на заранее продуманном языке. Так развивался Emacs Lisp (который рассматривается ниже).

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

В данной главе рассматриваются все виды мини-языков, обычно поддерживаемых в Unix. Кроме того, ниже определяются ситуации, в которых каждый из них представляет эффективное конструктивное решение. При этом данная глава не является исчерпывающим каталогом Unix-языков, а скорее направлена на выявления принципов конструирования, задействованных в структурировании приложений вокруг мини-языка. Универсальные языки программирования более подробно рассматриваются в главе 14.

Начать следует с небольшой классификации, которая поможет лучше понять дальнейший материал.

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг

Мини-«желтые страницы»

Из книги Музыкальный центр на компьютере автора Леонтьев Виталий Петрович

Мини-«желтые страницы» И напоследок, я приготовил приготовил для вас пару полезных ссылок. Совсем не обязательно, что эти ссылки, представляют лучшие сайты Сети – просто ими пользуюсь, в случае необходимости, лично я. Надеюсь, вы со временем составите собственную


Программа «Мини-Смета»

Из книги Домашний архитектор. Подготовка к ремонту и строительству на компьютере автора Булат Виталий

Программа «Мини-Смета» Еще одна разработка для составления смет при ремонте и строительстве – программа «Мини-Смета».Она бесплатная и предназначена для составления и печати строительных смет на ремонт квартир, офисов и пр.Отличительные особенности программы


4.9. Мини-панель инструментов

Из книги Word 2007.Популярный самоучитель автора Краинский И

4.9. Мини-панель инструментов Некоторые наиболее используемые команды форматирования, рассмотренные в данной главе, в Word 2007 вынесены на мини-панель инструментов. Она появляется справа от указателя мыши при выделении текста в виде полупрозрачной панели. При наведении на


8 Мини-языки: поиск выразительной нотации

Из книги Искусство программирования для Unix автора Реймонд Эрик Стивен

8 Мини-языки: поиск выразительной нотации Хорошая нотация обладает тонкостью и выразительностью, которая со временем делает ее почти похожей на живого учителя. The World of Mathematics (1956) —Бертранд Рассел (Bertrand Russell) Одним из самых последовательных результатов крупномасштабных


8.2. Применение мини-языков

Из книги Искусство программирования для Unix автора Реймонд Эрик Стивен

8.2. Применение мини-языков Разработка программ с помощью мини-языков затрагивает две отдельные проблемы. Одна из них заключается в том, чтобы уметь пользоваться имеющимися в инструментарии мини-языками и понимать, когда их можно применять такими, как они есть. Другая


8.3. Проектирование мини-языков

Из книги Основы объектно-ориентированного программирования автора Мейер Бертран

8.3. Проектирование мини-языков В каких ситуациях целесообразна разработка мини-языка? Выше отмечалось, что мини-языки предоставляют способ перемещения спецификаций проблем на более высокий уровень, а в нескольких учебных примерах это наблюдение подтверждалось фактами.


8.2. Применение мини-языков

Из книги Технология XSLT автора Валиков Алексей Николаевич

8.2. Применение мини-языков Разработка программ с помощью мини-языков затрагивает две отдельные проблемы. Одна из них заключается в том, чтобы уметь пользоваться имеющимися в инструментарии мини-языками и понимать, когда их можно применять такими, как они есть. Другая


8.3. Проектирование мини-языков

Из книги Быстрые деньги в Интернете [50 способов заработать, сидя дома у компьютера] автора Парабеллум Андрей Алексеевич

8.3. Проектирование мини-языков В каких ситуациях целесообразна разработка мини-языка? Выше отмечалось, что мини-языки предоставляют способ перемещения спецификаций проблем на более высокий уровень, а в нескольких учебных примерах это наблюдение подтверждалось фактами.


У8.3 Проектирование нотации

Из книги Linux автора Стахнов Алексей Александрович

У8.3 Проектирование нотации Предположим, вы часто используете сравнение в форме x.is_equal (y), и хотите упростить нотацию, используя преимущества инфиксной записи (применимой здесь, поскольку наша функция имеет один аргумент). Для инфиксного компонента используйте некоторый


Определение нотации

Из книги Социальные сети [Источники новых клиентов для бизнеса] автора Парабеллум Андрей Алексеевич

Определение нотации С точки зрения физической модели, XML-документы являются не более чем текстом. Содержимое документов и их разметка имеет исключительно текстовый вид. Вместе с тем, во многих случаях документы должны включать данные других форматов, например,


Мини-книга

Из книги Профессиональный поиск в Интернете автора Кутовенко Алексей


Приложение 3 Мини-HOWTO

Из книги iOS. Приемы программирования автора Нахавандипур Вандад

Приложение 3 Мини-HOWTO • The 3 Button Serial Mouse mini-HOWTO – настройка трехкнопснной последовательной мыши для работы в Linux.• 3D Graphics Modelling and Rendering mini-HOWTO – детальная инструкция по получению и установке программы графического рендеринга и трехмерного моделирования для дистрибутива Red


Мини-исследование ниши

Из книги Описание языка PascalABC.NET автора Коллектив РуБоард

Мини-исследование ниши Для более эффективного продвижения в социальной сети, будь то ВКонтакте, Facebook или Twitter, вам нужно лучше других удовлетворять человеческую потребность в информации. У вас должен быть самый качественный и уникальный контент, раскрывающий все аспекты


Поиск на научных сайтах с использованием платформы Flexum «Поиск по научным сайтам»

Из книги автора

Поиск на научных сайтах с использованием платформы Flexum «Поиск по научным сайтам» Тема научного поиска не прошла мимо разработчиков персональных поисковиков. Подробному рассказу о возможностях таких поисковых систем посвящена отдельная глава нашей книги (см. главу 6).


Мини-вариант задачника

Из книги автора

Мини-вариант задачника Часть заданий можно выполнять в мини-варианте задачника, не требующем приобретения лицензии и регистрации лицензированной копии задачника с помощью программы настройки PT4Setup). Задания, доступные для выполнения в мини-варианте, помечаются в окне