Цвет сверхдержавы - красный 4 Восхождение. часть 2 - Симонов Сергей
Шрифт:
Интервал:
Закладка:
Дистанционно управляемые манипуляторы уже использовались на АЭС и атомных производствах. Но там ими управляли люди, здесь же необходимо было переложить управление на ЭВМ. Программировать достаточно сложные движения манипулятора в машинных кодах было сущим мучением. Языки высокого уровня только начали появляться, и для задач управления подходили чуть более, чем никак.
Найти пути решения этой задачи взялись Сергей Алексеевич Лебедев и Алексей Андреевич Ляпунов. (АИ) Собравшись в начале 1959 года, они обсудили варианты и сошлись на том, что задачу управления манипулятором, а также, в будущем, управление различными робототехническими комплексами, надо решать при помощи электронной системы, способной если не самообучаться, то хотя бы легко объединять предварительно описанные элементарные действия в наборы более сложных действий, и обращаться к ним в виде простых, легко читаемых инструкций, максимально приближенных к обычному человеческому языку.
— Смотрите, Сергей Алексеич, вот, скажем, надо взять заготовку с лотка. Пусть даже лоток у нас наклонный и вибрирующий, и манипулятор берёт заготовку каждый раз с одного и того же места, — взялся объяснить свою идею Ляпунов. — То есть, манипулятору надо повернуться в определённое положение, опустить захват до нужной высоты, и схватить заготовку. Потом снова повернуться, вытянуть «руку» к станку, повернуть захват с заготовкой на заданный угол. То есть, нам нужен язык программирования, в котором, примерно как в АЛГОЛе, можно описать элементарные действия в виде подпрограмм, вызывая которые с параметрами значений углов поворота, можно составить основную управляющую программу. Желательно, чтобы она легко читалась человеком, то есть выглядела примерно так:
СНЯТЬ С ТОКАРНОГО СТАНКА ДЕТАЛЬ
ПОСТАВИТЬ ДЕТАЛЬ НА ФРЕЗЕРНЫЙ СТАНОК
ВЗЯТЬ ЗАГОТОВКУ
ПОСТАВИТЬ ЗАГОТОВКУ НА ТОКАРНЫЙ СТАНОК.
— И так далее. Понимаете? Чтобы такую программу понимал и мог составить каждый технолог, не имеющий понятия о всех этих чёртовых машинных кодах!
— Конечно, — согласился Лебедев. — Но на АЛГОЛе такую программу реализовать будет сложно.
— Тут нужен особый язык, которого ещё нет. Его ещё предстоит разработать.
Лебедев задумался, вспоминая. Что-то крутилось в памяти, он чувствовал, что решение есть, оно было прислано из 2012 года в составе полученного массива информации.
— Алексей Андреевич, а вот у вас толковый аспирант был, Ершов. Он перед аспирантурой у нас работал. Он сейчас где? — спросил академик.
— Ершов? Он сейчас заведует отделом автоматизации программирования в Вычислительном центре АН СССР.
— Дайте мне его телефончик, пожалуйста, — попросил Лебедев. — Я думаю, это тот человек, который нам нужен.
Сергей Алексеевич нашёл то, что искал. Александр Веденеев прислал вполне приличную подборку литературы по нескольким перспективным языкам, а также часть репозитория, содержащую не только бинарные пакеты, но и исходные коды. По ним в ИТМиВТ под руководством Лебедева уже переписали в машинных кодах ядро операционной системы (АИ, см. гл. 03-15). Сейчас перед учёными стояла похожая задача.
Андрей Петрович Ершов приехал к Лебедеву в ИТМиВТ через пару дней. Академик коротко пересказал ему свою недавнюю беседу с Ляпуновым.
— Вы ведь сейчас занимаетесь разработкой расширения АЛГОЛа? — спросил Лебедев.
— Не то что бы занимаемся... Пока это только предварительные намётки, — признался Ершов. — Идеи такие есть, но они, если честно, ещё не оформились во что-то конкретное.
— Сейчас правительство поставило перед нами задачу автоматизации производств, разработки программного обеспечения для робототехники. Есть одна зарубежная разработка, судя по всему, из числа закрытых, — сказал Лебедев. — Никакой открытой информации по ней нет, но чекисты постарались. Вот смотрите.
Он слегка повернул к Ершову стоящий у него на столе монитор терминала, и залогинился в БЭСМ-1М. Ершов с интересом смотрел на зелёные буквы и цифры, светящиеся на экране — ему обычно приходилось работать с машиной через телетайп, читая её ответы на бумажной ленте.
— Предположим, у нас есть язык, основные команды которого реализованы в виде коротких программ в машинных кодах, загружаемых, или даже непосредственно прошитых в постоянную память ЭВМ.
— Ого! То есть, программа не транслируется, а выполняется в режиме интерпретации, но со скоростью транслируемой программы? — тут же уточнил Ершов.
— Может и транслироваться, но задача трансляции в этом случае тоже упрощается, — ответил академик. — Ещё более важное свойство языка — можно комбинировать несколько операторов — «слов», в более сложное «слово», и сразу же обращаться к нему в программе. Вновь определённое слово заносится на вершину словаря языка. Смотрите.
Лебедев напечатал:
15 SPACES
На мониторе отобразилось Ok, перед которым было напечатано 15 пробелов.
— Теперь я выведу звёздочку, у неё код 42, — академик набрал на клавиатуре
42 EMIT
Нажал ввод и на экране появилась звёздочка «*»
— Чтобы каждый раз не писать, язык позволяет определить новые слова, — Лебедев набрал строчки:
: ЗВЕЗДА 42 EMIT ;
: ПОЛЕ 15 SPACES ;
: ЗВЕЗДЫ 0 DO ЗВЕЗДА LOOP ;
— Определение нового слова начинается с двоеточия и заканчивается точкой с запятой. Теперь, если ввести команду:
ПОЛЕ 3 ЗВЕЗДЫ
— Мы получим три звёздочки, отодвинутые от края экрана на 15 пробелов, — улыбнулся Лебедев. — Поняли принцип, Андрей Петрович?
Язык, который был нужен для решения задач, стоящих перед робототехникой, и который Лебедев показывал Ершову, назывался Forth. В 1959-м его ещё не существовало. Теперь предстояло адаптировать Forth к вновь разработанным советским ЭВМ.
(пример взят из книги Лео Броуди «Начальный курс программирования на языке Forth» и опробован на реализации gforth для Ubuntu, с русскими словами, приведёнными в тексте.)
— Принцип гениальный, Сергей Алексеич, — улыбнулся Ершов. — Этак можно будет по человечески написать 30 ПОВОРОТ ПО ЧАСОВОЙ, а не раскидывать значения в восьмеричном виде по регистрам и ячейкам памяти, да ещё адреса ячеек где-то хранить... Только вот надо бы основной словарь языка тоже перевести на русский.
— Да хоть на малаялам, просто обозначим слова основного словаря цифровыми кодами, а в конкретной локализации эти коды будут вызываться мнемониками на русском, английском, или вообще на суахили, — усмехнулся Лебедев. — Займётесь? Исходники я дам.
— Да с удовольствием! — обрадовался Ершов.
— На мехмате МГУ под руководством Николая Петровича Брусенцова недавно сделали очень необычную машину «Сетунь» с троичной логикой. ЭВМ использует ферритовые логические элементы, и получилась на редкость дешёвой и компактной, — продолжил Лебедев. — Я собираюсь рекомендовать её правительству для серийного производства, в первую очередь, в качестве управляющей машины и учебной ЭВМ для ВУЗов. Надо в первую очередь реализовать Forth для этой машины, а затем — для управляющей ЭВМ УМ-1НХ, которую разрабатывают в Зеленограде товарищи Старос и Берг. Потом будем внедрять его и на других наших ЭВМ, но «Сетунь» и УМ-1НХ — в первую очередь.
(В 1980 г Н.П. Брусенцовым был разработан язык ДССП, напоминающий несколько усложнённый Forth http://forth-j.narod.ru/dssp.htm)
— Да мне это самому интересно, — ответил Ершов. — Ведь, если подумать, то машина, работающая на таком языке, может сама себя программировать. В смысле, не просто транслировать программу в машинные коды автоматически, а определять новые слова в процессе работы и тут же их использовать. Это же один из путей создания искусственного интеллекта.
— Искусственный интеллект — проблема весьма интересная, но ей мы займёмся позже, — слегка охладил его Лебедев. — Сейчас надо сосредоточить все усилия на управляющих ЭВМ для промышленности.
Ершов с энтузиазмом взялся за дело. Основной словарь Forth был переведён на русский язык, ещё некоторое время ушло на адаптацию языка к машинным кодам ЭВМ «Сетунь». Для скорости вначале реализовали не все слова основного словаря, а лишь те, что были необходимы для управления манипулятором, рассчитывая дополнить словарь в следующей версии.
Параллельно несколько программистов писали на Forth программу для управления манипулятором. Наконец её впервые запустили на реальной ЭВМ. Две недели работали в три смены, вылавливая ошибки. Затем подключили к «Сетуни» манипулятор. Архитектура языка сильно упрощала отладку. Каждую команду, каждое движение можно было отладить в интерактивном режиме, обращаясь при этом напрямую к процедурам, написанным в машинных кодах. Уже отлаженные движения в виде новых «слов» Forth добавлялись в основную программу. Каждый день манипулятор «умнел», «разучивая» новые движения и обретая новые возможности. Наконец, механическая «рука» начала уверенно брать с лотка подачи заготовки и устанавливать их в патрон токарного станка. Это была победа.