История развития программного обеспечения

Язык Форт в СССР и России

Язык Форт стал известным в нашей стране начиная с конца 70-х годов. Возникнув в США – первая официальная публикация появилась в 1974 г. [1] – этот язык вскоре получил заметное признание как быстрое и эффективное средство создания содержательных приложений для микропроцессорных устройств, где особенно важна была максимальная экономия оперативной памяти. В США была вскоре создана «Форт-группа по интересам» [2], действующая и поныне, поставившая своей задачей стандартизовать этот язык и популяризировать его.

В то время шло бурное развитие микропроцессорной техники, появились первые отечественные микропроцессоры, одним из которых был К580ИК80 – аналог процессора Intel 8080. В Вычислительном центре Ленинградского университета тогда образовалась группа по созданию программного обеспечения (ПО) для микроЭВМ на базе этого микропроцессора, которой руководил Б.А. Кацев. Обладая замечательным организаторским талантом и известностью в промышленности, он привлек к этой работе талантливых молодых сотрудников ВЦ. Были заключены договоры с московскими отраслевыми институтами НИЦЭВТ и НИИ СЧЕТМАШ на разработку ПО для создаваемых ими терминалов на базе процессора К580ИК80. Основными вычислительными мощностями ВЦ в то время были машина ЕС ЭВМ 1030 и уже выводимые из эксплуатации М-220 и М-222; поэтому для отладки разрабатываемого ПО было решено сделать на ЕС ЭВМ кросс-систему для К580, включавшую ассемблер и эмулятор кода.

Разработка кросс-ассемблера велась на языке PL/I и заняла больше полугода. Исходный код по тем представлениям оказался огромен – более тысячи строк на PL/I. Для его трансляции приходилось снимать все параллельно идущие пакетные задания и отдавать весь резерв оперативной памяти (а всего ее было, кажется, 512К) транслятору с PL/I.

Эмблема Форт-группы по интересам

Эмблема Форт-группы по интересам

Специальный выпуск журнала BYTE
(август 1980) о языке Форт

Специальный выпуск журнала BYTE (август 1980) о языке Форт

