Рок-н-ролл мертв, а я еще нет...
Борис Гребенщиков
Этот удивительный язык, появившийся на свет в начале 70-х годов благодаря стараниям Чарльза Мура, возник как своего рода ответ на потребности программистов в языке, с одной стороны, обладающем мощными и гибкими выразительными средствами, а с другой - способна быть эффективно реализуемым на компьютерах с небольшими объемами памяти. Кроме того, язык обязан был выдавать очень быстрый и компактный код, т. е. искалась подходящая замена ассемблеру, так как из-за медленных компьютеров с ограниченными ресурсами использовать существовавшие в то время языки программирования для ряда задач не представлялось возможным.
Однако ветвь Форта для большинства проектов оказалась тупиковой. Появившийся примерно в это время Си, который создавался с теми же целями, быстро завоевал всемирное признание, и про Форт многие программисты, решающие "глобальные" задачи, быстро забыли. Почему же это произошло?
Исходно Форт задумывался как цельная система, содержащая интерпретатор, компилятор, отладчик и редактор. Сегодня этим никого не удивить, но для того времени это было весьма удобно. Форт-система была сама написана на Форте, т. е. являлась полностью переносимой и не зависящей от оборудования.
Но самое интересное, что Форт ограничивался очень небольшим набором синтаксических конструкций. Реализовать его в базовом виде можно очень быстро, и поэтому Форт-система без проблем была реализована на множестве платформ. Дело даже не в числе конструкций языка, а в самой идеологии Форта, на которой надо остановиться немного подробнее.
Форт работает с памятью только в виде виртуального стека. Все операции в нем осуществляются над данными, хранящимися на вершине стека, и записываются последовательно - в обратной польской форме. Например, набор из двух команд + / сначала сложит два числа с вершины стека, удалив их оттуда и положив обратно их сумму, и затем разделит эту сумму на следующее число в стеке. Так, если в стеке были записаны числа 3,5 и 8, то эти две команды выполнят действие (3+5)/8. Управляющие структуры, которых довольно мало - условный оператор и оператор цикла, также основаны на анализе данных на вершине стека, например, они проверяют, лежат ли там логические ИСТИНА или ЛОЖЬ.
Все! На этом описание языка почти заканчивается. Конечно, есть еще переменные и возможность работы с адресами. Однако без наличия структур, позволяющих вычленять управляющие последовательности команд в отдельные модули, например подпрограммы, язык программирования существовать не может. Форт содержит весьма оригинальные средства, позволяющие гибко и наглядно описывать структуру решаемой задачи.
Любой последовательности команд можно поставить в соответствие "слово" - обычный идентификатор. Например, вышеприведенные команды можно "обозвать" СЛОЖ_ДЕЛ с помощью такой строки:
: СЛОЖ_ДЕЛ + / ;
Слово СЛОЖ_ДЕЛ записывается в специальный словарь Форт-системы и становится доступным для дальнейшего использования наряду с обычными командами. Причем это слово может быть специально откомпилировано для достижения большей эффективности. Таким образом можно легко описывать довольно сложные процессы вычислений, группировать их в слова и затем работать уже только с ними, зная, какие действия со стеком они производят. Например, управляющие команды для процессора микроволновой печи можно задавать в таком виде: температура 200 объект курица жарить
Форт-системы обычно очень компактны. Ядро занимает 10 - 15 Кб (!), и получающийся код по объему и эффективности не уступает ассемблеру.
Но есть, конечно, у Форта и минусы. Они оказались настолько существенными, что чаша весов при выборе языка, способного заменить ассемблер, быстро склонилась в сторону Си. Основная проблема заключается в сложности восприятия текста, записанного в обратной польской форме, и, соответственно, в трудоемкой отладке. Чем дальше язык отходит от привычной для человека формы описания алгоритма, тем тяжелее с ним работать и тем больше ошибок возникает на этапе разработки. Хотя Форт и позволяет создавать эффективные программы, с появлением быстродействующих компьютеров, когда скорость работы и тем более небольшие объемы памяти, занимаемые программой, практически перестали играть роль, на первый план вышли языки, обладающие максимальными выразительными средствами.
Сегодня Форт используется преимущественно для программирования микропроцессоров, где его качества проявляются наиболее выгодно. Эта ниша довольно объемна, и Форт в ней чувствует себя достаточно уверенно. Это подтверждается, в частности, несколькими стандартами на язык, обновляемыми с завидной регулярностью, что диктуется самой идеологией Форт-системы как переносимого и не зависящего от платформы продукта. Американский национальный стандарт описывает версию ANS Forth; такие компании, как IBM, HP, Sun, Apple и другие, поддерживают стандарт IEEE 1275 1994 г.
Форт не только не сдается, но даже пытается бороться со своим злейшим конкурентом - языком Си. Имеются специальные трансляторы из Си в Форт, причем их создатели утверждают, что преобразованный из Си в Форт код для большинства вычислительных задач работает значительно быстрее! Имеются, соответственно, и обратные трансляторы, из Форта в Си, но об эффективности подобных преобразований их разработчики предпочитают не распространяться.
Как это бывает практически со всеми необъектными языками, родившимися достаточно давно, рано или поздно в них пытаются добавить понятие "объекта". Но если в одни языки это понятие вписывается органично, например в Аду, то в Форте эти попытки привели к некоторой потере гибкости и не получили большого распространения.
Бесплатных версий Форта для MS DOS в мире довольно много. В частности, в Интернете распространяется информация о freeware-версии Golden Porcupine Forth v92.5 московского программиста Александра Ларионова, с документацией на русском языке, библиотеками для работы с графикой, звуком и т. д. Эта версия, отвечающая стандарту Forth-83,распространяется бесплатно только для некоммерческих целей. С автором можно связаться через FIDO (2:5020/653).
Александр впервые взялся за создание собственной Форт-системы в 1989 г., когда ему было 17 лет. Тогда одна крупная фирма объявила конкурс среди советских программистов на лучший программный продукт в ряде номинаций, от системных программ до компьютерных игр. В качестве первого приза был обещан персональный компьютер, по тем временам весьма дорогостоящая вещь, и Александр мог вполне рассчитывать на победу. Однако Саша немного опоздал к срокам и в конкурсе участия не принял. Но система была создана и понемногу продолжала совершенствоваться. В ноябре 1995 г. была закончена новая версия для компьютеров с процессором 386 и выше, в которой были сняты ограничения по памяти, и, соответственно, возможности ее резко возросли. Поддержку своей системы Александр с друзьями осуществляет самостоятельно, иногда используя свой продукт как инструмент для создания различных программ. По словам г-на Ларионова, примерно три года назад его система Golden Forth была использована (им самим) для рисования компьютерных карт на телевидении, когда требовалось показать некоторую точку на карте с границами областей, городами и т. д. Эта система использовалась в течение года на каналах НТВ, ТВ6 и др. Сам по себе этот проект был относительно большим, и хотя его объем - около 5000 строк - может показаться незначительным, Форт позволяет очень компактно описывать структуру задачи, поэтому в данной ситуации критерий оценки объема проекта по числу строк не совсем уместен. По словам создателя, можно было взять и другой, более эффективный инструментарий, Форт же был выбран просто из пижонства! В дальнейшем при рисовании больших карт стали возникать проблемы с памятью, так как стандартная модель Форт-машины работает с адресной памятью 64 Кб (один сегмент). В последней версии, как уже говорилось, все ограничения по памяти сняты.
По поводу популярности Форта Александр отметил, что в силу своей нетрадиционности он, конечно, не способен оказывать серьезную конкуренцию обычным языкам программирования, так как, во-первых, обратная польская нотация заставляет мыслить "шиворот-навыворот", что подавляющему большинству людей крайне непривычно, а во-вторых, максимальную гибкость языка приходится относить не только к его плюсам, но и к минусам. Из своей практики работы с Фортом Александр заметил, что алгоритмы решения одной и той же задачи, написанные на Форте разными людьми, сильно разнятся - именно здесь и проявляется индивидуальность мышления. Поэтому в отличие от традиционных языков программирования разобраться в чужом тексте Форт-программы, даже хорошо прокомментированной, очень и очень трудно. Вследствие этого Форт, к сожалению, практически невозможно использовать для реализации крупных проектов. По словам Александра, этот язык требует творческого подхода при продумывании структуры задачи как на глобальном, так и на локальном уровнях. По-настоящему талантливых людей хоть и не очень много, но они есть и будут, поэтому и желающие использовать Форт для решения каких-то своих задач всегда найдутся.
"Скачать" Форт-систему Александра можно с московской BBS 344-93-15 (время работы 0:00-6:00), файл smal32.arj, объем около 300 Кб.
Из коммерческих версий Форта можно выделить polyFORTH фирмы FORTH с большим количеством математических библиотек, поддержкой работы с базами данных, возможностью создания графического интерфейса и т. д.
Имеется очень много версий Форта практически для всех мыслимых платформ - именно благодаря максимальной простоте реализации языка. Вы можете найти Форт для Windows и OS/2, для Амиги и Мака, Sun и т. д. Стоят они недорого - от ста до трехсот долларов, а подчас вообще распространяются как public domain.
Для задач, в которых требуется действительно быстрая переработка и анализ числовой информации, Форт пока незаменим, так как относительная простота языка в сочетании с его гибкостью и широкой распространенностью позволяет решать эти задачи очень эффективно, не прибегая к ассемблеру.
Сергей Бобровский
Форт ограничивался очень небольшим набором синтаксических конструкций. Реализовать его в базовом виде можно очень быстро, и поэтому Форт-система без проблем была реализована на множестве платформ