Читать «Архитектура компьютера» онлайн - страница 7

Эндрю Таненбаум

Трансляция и интерпретация целесообразны лишь в том случае, если языки Я0 и Я1 не слишком отличаются друг от друга. Часто это значит, что язык Я1 хотя и лучше, чем Я0, но все же далек от идеала. Возможно, это несколько обескураживает в свете первоначальной цели создания языка Я1 — освободить программиста от бремени написания программ на языке, понятным компьютеру, но малоприспособленном для человека. Однако ситуация не так безнадежна.

Очевидное решение проблемы — создание еще одного набора команд, которые в большей степени ориентированы на человека и в меньшей степени на компьютер, чем Я1. Этот третий набор команд также формирует язык, который мы будем называть Я2, а соответствующую виртуальную машину — М2. Человек может писать программы на языке Я2, как будто виртуальная машина для работы с машинным языком Я2 действительно существует. Такие программы могут либо транслироваться на язык Я1, либо исполняться интерпретатором, написанным на языке Я1.

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

Уровень пУровень 3Уровень 2Уровень 1Уровень О

Программы на языке Яп либо интерпретируются программой-интерпретатором, работающей на машине более низкого уровня, либо транслируются на машинный язык машины более низкого уровня

Программы на языке Я2 либо интерпретируются программами-интерпретаторами, работающими на машине М1 или МО, либо транслируются на Я1 или ЯО

Программы на языке Я1 либо интерпретируются программой-интерпретатором, работающей на машине МО, либо транслируются на ЯО

Программы ЯО непосредственно выполняются электронными схемами

Рис. 1.1. Многоуровневая машина

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