Средства разработки приложений



              

Развитие без отчетливой цели - часть 2


Переменная «.» содержала адрес, указанный при вызове макроса, а переменная «+» – этот исходный адрес, увеличенный на число байт, которые занимали все предшествующие символы форматирования. Такие макросы поддерживались вместе с исходным кодом ядра.



Рис. 3. Отладка структуры proc в SunOS 4, около 1984 г.

Более чем на 10 лет позже, в 1997 г. я работал в Sun над системой, которая стала Solaris 7. Это было наше первое 64-разрядное ядро, но для отладки ядра был доступен только все тот же adb, что и в 1984 г., и в нашей базе исходных кодов теперь содержались сотни полезных файлов с макросами. К сожалению, было практически невозможно портировать adb с 32-разрядной на 64-разрядную архитектуру, так что казалось, что пришло время для разработки нового, более современного отладчика с многими более развитыми возможностями.

Когда я размышлял, как лучше подойти к решению этой проблемы, мне пришло в голову, что, несмотря наличие у adb машинно-зависимого, неструктурированного кода, ключевой особенностью этого отладчика является его синтаксис, который глубоко проник в умы и стиль работы всех наших наиболее опытных и эффективных инженеров. (Как кто-то метко заметил в то время, «он на кончиках наших пальцев».) Поэтому я предложил создать новый модульный отладчик (mdb), поддерживающий API для развитой отладки ядра и другие современные возможности, но сохраняющий точную обратную совместимость с существующим синтаксисов и макросами. Усложненные новые конструкции добавлялись путем введения нового префикса («::»), так что они не подрывали существующий синтаксис (например, появилась конструкция «::findleaks» для проверки отсутствия утечки памяти в ядре). Полный синтаксис был должным образом закодирован как парсер yacc. От использования файлов-макросов постепенно отказались в пользу отладочной информации, генерируемой компиляторами, но синтаксис «$<» был оставлен в качестве алиаса. Десять лет спустя mdb остается стандартным инструментом «посмертной» отладки ядра OpenSolaris и расширяется сотнями программистов.

Эта история об отладчиках иллюстрирует ту мысль, что небольшие встраиваемые специализированные языки могут развиваться, по существу, случайным образом, без наличия отчетливой цели, согласованной грамматики или парсера и даже названия, и, тем не менее, выживать и разрастаться в средах производственных операционных систем в течение более чем 40 лет. За этот же период времени возникли и ушли в небытие многие массовые языки (Algol, Ada, Pascal, Cobol и т.д.). По сути дела, этот язык отладчиков выжил по одной причине: он позволял точно кодировать задачу, выполнение которой требовалось пользователям, и поэтому был им близок. Взять адрес, получить содержимое соответствующей ячейки памяти, найти следующий адрес, перейти к следующей интересующей ячейке, получить ее содержимое и т.д. Для специализированных языков глубокая связь с некоторой задачей и соответствующим сообществом пользователей часто является более ценной, чем отчетливая цель и элегантный синтаксис.




Содержание  Назад  Вперед