9.6 Влияние стековых машин на вычислительный процесс
==181
Мы выяснили, что в терминах числа инструкций, исполняемых за единицу времени, стековые машины могут быть не менее производительны, чем регистровые компьютеры, проигрывают им в условиях использования большого числа локальных переменных или слабого использования вложенных процедур, но выигрывают в приложениях реального времени. Выяснять какой компьютер лучше - RISC, CISC или стековый - неправильно. Каждой архитектуре найдётся место среди множества задач. Стековые машины не очень подходят в качестве основного процессора для рынка рабочих станций и миникомпьютеров. По этой причине они получают меньше внимания, чем заслуживают, но там, где они хорошо подходят, они работают.
Если немного подумать, то можно понять, что использование для решения некоторых задач не стековых процессоров просто дань привычке [* кто первый встал, того и тапки ] . Рассмотрим основные области, в которых стековые машины хорошо работают: программы с высоким уровнем модульности и множеством глубоко вложенных процедур; программы, передающие процедурам небольшое число параметров, чтобы скрыть детали функционирования; программы, активно использующие маленькие функции, чтобы уменьшить размер и сложность кода; программы, которые легко отлаживать из-за небольших размеров составных частей; программы, предоставляющие унифицированный интерфейс для всех уровней абстракции от высокоуровневых модулей до отдельных инструкций. Все указанные характеристики желательны, но, к сожалению, редко теперь практикуются. Использование стековых машин могло бы помочь улучшению ситуации.
Возможно, что именно знания о сильных сторонах регистровых машин формирует параметры традиционных языков программирования и аппаратуры. Редкие вызовы подпрограмм обуславливаются большими временными затратами. Заметная длительность процедур не требует от синтаксиса языка упрощения и ускорения их создания и вызова. Этим обуславливаются различные объёмы заголовков, списки параметров, описания типов и т.п. Методология сопровождения проекта часто требует отдельного документа и описания на каждую вновь создаваемую процедуру. Таким образом, усложнение использования маленьких процедур заставляет использовать большие, возвращая нас в исходную точку.
Стековые машины показывают путь выхода из этого порочного круга. Вызовы процедур несложны и незатратны. Языки, подобные FORTH, требуют минимальных усилий на создание новой процедуры и предоставляют среду, поощряющую написание и тестирование модульного, легко отлаживаемого кода. Что на самом деле нужно - так это создание новых языков, хорошо подходящих для машин, исполняющих языки высокого уровня вообще ( Chen et al. 1980 ), и стековых машин в частности. В реальности можно было бы ожидать появления расширений и вариаций традиционных языков, включающих управляющие структуры, которые лучше используют особенности аппаратуры стековых машин. [* Мечты, мечты, где ваша сладость? ]
==182
Регистровые машины могут предложить производительность в награду за плохо структурированные программы, часто ценой ухудшения сопровождаемости, усложнения отладки и увеличения размера. Поощряя программистов за написание хорошо структурированного кода, стековые компьютеры положительно влияют на практику программирования. Это, в свою очередь, воздействует на эволюцию языков программирования, улучшая пути создания, сопровождения и выполнения программ.
==182