В это время нам попался экземпляр журнала (кажется, это был Dr.Dobb's Journal), в котором был приведен листинг ассемблера для Intel 8080 на языке Форт, состоявший всего из 54 строчек текста, треть которого занимала таблица знакомых нам мнемоник ассемблерных команд. При этом авторы утверждали, что это полный ассемблер, охватывающий все режимы и особенности команд Intel 8080! Было потрачено немало времени на выяснение того, как это сделано (через конструкции CREATE DOES>), но как только мы это поняли, то сразу оценили всю мощь и красоту этого подхода. Разумеется, никаких других текстов о Форте у нас в этот момент не было и надо было только понять, как указанная последовательность Форт-слов может работать именно так, как требуется. Только впоследствии мы узнали, что в журнале BYTE за 1980 г., целый выпуск которого был посвящен этому языку [3], было опубликовано много ярких и красивых примеров его использования.

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

:VARIABLE CREATE 0 , DOES>; : CONSTANT CREATE , DOES> @;

После того, как мы поняли, что даже базовые структуры управления – ветвления и циклы – точно так же легко и просто выражаются через средства ядра Форта, мы стали создавать и пробовать весьма экзотические в то время структуры управления: переключатели, механизм возвратов, возбуждение и подхват исключений и другие, основанные на идее векторного поля кода и манипуляциях с адресом возврата.

Сразу стали делать реализацию Форта на ЕС ЭВМ – единственной доступной тогда машине. Реализация была сделана на ассемблере и работала замечательно быстро. Через нее уже раскруткой была получена реализация Форта на самом Форте, исходный текст которой вошел потом в виде приложения в первую крупную монографию о нем на русском языке [4]. Параллельно с этим была сделана реализация Форта на дисплейном комплексе ЕС-7970 [5], на котором затем был написан ряд приложений для него.

Начались работы по реализации сложных проектов на языке Форт. Один из них вошел в кандидатскую диссертацию В.А. Кириллина «Инструментальная система разработки языковых средств микропроцессорной техники», защищенную в 1985 г. Там, в частности, были реализованы переносимые трансляторы с языков Паскаль и Бейсик, работавшие на дисплейном комплексе ЕС-7970, для которого Форт-система уже была сделана. Дальнейшей популяризации Форта активно содействовал И.В. Романовский [6].

Основной журнал по языку Форт,
выходивший в США с 1983 г.

Основной журнал по языку Форт, выходивший в США с 1983 г.

Из соответствующих технических журналов были известны только названия: Byte, Datamation, Dr.Dobb's Journal, Forth Dimensions. Еще мы узнали о ежегодных конференциях по языку Форт в университете г. Рочестера, штат Нью-Йорк, которые проводил Institute for Applied Forth Research, Inc., но получить эти журналы или попасть на эту конференцию было совершенно нереально. Оказалось, что с 1983 г. этот институт издает журнал Journal of Forth Applications and Research, что в рамках Ассоциации по вычислительной технике (ACM – Association for Computing Machinery) существует SIGForth (Special Interest Group) по языку Форт со своими SIGForth Bulletin и Newsletters, а в Европе проводятся ежегодные конференции по Форту. А.Л. Сахаров, работавший тогда в Библиотеке АН СССР, в течение нескольких лет включал журнал Journal of Forth Applications and Research в постоянную подписку БАН.

Обнаружилось, что в Институте кибернетики Академии наук Эстонской ССР есть группа, занимающаяся разработкой Фортпроцессора [7] по специальному заказу, и один из ведущих разработчиков – А.Г. Астановский учился в Ленинграде, так что нашлись общие связи и интересы. Усилиями этой группы несколько публикаций по нашим разработкам вошли в тематический сборник «Программирование микропроцессорной техники», регулярно издававшийся этим институтом; в 1982 г. прошла конференция по Форту, организованная М. Томбаком на базе Тартуского университета.

Примерно в 1980 г. в рамках Комиссии ГКНТ по технологии программирования, руководимой И.В. Вельбицким из Института кибернетики АН УССР, была создана Рабочая группа по микропроцессорной технике (руководитель Р.К. Рауд из Института кибернетики АН ЭССР). В этой группе выделилось отдельное направление по языку Форт, которое активно поддерживали и развивали В.П. Котляров, С.Н. Баранов, Г.М. Погосянц и А.Б. Либеров.

Первая отечественная монография
по языку Форт

Первая отечественная монография по языку Форт

Выход уже упомянутой монографии [4], написанной на базе накопленного опыта и разработанных Форт-систем, стал заметной вехой на пути развития Форта в СССР. Первый тираж составил 50 тыс. экземпляров, но затем издательство получило столько запросов с мест, что пришлось допечатать еще 50 тысяч – редкий случай в практике! К этому времени уже был известен ряд отечественных Форт-систем на базе стандартов fig-Forth и Forth-83: Форт-СМ (С.Б. Кацев, И.А. Шендриков), Форт-Тарту (Р.В. Вяйнасте, А.Е. Юурик), ФортК580 (В.А. Кириллин, А.А. Клубович, Н.Р. Ноздрунов), Форт-ЕС (С.Н. Баранов), Форт-Искра-226 (Г.В. Лезин), Форт-М6000 (В.Н. Патрышев), Форт-БЭСМ-6 (И.А. Агамирзян), Форт-Эльбрус (А.Е. Соловьев), что ясно говорит о большом интересе к этому языку. В монографии последовательно излагались принципы Форта и приводился исходной текст форт-системы с ядром для системы команд ЕС ЭВМ. Впоследствии, с появлением персональных ЭВМ были сделаны и получили распространение отечественные форт-системы для IBM PC под управлением MS-DOS – Астро-Форт (И.Р. Агамирзян) и БетаФорт (С.Н. Баранов).

На волне перестройки в апреле 1988 г. усилиями Б.А. Кацева и Н.Р. Ноздрунова в Ленинграде был создан кооператив «Форт-Инфо» – один из первых тогда в городе кооперативов в области программирования и вычислительной техники. Его ядро составили тогдашние сотрудники лаборатории системного программирования математико-механического факультета Ленинградского университета. Их непосредственной задачей стала разработка и развитие новых программных технологий на базе языка Форт. Заметным результатом первых трех лет работы кооператива стало создание самого быстрого в СССР микропроцессора, 16-разрядного Форт-процессора Дофин-1610 для систем управления и систем реального времени. Процессор превосходил известный в то время аналог i8086 по быстродействию в 50 раз и выпускался опытными партиями в НПО «Интеграл», г.Минск. Впоследствии кооператив был преобразован в инновационно-техническую фирму «Технофорт».

Волею случая, упомянутая выше монография [4] была сразу же замечена активистами Форта в США, и один из ее авторов С.Н. Баранов получил приглашение приехать в США на очередную рочестерскую конференцию по языку Форт летом 1989 года. Было много чисто технических трудностей по организации этой поездки, которая оформлялась через Президиум АН СССР за счет принимающей стороны, но, тем не менее, это произошло. В течение нескольких последующих лет благодаря налаженным и постоянно укрепляемым контактам советские «фортисты» смогли участвовать в ежегодных конференциях в США и Европе с докладами и демонстрациями своих достижений, обмениваясь опытом и новыми идеями в этой области с мировой «Форт-элитой». В 1992 г. при поддержке кооператива «Форт-Инфо» даже удалось привезти в Рочестер группу студентов ЛГУ, которые потом были трудоустроены на летнюю практику в несколько американских фирм, представители которых участвовали в конференциях – совершенно новый опыт в этот переходный период нашей истории! Некоторые компании-разработчики Форт-продуктов в США и Европе – MMS, MPE, DeltaT, Silicon Composers и другие – проявили явный интерес к «русскому опыту» и установили партнерство с нашими организациями и специалистами.

Участники Рочестерской конференции 1989 г.

Участники Рочестерской конференции 1989 г.

Участники Рочестерской конференции 1989 г.

Участники Рочестерской конференции 1989 г.

Тогда же, при поддержке кооператива «ФортИнфо», был организован ряд конференций по языку Форт в СССР, как в рамках собраний Рабочей группы по микропроцессорной технике, так и в качестве самостоятельных мероприятий. Состоялись ответные визиты директора Forth Institute г-на Л. Форсли и проф. Н. Солнцева из университета Мак-Мастер (Канада) в Ленинград, Москву и Новосибирск. В 1991 г. вышел первый номер журнала «ФОРТ в исследованиях и разработках», к сожалению, не получивший продолжения. В 1996 и 1999 гг. очередные 12-я [8] и 15-я [9] европейские конференции по Форту EuroFORTH прошли в СанктПетербурге в гостинице «Русь» при содействии СПИИРАН. Ведущую роль их в организации и проведении взяли на себя его сотрудники С.Н. Баранов, И.П. Поднозова, Е.М. Игнашкина, М.Ю. Колодин и М.Л. Гасаненко, защитивший в 1996 г. кандидатскую диссертацию «Механизмы исполнения кода в открытых расширяемых системах на основе шитого кода» и продолжавший работать в этом направлении [10].

В 1991 г. в Ленинграде было создано местное отделение Ассоциации вычислительной техники по языку Форт, проработавшее несколько лет, в течение которых в отделение поступали полные комплекты всех периодических научно-технический изданий этой ассоциации (свыше 30 наименований). Эти журналы затем сдавались в Библиотеку Академии наук, что было важным подспорьем для поддержания полноты фондов БАН при практически прекратившемся бюджетном финансировании на приобретение научно-технической литературы.

Сертификат об учреждении отделения ACM по
языку Форт в Ленинграде

Сертификат об учреждении отделения ACM по языку Форт в Ленинграде

В это же время стали появляться переводные книги о языке Форт и его практических применениях ([11], [12], [13]), стимулировавшие дальнейшие разработки в этой области. Например, познакомившись с аппаратной реализацией клеточных автоматов, над которой Т. Тоффоли и Н. Марголус работали в MIT [12], С.Н. Баранов сделал ее программную реализацию непосредственно на своей системе Бета-Форт. За счет тщательного программирования основного ядра получившаяся реализация Beta-CAM [14] вполне успешно работала на самой первой IBM PC с процессором i8080, что поразило упомянутых специалистов, когда они увидели ее демонстрацию, и они пригласили автора посетить MIT сразу после Рочестерской конференции 1991 г. Аналогично, А.Л. Кутузов разработал на базе подхода К. Таунсенда [13] экспертную систему для IBM PC, которая затем использовалась в учебном процессе в СПбГПУ.

В 1993 г. тиражом 50 тыс. экземпляров вышла монография Ю.А. Семенова о языке Форт [15], в которой обобщался опыт работ в этой области в ИТЭФ (в настоящее время – Федеральное государственное унитарное предприятие «Государственный научный центр Российской Федерации – Институт теоретической и экспериментальной физики»). Ее особо ценным для разработчиков качеством были приложения, содержащие, в частности, исходный текст Форт-интерпретатора для процессора Intel 80286 на макроассемблере MASM, реализующий стандарт fig-Forth, и ряда других программ.

Распад СССР и переход на рыночные отношения внесли серьезные коррективы в отношение к Форту. Энтузиастов и знатоков Форта поубавилось, поскольку основная масса программистов стала работать в компаниях, где основными языками были Си/Си++ и Джава. Интересно отметить, что Джава использует ту же, что и Форт, двухуровневую структуру кода: исходный текст переводится в промежуточное представление (байт-код), которое затем интерпретируется виртуальной машиной. Особенность Форта, позволившая ему быстро занять свою нишу в производстве ПО для микропроцессорной технике – прямой доступ ко всем ресурсам процессора – в дальнейшем оказалась одновременно и его уязвимостью в отношении безопасности создаваемого ПО. Идеология Форта – все можно – открывает доступ к самомодификации кода и проникновению программных вирусов, а также снижает возможности непосредственного переноса кода на другие платформы. Язык Джава отчасти решает эту проблему тем, что не разрешает непосредственно исполнять команды процессора, защищая тем самым свое «ассемблерное ядро» от непосредственного доступа со стороны исполняемого кода достаточно сложным механизмом сертификации своих приложений. В Форте же нужна особая самодисциплина при программировании.

Тем не менее, работы по Форту в стране и в мире продолжали развиваться. Важным аргументом в пользу его принятия промышленностью стало опубликование в 1994 г. ANSI-стандарта языка Форт [16], заменившего собой предыдущий неофициальный стандарт Форт-83. Новый стандарт явился результатом длительной работы Технического комитета X3J14, который снял прежние ограничения на 16-разрядность адресного пространства и ввел необходимую систематизацию в структуру языка. С начала 2000-х годов ведется обновление этого стандарта, осуществляемое группой энтузиастов и компаний, продолжающих использовать этот язык. Их форумом служат ежегодные европейские конференции EuroForth, проводимые с 1985 г. Очередная 27-я конференция состоится 23–25 сентября 2011 г. в Вене на базе Венского технического университета [17].

Интересно, что один из проектов по реализации ANSI-стандарта языка Форт выполнялся уже в 1994–1995 гг. по заказу компании Моторола в ЗАО «ИДУ», созданном на базе СПИИРАН и возглавлявшемся тогда С.Н. Барановым. В этом проекте участвовали, в частности, В.А. Кириллин, А.А. Клубович и Д.С. Преображенский, ставшие впоследствии авторитетными специалистами по языку Джава и его реализациям, а куратором проекта со стороны Моторолы был А.Л. Сахаров, уехавший ранее в США и получивший там работу.

В конце 80-х годов С.Н. Барановым была разработана технология переноса больших программ на другие платформы на базе языка Форт, включавшая автоматизированное построение транслятора с входного языка по записи его грамматики регулярными выражениями, которые рассматривались как текст на языке Форт [18]. В частности, так была успешно перенесена на персональную ЭВМ IBM PC известная система символьных вычислений SAC-2, написанная на специальном языке ALDES. За счет дополнительного контроля типов, включенного в систему переноса, были даже выявлены две ошибки в первоначальных алгоритмах библиотеки SAC-2, остававшиеся незамеченными в течение многих лет ее использования на больших ЭВМ. По результатам этой и смежных работ С.Н. Баранов защитил в 1990 г. докторскую диссертацию «Перенос и реализация больших пакетов компьютерной алгебры на базе Форт-технологии».

Важным достижением следует также считать применение Форт-технологии в школьной информатике. В начале 90-х годов по заданию Санкт-Петербургского филиала Института новых технологий была выполнена реализация полного языка Лого для отечественной школьной ЭВМ «Электроника УКНЦ» [19], некоторое время использовавшаяся в ряде школ Санкт-Петербурга и Москвы до массового перехода на персональные ЭВМ на базе IBM PC. Благодаря особенностям Форта, вся машинная графика работала замечательно быстро, несмотря на ограниченные возможности процессора и малый объем памяти. Для минимизации требований к оперативной памяти был разработан специальный механизм отчуждения готового программного продукта от инструментальной Форт-системы [20], в которой он разрабатывался. Исходя из главного слова приложения (аналога функции main в Си), из ядра Форта выбирались только те слова, на которые обнаруживались ссылки в процессе автоматического построения их транзитивного замыкания. Более того, если не предполагался динамический поиск слов по имени в процессе работы приложения, то из выбранных словарных статей удалялся заголовок, так что в отчужденном продукте оставались «усеченные» словарные статьи, состоящие только из поля кода и поля параметров. В результате объем приложения получался замечательно малым – примерно 8К для полной реализации языка Лого.

Интересные разработки в том же направлении интерпретативных языков программирования вел в Академгородке Новосибирска А.А. Берс, предложивший понятие «рабочая смесь» [21], ставшего концептуальной основой при разработке ПО рабочей станции «Мрамор». Представленная им в 1993 г. к защите кандидатская диссертация по результатам этих исследований была единодушно оценена оппонентами и членами совета как докторская, защита которой состоялась в 1994 г. в Москве. По совету и при поддержке Андрея Александровича был сделан подробный анализ феномена Форта, опубликованный в издаваемом Институтом систем информатики СО РАН сборнике [22].

Подводя итог, можно сказать, что вот уже более 30 лет Форт продолжает активно существовать и привлекать талантливых программистов своими возможностями «делать все» очень качественно, малыми силами и достаточно быстро. Несмотря на сократившуюся долю в приложениях для встроенных применений, он попрежнему находит своих сторонников и приверженцев, позволяющих им успешно вести свои разработки в современных рыночных условиях.

Список литературы

  1. Moore C.H. FORTH: A New Way to Program a Mini-Computer. – Astronomy and Astrophysics Supplement, 1974, vol.5. – P.497–511
  2. Forth Interest Grouphttp://www.forth.org/index.html
  3. BYTE, Vol.5, No 8, August, 1980
  4. Баранов С.Н., Ноздрунов Н.Р. Язык Форт и его реализации. – Л.: Машиностроение, Ленинградское отделение, 1988. – 156 с.
  5. Баранов С.Н., Кириллин В.А., Ноздрунов Н.Р. Реализация языка Форт на дисплейном комплексе ЕС-7970. – В кн.: Программирование микропроцессорной техники. Таллин: Институт кибернетики АН ЭССР, 1984. – С. 41-49
  6. Бураго А.Ю., Кириллин В.А., Романовский И.В. ФОРТ – язык для микропроцессоров. Л.: Знание, 1989. – 36 с.
  7. Астановский А.Г., Ломунов В.Н. Процессор, ориентированный на язык Форт. – В кн.: Программирование микропроцессорной техники. Таллин: Институт кибернетики АН ЭССР, 1984. – С. 50-67
  8. EuroForth 1996. – http://www.forth.org/bournemouth/euro/index.html
  9. EuroForth 1999. – http://www.forth.org.ru/~mlg/ef99/EF99repo.html
  10. Гасаненко М.Л. Одностековая реализация бэктрекинга для языка Форт. – Труды СПИИРАН. 2002. Вып. 1. Т. 1. СПб.: Наука, 2002. – С. 211–223
  11. Броуди Л. Начальный курс программирования на языке Форт. – М.: Финансы и статистика, 1990. – 352 с.
  12. Тоффоли Т., Марголус Н. Машины клеточных автоматов. – М.: Мир, 1991. – 280 с.
  13. Таунсенд К., Фохт Д. Проектирование и программная реализация экспертных систем на персональных ЭВМ. – М.: Финансы и статистика, 1990. – 314 с.
  14. Баранов С.Н. Клеточные автоматы на персональной ЭВМ.– Природа, 1992 ,№9.–С.17-23
  15. Семенов Ю.А. Программирование на языке Форт. – М.: Радио и связь, 1991. – 241 с.
  16. American National Standard for Information Systems. Programming Languages. Forth. – http://www.openfirmware.info/data/docs/dpans94.pdf – 210 р.
  17. EuroForth 2011. – http://www.complang.tuwien.ac.at/anton/euroforth/ef11/
  18. Баранов С.Н. Реализация системы символьных вычислений МИНИСАК на языке Форт. – В кн.: Математические методы построения и анализа алгоритмов. Л.: Наука, 1990. – С.3-15
  19. Баранов С.Н., Преображенский Д.С. Лого на Форте. – Пролог, 3(5), 1993. – С.6–10
  20. Баранов С.Н. Отчуждение программного продукта в системе Бета-Форт. – В кн.: Проблемы технологии программирования. СПб: СПИИРАН, 1992. – С.139–147
  21. Берс А.А. Об объектной ориентации и организации архитектуры программных систем. – В кн.: Актуальные вопросы технологии программирования. Л.: ЛИИАН,1989.–С.4–15
  22. Баранов С.Н., Колодин М.Ю. Феномен Форта. – В кн.: Системная информатика, вып.4, Новосибирск: ИСИ СО РАН, 1995. – С.193–271.

Об авторе: Санкт-Петербургский институт информатики и автоматизации РАН (СПИИРАН)
SNBaranov@gmail.com
Материалы международной конференции SORUCOM 2011 (12–16 сентября 2011 года)
Статья помещена в музей 31.01.2012 с разрешения авторов