И с ЭВМ так же было. Прежде всего ЭВМ научилась говорить. При этом ей предложили сразу несколько языков на выбор, а подчас предлагалось пользоваться несколькими языками одновременно. Каждому языку соответствовала своя программа-транслятор, которая, кроме основной функции собственно перевода с одного языка на другой, выполняла много других. В их числе уже упоминавшееся выявление ошибок, воспринятие текста, вводимого в машину (это делалось разными способами), а также подготовка и вывод текстов, предназначенных для пользования.
Постепенно стало ясно, что совмещать все функции в одной программе-трансляторе нецелесообразно. Почему? Хотя бы по той простой причине, что если машина оперирует сразу с несколькими языками, то и трансляторов в ее памяти хранится несколько, а в определенной части своих функций они дублируют друг друга. Было решено сохранить за трансляторами основную функцию перевода и частично контроля. Кроме того, появилось много разнообразных программ — редакторов, компоновщиков, организаторов, с помощью которых несколько фрагментов, написанных на разных языках, объединялись в единый последовательный текст (одну программу).
Сейчас имеет смысл отметить такую очень важную особенность. Большинство алгоритмических языков являются открытыми в том смысле, что их словарный состав непрерывно пополняется, как, собственно, это и происходит с естественными языками. Что это означает применительно к алгоритмическим языкам? Если вы написали некую программу, например программу для игры в «кошки-мышки», и она оказалась удачной, а главное, есть основания полагать, что она понадобится еще много раз, то эту программу можно разместить в памяти машины на постоянное жительство. Вызов ее из памяти и приведение в действие осуществляются по специальному слову, которое вводится в состав языка, такое слово получило название макрорасширения.
По мере работы ЭВМ количество макрорасширений увеличивается, растет объем библиотеки программ. Возникает потребность организовать эту библиотеку точно так же, как это делается с обычными книжными библиотеками. В памяти машины размещают каталог, в котором описания программы располагаются в определенном порядке. Каждое описание содержит назначение программы, язык, на котором она написана, указание по приведению ее в действие и другие данные. При достаточно большом количестве программ подобное каталожное хозяйство оказывается сложным и представляет собой самостоятельную, весьма важную систему ЭВМ.
В одной из предыдущих бесед мы говорили, что большие ЭВМ третьего поколения способны обслуживать одновременно несколько коллективов пользователей. Можно сделать даже более сильное заявление. Один человек-пользователь не в силах загрузить работой ЭВМ третьего поколения, относящуюся к классу больших. Что такое большая ЭВМ? Это мы уточним несколько позже. Так вот, к началу 70-х годов отмеченное обстоятельство представляло собой весьма крупную проблему. В чем же дело? Час работы большой ЭВМ стоит дорого (у нас — порядка 50–60 рублей), причем эти деньги тратятся независимо от того, работает кто-то с ЭВМ или нет. Отсюда и возникла идея организации режима разделения времени, то есть организации одновременной работы ЭВМ с несколькими пользователями.
Владельцев больших ЭВМ беспокоило то обстоятельство, что в ночные часы не удается загрузить ЭВМ работой, так как пользователи предпочитают ночью спать. Между тем выход из положения нашелся. В чем он состоял? Ночью предоставлять машинное время пользователям, проживающим в других часовых поясах. К примеру, вычислительный центр, расположенный в Калифорнии, обслуживал японских пользователей, причем оказалось экономически оправданным даже применение для этих целей спутниковых каналов связи.
Здесь напрашивается весьма существенное уточнение. Говоря о языках, мы отметили, что любой язык заменяет конкретные номера ячеек памяти, хранящих операнды, специальными словами-идентификаторами. Таким образом, возникло разделение устройств ЭВМ на физические к логические. Физическая ячейка памяти — это совершенно конкретная ячейка, имеющая, например, порядковый номер 77 500 и расположенная в интегральной схеме на панели запоминающего устройства ЭВМ десятой справа во втором ряду. Эта ячейка обозначается последовательностью символов, например ХУ2, которая и представляет собой идентификатор, или логическую ячейку памяти. По мере развития ЭВМ та же идея начала применяться и к другим устройствам. Автомат, оперирующий с кредитными карточками, представляет собой конкретное физическое устройство. Но в ЭВМ ему присвоен определенный код, и этот код представляет собой логический автомат для чтения кредитных карточек.