Введение в FORTH
Ю. А. Семенов
В 1971 г. Чарльз Мур разработал язык для управления оптическим телескопом и, считая его языком четвертого поколения, назвал FOURTH (четвертый). Однако на ЭВМ, на которой он работал, символьные имена могли иметь только пять букв. Так FOURTH стал FORTH (Форт). Несмотря на конкуренцию других языков программирования, в частности языка Си, Форт мало-помалу стал завоевывать популярность, особенно при решении задач управления сложными объектами в реальном масштабе времени.
Язык Форт использовался для математического обеспечения корабля многоразового использования типа Шаттл, разведывательного 1802 (Avco Inc.) и других искусственных спутников Земли, для разработки телеигр (CameFORTH), при создании фильмов Star Wars, Batlle Beyond the Stars и Star Trek, для системы управления полетами в аэропорту Эр-Рияда (400 ЭВМ и 36 000 датчиков) [24]. В 1976 г. Комитет международного астрономического союза принял Форт в качестве стандартного языка программирования. Позднее Форт применялся для создания экспертных систем, систем искусственного зрения, автоматизации анализа крови и кардиологического контроля, систем машинного перевода с 20 языков (Craig M100 – карманный переводчик) и т. д.
В СССР этот язык используется для систем управления базами данных экономических задач, для программ управления экспериментом, мониторинга состояния пациентов.
Несмотря на ощутимые успехи в использовании языка Форт, делать прогноз о беспредельном расширении сферы его применения вряд ли можно. В то же время, безусловно, существуют области, где Форт имеет несомненные преимущества перед другими языками. Форт эффективен прежде всего для управления небольшими экпериментами и системами, при диагностике сложной электронной аппаратуры с помощью микроЭВМ или микропроцессоров, для создания дешевых поисковых систем, программ машинной графики, трансляторов с других языков. Это, разумеется, не означает, что Форт неприменим в других областях, его возможности еще не раскрыты полностью.
Язык Форт иногда называют системой Форт, так как он содержит программы для работы с внешними устройствами, файлами, средства обработки прерываний, редактор и т. д. Преимущество Форта заключается прежде всего в скорости написания и отладки программ, а также в их компактности. Если программу на Фортране или Паскале можно написать и отладить за неделю, то такую же программу на Форте – за несколько часов. По сравнению с Бейсиком и некоторыми другими интерпретаторами Форт позволяет составить программу в несколько раз более быстродействующую. Он проигрывает Ассемблеру по скорости исполнения программы не более чем в 1, 5–2 раза. Применение же Форт-ассемблера позволяет получить еще больший выигрыш в быстродействии.
Экономное использование оперативной памяти ЭВМ и внешней памяти (диска), возможность автономного функционирования (в отсутствие операционной системы), интерпретивный характер делают Форт особенно привлекательным в небольших автоматизированных системах измерения и контроля, хотя известны случаи использования Форта на ЕС ЭВМ для организации сложных вычислительных процесс сов [36]. Хорошо написанная программа на Форте занимает в памяти меньше места, чем аналогичная, составленная на Ассемблере (здесь не учитывается место, занимаемое процедурами базового словаря Форта).
Модульность интерпретатора и системы в целом позволяет легко адаптировать ее к новым процессорам и задачам. По простоте обучения Форт соперничает с Бейсиком, что делает его привлекательным для непрофессиональных программистов.
Какие же особенности обеспечили Форту шанс выжить в конкурентной борьбе с другими системами?
Для Форта, включая программы управления терминалом и диском, требуется 5-8 Кбайт оперативной памяти, а для Паскаля 48 Кбайт (здесь, правда, не учитывается место, занимаемое операционной системой). С учетом этого выигрыш по памяти оказывается существенно больше. При необходимости базовый словарь Форта может быть сокращен до 1 Кбайт. Программа на Форте может быть исполнена сразу после написания, так как не требует редактора связей.
Форт допускает рекурсию, т. е. программа может обращаться к самой себе (что недопустимо в Фортране).
После выполнения программы и возврата управления системе Форт сохраняется доступ к любой переменной или массиву с помощью символьных имен, что не допускают многие другие языки.
При работе с Форт-ассемблером исполняемая программа практически идентична программе, написанной в машинных кодах, но программист избавлен от длительной трансляции и редактирования связей (программа сразу готова к исполнению). Проигрыш по памяти и скорости исполнения программы в этом случае не превышает 20 – 30 %.
Список операторов Форта открыт для пользователя и может быть расширен по его усмотрению. Это касается самого Форта, Форт-ассемблера, редактора и, разумеется, пакетов прикладных программ.
При работе с многозадачным (многопользовательским) Фортом используется общий словарь процедур для нескольких задач.
К недостаткам Форта относят:
- отсутствие в базовой версии операторов для работы с числами с плавающей точкой;
- недостаточные по современным требованиям средства диагностики ошибок (хотя это и компенсируется отчасти другими возможностями, в частности доступностью этих средств для пользователя);
- непривычная для многих обратная польская (постфиксная) нотация, широкое применение стеков;
- отсутствие в базовой версии развитой системы для работы с файлами (отчасти устранен в интерпретаторах для персональных ЭВМ).
Простота расширения списка операторов и легкость модификации интерпретатора сводят эти недостатки к минимуму. Удобная мнемоника и хорошая адаптация ко вкусам программиста могут сделать работу на Форте легким и даже приятным занятием. Далее будет рассматриваться в основном версия FIG-FORTH, как наиболее распространенная.
Форт-интерпретатор, как и многие другие, имеет несколько уровней:
- работа системы в качестве настольного калькулятора;
- программирование с использованием базового словаря Форта;
- создание с помощью редактора программ, сохраняемых на магнитном диске, которые могут загружаться по мере необходимости.
Принадлежность Форта четвертому поколению часто вызывает споры. С одной стороны, он содержит структурные операторы типа DO...LOOP, BEGIN...UNTIL и т. д., с другой – допускает работу с адресами, что характерно для языков низкого уровня. Главное – это баланс достоинств и недостатков, а этот баланс, на мой взгляд, благоприятен для Форта.
В США создано общество пользователей Форта (FORTH Interest Group – FIG) и фирма FORTH Inc. – главный поставщик программных продуктов Форт, в том числе многопользовательской версии PolyFORТН-2. Существует ряд стандартов: FORTH-79, FORTH-83 [18], FIG [17], MMS, MVP [25, 26]. В какой-то мере этому способствует простота их создания, ведь мало кто решится переделывать или расширять базовый словарь операторов Фортрана просто из-за чудовищной трудоемкости. Наметилась тенденция к созданию процессоров, ориентированных на Форт (фирмы Harris, Silicon Composers, FORTH Inc. США и Институт кибернетики АН ЭССР).
Существуют версии языка Форт для отечественных ЭВМ СМ 1420, "Электроника-60", СМ1810, ДВК, персональных ЭВМ ЕС1840, ЕС1841, ЕС 1842, микропроцессоров К580 и даже ЭВМ серии ЕС.
Статья является введением к книге: Семенов Ю. А., "Программирование на языке Форт", М., "Радио и связь", 1991 г.