Первая реакция у многих людей, с которыми мне приходилось говорить о Форте: "Это, наверное, разновидность Фортрана?". К сожалению, уровень осведомленности околокомпьютерного сообщества насчет этого совершенно непохожего на остальные языка программирования достаточно низок. В этой статье мы попробуем разобраться с тем, что представляет собой Форт и почему этот язык программирования не используется повсеместно.
Окунемся в историю Форта (Forth). В начале 1970х годов Чарльз Мур занялся разработкой программного обеспечения для микроЭВМ, управляющей работой радиотелескопа. Поскольку программирование на Ассемблере привело к неуправляемости разработки довольно сложной программы, а для использующейся микроЭВМ из-за аппаратных ограничений не было языка высокого уровня, Чарльз Мур приступил к созданию компактного и мощного языка программирования, позволившего с блеском решить поставленные перед ним задачи. Успех нового языка программирования определился тем, что на ограниченных ресурсах устройства была создана быстрая и функциональная программа, позволившая делать намного больше, чем первоначально планировалось в техническом задании.
Форт (от англ. forth - вперед, получившееся из-за необходимости сократить слово fourth - четвертый, до пяти букв из-за ограничений операционной системы на длину имени файла) в 1976 году стал стандартным языком для программирования для американского астрономического общества. Благодаря высокой степени переносимости и компактности, а также быстродействию Форт до 1990х активно применялся во множестве приборов с микроконтроллерным управлением (спектрограф на Шаттле, микромодули управления искусственными спутниками Земли, для системы управления в аэропорту Эр-Рияда, системах компьютерного зрения, автоматизации анализа крови и кардиологического контроля, карманных переводчиках). Форт выступает прародителем такого широко известного языка управления печатью, как PostScript.
По своей структуре Форт представляет собой набор примитивов - слов, которые участвуют в определении других слов. Важная особенность Форта - использование стека для передачи параметров между словами. Такая конструкция позволяет очень гибко и просто реализовывать сложные концепции. Наборы слов, относящихся к определенной области, могут выделяться в словари. Иерархическая структура словарей позволяет естественно организовывать наследование слов от словаря-родителя. Базовый словарь Форта составляет менее четырех десятков слов, и уже он позволяет получать полноценные программы расширением исходного словаря.
Форт сам для себя является метасистемой - в нем объединены функции компилятора и интерпретатора, Форт может использоваться без поддержки со стороны операционной системы и для того, чтобы компилировать самого себя, в том числе и на другие платформы.
В отличие от большинства языков программирования, которые имеют жесткую структуру, не позволяющую изменять синтаксис и многие базовые элементы языка, ничто не мешает на Форте написать модификацию системы, понимающую синтаксис той предметной области, для которой пишется программа. Ярким примером является написание Форт-ассемблера для конкретного процессора, выполняемое за один рабочий день квалифицированным фортером. Мало того, такой ассемблер поддерживает структурное программирование и прозрачную вставку в ассемблерный код слов из словаря самого Форта. Таким же образом реализуется поддержка объектно-ориентированного программирования.
До сих пор популярна тема создания Форт-процессоров, система команд которых является машинным представлением наиболее часто используемых слов-примитивов. Благодаря минимализму базовой Форт-системы это легко реализуемо, тем более что программируемые матрицы логических элементов сейчас достигли таких размеров, что Форт-процессор интегрируется на оставшиеся после программирования основной логики 10% вентилей как бонус. Это что-то из разряда: "А в углу нашей маленькой и уютной детской комнатки незаметно расположился аквариум с бегемотом".
Легкость написания Форт-систем привела к огромному разнообразию существующих реализаций - не писал свой Форт только ленивый фортер. Появилось большое количество систем, достаточно плохо совместимых, поскольку имеется три стандарта Форта: Форт-79, Форт-83 и ANSI-Форт-94. Стандарты, хотя и описывают необходимый минимум слов для реализации, но дают огромный простор для самостоятельных изменений, что повсеместно и происходит. Существуют реализации Форта, написанные на Ассемблере, Си, Питоне, Паскале, Яве, а также созданные с помощью целевых компиляторов других Форт-систем.
Как бы не хотелось радостно заявить, что Форт живет полноценной жизнью языка программирования, это не совсем так. Форт прочно занял нишу как язык программирования микроконтроллеров, для которых надо организовать довольно сложную схему функционирования при минимуме ресурсов. Однако, примеры написания в современных условиях больших программ немногочисленны, поскольку скорость разработки на системах RAD превышает возможности Форт-систем.
Таким образом, по частоте использования высокоуровневый язык программирования Форт находится даже ниже уровня Ассемблера. При решении проблем, требующих написания ассемблерного кода, Форт имеет много преимуществ: компактность кода, структурный ассемблер, позволяющий легко внедрять в тело ассемблерных слов высокоуровневые определения. Для тех, кто хочет изучать и использовать Ассемблер, я бы порекомендовал начать с изучения Форта, как я в свое время и сделал. Результатом такого метода обучения будет намного более быстрое и качественное освоение Ассемблера, тем более, что после изучения основ вам обязательно захочется сделать свою Форт-систему (как ни говори, практика - кузница умения).
Для меня Форт дал много - после освоения языка я стал замечать, что код в Дельфи стал более коротким и понятным, появилась привычка документировать основные методы и поля объектов (поскольку в Форт очень желательно описывать стековые диаграммы для каждого слова).
Благодаря изучению книги "Проектирование и программная реализация экспертных систем на персональных ЭВМ" Таусенда и Фохта я почерпнул много информации о внутренней логике работы таких языков, как Лисп и Пролог. Книга Келли и Спайса "Язык программирования ФОРТ" привела меня к четкому пониманию того, как можно написать свой язык программирования и что такое Форт-ассемблер. Для совершенствования стиля программирования оказалась совершенно неоценимой по влиянию на меня книга Лео Броуди "Способ мышления - Форт".
Форт может дать программисту много полезного, даже если он будет в дальнейшем программировать на другом языке. Форт дает то понятие дисциплины программирования, которое необходимо для создания рабочей и легко сопровождаемой программы. Плохому программисту Форт не прощает ошибок, а хорошего стимулирует к тому, чтобы стать великим.
Дмитрий СПИЦЫН
Полезные ссылки по теме:
www.forth.org.ru - Russian FORTH Interest Group - на сайте размещена большая подборка книг и статей по Форту, много ссылок на существующие Форт-системы, интересующимся очень рекомендуется посетить
www.nncron.ru/index_ru.shtml - продвинутый планировщик задач под Windows, пример коммерчески успешной программы на языке Форт
winglion.ru - самодельный Форт-процессор, сайт содержит достаточно толковый форум по Форту
www.msyst.ru/quark.htm - Форт-система с поддержкой OpenGL в виде .dll
ronware.org - кроссплатформенный Форт Windows 32bit (x86) - Linux 32bit (x86) - WinCE (ARM)
forth.gsfc.nasa.gov - список систем NASA, управляемых Фортом
Горячие темы