Автоматическая вычислимость

Развитие средств вычислений сопровождается все большей степенью автоматизации вычислений. Потребность в проведении сложных и длительных расчетов привела человека к необходимости создания и совершенствования механических устройств и машин для облегчения процесса вычисления. С древних времен известно устройство, которое в России называется «счеты». Счеты можно встретить и в наши дни. Счетные машины и арифмометры, создаваемые в XVI I-XIX вв., автоматизировали выполнение четырех арифметических действий. В середине XX столетия актуальные потребности науки и практики привели к созданию новой отрасли техники – конструированию и производству счетно-решающих устройств, т. е. приборов и машин для решения математических задач [11]. Применение счетно-решающих устройств становится массовым: они используются для быстрых расчетов в боевой обстановке, в навигации, в автоматизированном управлении сложными агрегатами и т. д. Однако производство счетно-решающих устройств было сложным и дорогим. Поэтому появление универсальных электронно-вычислительных машин (ЭВМ), умеющих автоматически выполнять программу, построенную для произвольного алгоритма, стало неизбежным.

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

Программа есть алгоритм, реализованный таким способом и в такой форме, что вычисление алгоритма проводится автоматически. По способу реализации различаются аппаратно реализованные программы (например, в виде интегральной схемы) и программы на языках программирования. Автоматическая вычислимость является неотъемлемым свойством программы.

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

Язык программирования определяет правила представления программы в виде текста в конечном алфавите символов. Описание языка определяет: типы данных, структуру памяти исполняемой программы, виды языковых конструкций программы, правила исполнения конструкции каждого вида и программы в целом. Память исполняемой программы состоит из сегментов. Сегмент памяти содержит набор переменных и соответствует независимо исполняемому фрагменту программы (например, процедуре). Языковая конструкция – независимая часть программы: оператор, выражение, описание процедуры и т. д. Всякая конструкция принадлежит некоторому виду. Для вида определяется единый способ изображения (кодирования) конструкций. Вид имеет несколько позиций, в которые помещаются подконструкции. Например, вид Оператор присваивания, изображаемый композицией: <Переменная> := <Выражение>, имеет две позиции для подконструкций, соответствующих понятиям <Переменная> и <Выражение>. Для большинства видов конструкций определен процесс исполнения, составляемый из процессов исполнения подконструкций и связующих действий. Данная концепция описания языка программирования более детально представлена в работе [8]. Отметим, что приведенное определение не годится для языка логического программирования, где исполнение определяется в форме логического вывода.

Автоматическое исполнение произвольной программы на языке программирования реализуется процессором. Процессор языка программирования является либо программой, реализованной аппаратно или на некотором другом языке программирования, либо виртуальным. Аппаратно реализованный процессор входит в состав компьютера и определяет язык системы команд компьютера. Примером реализации процессора на другом языке программирования является программа интерпретатора байткода для языка Java [5]. Процессор языка высокого уровня является виртуальным, представленным лишь в описании языка, и не существует в действительности. Язык реализуется посредством трансляции программы на другой язык, для которого существует реализованный процессор.