Фредерик П. Брукс

Вид материалаДокументы
Языки высокого уровня и интерактивное программирование
Языки высокого уровня.
Интерактивное программирование.
Глава 13. Целое и части
Шекспир, король генрих iv
Подобный материал:
1   ...   21   22   23   24   25   26   27   28   ...   48

Языки высокого уровня и интерактивное программирование


Сегодня два важнейших инструмента системного программирования - этоте, которые не использовались при разработке OS/360 почти десятилетие назад.Они до сих пор не очень широко используются, но все указывает на их мощь иприменимость. Это: а) языки высокого уровня и б) интерактивноепрограммирование. Я убежден, что только инертность и лень препятствуетповсеместному принятию этих инструментов, технические трудности более неявляются извинениями.

Языки высокого уровня. Главные основания для использования языковвысокого уровня - это производительность и скорость отладки.Производительность мы обсуждали раньше (глава 8). Имеющиеся данные, хотя инемногочисленные, указывают на многократный рост, а не на увеличение нанесколько процентов.

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

Меня эти возможности производительности и отладки ошеломляют. Мнетрудно представить себе систему программирования, которую я стал бысоздавать на языке ассемблера.

Ну, а как с классическими возражениями против этого инструмента? Ихтри: я не могу сделать то, что хочу; результирующая программа слишкомвелика; результирующая программа слишком медленна.

Что касается возможностей, возражение, я думаю, больше не состоятельно.Все свидетельствует в пользу того, что можно делать то, что хочется,потрудившись найти способ, но иногда для этого приходится изловчиться.3, 4

Что касается памяти, то новые оптимизирующие компиляторы начинаютпоказывать весьма удовлетворительные результаты, и их усовершенствованиепродолжается.

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

Какой язык высокого уровня следует использовать для системногопрограммирования? Сегодня единственный достойный кандидат - PL/I.6 У негоочень полный набор операторов; он соответствует окружению операционнойсреды; имеется целый ряд компиляторов с разными особенностями -интерактивных, быстрых, с улучшенной диагностикой, с высокой степеньюоптимизации. Лично я быстрее разрабатываю алгоритмы с помощью APL; затем яперевожу их в PL/I для соответствия системному окружению.

Интерактивное программирование. Одним из оправданий проекта МТИ MULTICSбыла его польза для создания систем программирования. MULTICS (и вслед затем TSS IBM) концептуально отличается от других интерактивных компьютерныхсистем именно в тех отношениях, которые необходимы для системногопрограммирования: многоуровневая система разделения доступа и защиты данныхи программ, интенсивное управление библиотеками и средства для совместнойработы пользователей терминалов. Я убежден, что во многих приложенияхинтерактивные системы никогда не заменят системы с обработкой пакетныхзаданий. Но я думаю, что создатели MULTICS привели самые убедительные доводыв ее пользу именно в применении к системному программированию.

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



Рис. 12.2 Сравнительная производительность при пакетном и диалоговом программировании

Помимо того, есть хорошие отзывы тех, кто разработал таким способомнебольшие системы или части систем. Единственные доступные мне данныеотносительно влияния на программирование больших систем исходят от ДжонаХарра из Bell Labs. Они представлены на рисунке 12.2. Эти цифры охватываютнаписание, ассемблирование и отладку программ. Первая программа является, восновном, управляющей. Остальные три - языковые трансляторы, редакторы ит.п. Данные Харра позволяют предположить, что средства интерактивной работы,по крайней мере, удваивают производительности системного программирования.8

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

Глава 13. Целое и части


Я духов вызывать могу из бездны.

И я могу, и каждый может,

Вопрос лишь, явятся ль на зов они?

ШЕКСПИР, КОРОЛЬ ГЕНРИХ IV

Среди современных кудесников, как и встарь, встречаются хвастуны: "Ямогу писать программы, которые управляют воздушным движением, перехватываютбаллистические ракеты, делают переводы по банковским счетам, управляютпроизводственными линиями". На что есть ответ: "И я могу, и каждый может, нобудет ли работать то, что ты напишешь?"

Как написать программу, которая будет работать? Как протестироватьпрограмму? И как объединить набор протестированных программ-компонентов впротестированную и надежную систему? Несколько раз мы уже касалисьсоответствующих приемов, давайте теперь рассмотрим их более систематически.