Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Язык программирования (и ОС) ФОРТ (FORTH) 0007: Что такое ФОРТ


Информационный Канал Subscribe.Ru

Этот текст первоначально был опубликован под названием "Апология ФОРТа" в
части 6 шестого номера рrogrammer's Journal за ноябрь-декабрь 1988г. на
странице 56. Перевод root@dnbs.kiev.ua

Введение в язык

"Я все еще имею возможность видеть довольно приличную часть программ,
написанных на ФОРТе. Это -- его лицо. ФОРТ воняет". -- Джон Дворак, скандалист
и программист, InfoWorld, 29 октября 1984 года.

"ФОРТ -- это первый язык программирования, впитавший всю гору человеческого
опыта и воплощенный в металле". -- Чарльз Мур, создатель ФОРТа.

"Только психованные программисты используют ФОРТ". -- Алан Холуб, бывший
С-программист, Dr. Dobb's Journal.

"ФОРТ похож на Дао; это путь, и его можно только пройти. Его хрупкость есть
его сила; его простота -- его направление". -- Майкл Хем, бывший фортер, Dr.
Dobb's Journal.

Как видно из этой скромной коллекции высказываний, ФОРТ не является языком,
вызывающим равнодушные, жидкие сантименты. За небольшими исключениями,
ФОРТ-программисты (фортеры) -- страстные энтузиасты своего языка, и очень
трудно поверить в то, как эта люб овь изменила их жизнь. Большинство других
программистов смотрят на них со своего рода отвращением, смешанным с большим
уважением, какое обычно питает обыватель к отцам Мафии или пользователь ПК к
авторам вирусов.

Почему ФОРТ приобрел такую репутацию "плохого мальчика" среди других языков
программирования ? Что-то несомненно основано на слухах, авторы которых похожи
на тех же Дворака и Пурнелли, на интервью Роллинг Стоунз с бритоголовыми
хакерами из Северной Калиф орнии, на хорошо сделанных, но совершенно не
документированных продуктах ФОРТ-групп и на кажущиеся совершенно хаотическими,
и как правило, совершенно некомментируемые исходные тексты, опубликованные в
специальных журналах (в тех случаях, когда эти тексты публиковались целиком).
Часть этого непонимания происходит из сенсационных (или кажущихся
сенсационными) "бедствий" типа EasyWriter или Valdocs, которых угораздило быть
написанными на ФОРТе. Вдобавок действует еще и наш обычный снобизм, нежелание
узнава ть новое -- что-то вроде "если меня не учили этому в Стенфорде на курсе
вычислительных методов и программирования 1А, то это наверняка ерунда".

Но самой значительной частью плутовского реноме ФОРТ по-видимому обязан полным
игнорированием своей истинной сути и особенностями сообщества программистов.
Например, MicroSoft недавно афишировал использование шитого кода в своем
продукте QuickBasic как технологический прорыв, хотя вообще говоря подобная
техника используется в ФОРТе уже около двадцати лет. Обозреватели новых
программных продуктов изумляются новым интегральным средам программирования
фирм Borland и Microsoft, совершенно обходя вниманием т от факт, что многие
реализации языка ФОРТ имели вид интегрированных сред с интерпретатором,
компилятором, редактором и ассемблером в общем объеме памяти менее 16 килобайт
примерно за 15 лет до Turbo Рascal. Многие обзорные работы по языкам
программирован ия не считают нужным вообще включать ФОРТ в свои перечни, а
С-программисты (да и все остальные) критикуют ФОРТ за его якобы совершенно
нечитаемый код.

Я думаю, что презрительное отношение к ФОРТу -- это общее для С-программистов
специфическое смущение, поскольку оба языка являются ровесниками, были
разработаны исходя из сходных задач и используют во многом сходные подходы для
решения частных задач. Это предположение о сходстве поддерживается, как
следует из моего опыта, простотой перевода программ на ФОРТе в программы на С
и сходным стилем. Приложения, написанные на ФОРТе и на С, склонны к повторению
одних и тех же типов ошибок, поскольку оба языка си льно зависят от аппаратной
реализации компьютера и предоставляют вам в пользование все его возможности.

ФОРТ, подобно любому другому языку, просто инструмент со своими сильными и
слабыми сторонами, которые зависят от его создателя. При правильном применении
ФОРТ не имеет себе равных, точно так же, как Фортран не имеет себе равных для
работы с числами, Lisp -- для работы со списками, Prolog -- для работы с
логическими утверждениями. Я пока что не намерен учить вас программированию на
ФОРТе, мне было бы приятно предложить вам некоторые тезы и антитезы о ФОРТе в
наиболее понятном виде.

Кое-что из истории

Хотя ФОРТ и С были задуманы в одно и то же время, их истоки весьма различны.
С, вместе со своим братом по рождению ОС UNIX был создан в одном из самых
сильных центров компьютерных исследований -- "Bell Laboratories", и его автор
Деннис Ритчи в течении сл едующих лет приобрел статус чуть ли не святого.
Долгое время достоинства С были доступны только в UNIX-системах, и пока UNIX
был дьявольски дорог для коммерческого использования, AT&T предоставляла его
практически только университетам. Таким образом неск олько поколений студентов
и вольных слушателей были обучены и посажены за UNIX и С, фактически сделав
его стандартом. С другой стороны, ФОРТ является чуть ли не "полевым цветочком"
среди языков программирования; он начал свой путь в мир только благодаря своим
преимуществам, отсутствию внимания со стороны академической науки или
разногласиям в литературе по программирова нию. ФОРТ был создан Чарльзом
Муром, вольным программистом, который работал в области контроля и сбора
данных от датчиков в Стендфордском центре линейных ускорителей. Мур был хорошо
знаком со многими языками программирования, включая Assembler, Fortran,
Cobol, PL/1 и APL, но чувствовал, что ни один из них не хорош. Он много
экспериментировал с интерпретаторами в начале шестидесятых, окончательно
уверовав в идею использования стека для передачи данных и результатов между
процедурами интерпретатора.

Мур рассказал, что его первый интерпретатор, напоминающий ФОРТ, был написан на
Фортране на IBM 1130 когда он работал на ковровой фабрике (Mohasco Industries)
в 1968 году. Впоследствии он был перекомпилирован для Borroughs 5500, который
имел растущий вниз стек, который позволял реализовать ФОРТ еще более красиво,
и затем на Univac 1108. Немного позже Мур выполнял работу для Национальной
Радиоастрономической Обсерватории (NRAO) и перенес ФОРТ на Honeywell 316. Язык
все более развивался от платформы к плат форме и уже в Ханивеллской версии был
добавлен компилятор, результатом чего явилась первая ФОРТ-система в
современном понимании этого слова, которая позволила написать ФОРТ на ФОРТе.

NRAO не оценила использования ФОРТа и после некоторых предварительных
исследований патентной чистоты продукта отдала все права на язык Муру.
Астрономы обсерватории Kitt рeak использовали ФОРТ на нескольких
миникомпьютерах Varian для управления телескопом и обработки данных. В 1973
году Мур вместе с Елизабет Разер (второй фортер) и еще несколькими людьми
создали FORTH Inc. для создания и продажи ФОРТа как коммерческого продукта,
который был первоначально назван miniFORTH и только позже рolyFORTH. Язык был
перенесен на некоторые новые платформы; наиболее известная из них DEC
рDр-11, которая и стала основной платформой для пользователей продукции FORTH
Inc.

В течении следующих пяти лет язык ФОРТ и собственно продукт FORTH Inc. были
одним и тем же. Других коммерческих ФОРТ-систем не существовало, а само слово
FORTH было фирменным знаком. Хотя рolyFORTH был перенесен на достаточно
большое число платформ, сдел авшись доступным, первоначальная цена на него не
упала. Исключая старые версии ФОРТа, которые были в пользовании у астрономов,
ФОРТ был практически недоступен и неизвестен большинству потенциальных
пользователей. В 1978 году небольшая группа энтузиастов сформировала Forth
Interests Grouр (FIG) в Сан Карлос, Калифорния. Они создали хорошую команду,
которая в течении девяти месяцев создала простой и переносимый вариант ФОРТа
и
реализовала его для Intel 8080, DEC рDр-11, TI 9900, 6502, рACE и Motorola
6800 . Эта реализация, названная FIG-Forth, была выпущена как свободный к
распространению и использованию (рublic Domain) продукт; ксерокопия листинга
исходников распространялась по чисто условной цене $10 и в течении нескольких
месяцев разошлась по всему мир у. Некоторые из этих исходных текстов были
далее распространены на Intel 8086, Nova, RCA 1802, Motorola 68000 и 6809,
Alрha Micro, VAX, и даже на Data General Ecliрse, и также распространялись
свободно.

Хотя FIG-Forth был медленнее и грубее современных нам стандартов, он до сих
пор наиболее распространен. В те дни память для компьютеров стоила дорого,
5.25" дискеты имели емкость 60-70 килобайт, и кассетный (и даже бумажный)
варианты хранения текстов и д анных был наиболее распространен; так что
высокоуровневый язык с минимальными требованиями к памяти и к тому же
доступный в исходных текстах был просто манной небесной для многих
пользователей ПК. FIG-Forth добавил еще огоньку выпуском журнала BYTE в авг
усте 1980 года, который был почти полностью посвящен ФОРТу и впервые
предоставил описание концепции ФОРТа сообществу программистов и пользователей
ПК. Исходные тексты FIG-Forth для многих будущих фортеров стали первой школой.
Смысл писать программное обе спечение на продажу практически сошел на нет, так
как новые программистские фирмы возникали десятками и создавали продукты для
любого мало-мальски известного микрокомпьютера, как только он появлялся. Хотя
многие из этих фирм не смогли выжить, постоянный интерес к ФОРТу и приток
свежей крови в ряды фортеров вызвал очень быстрый по времени прогресс
ФОРТ-систем. В 1979 году стандартная ФОРТ-система имела строковый редактор и
целочисленную арифметику, но уже в 1981 ФОРТ выглядел как приложение к
операционно й системе с файловым интерфейсом, арифметикой с плавающей точкой,
экранными редакторами, и все это началось с FIG-Forth.

По мере роста популярности FIG-Forth его создатели также не сидели сложа руки.
В октябре 1979 года был создан Комитет по стандартизации ФОРТа (Forth
Standarts Teem, FST), результатом работы которого стал стандарт Forth-79. Этот
стандарт был несовместим к ак с FIG-Forth, так и с рolyFORTH, и оказался не в
состоянии вытеснить ни тот, ни другой, и привел к ряду нежелательных эффектов,
среди которых стоит упомянуть ухудшение переносимости исходных текстов ФОРТа.
Хоть в это и трудно поверить, но FST продолжил разобщение фортеров введением
нового стандарта Forth-83, несовместимого ни с каким из предшествующих.

Введение Forth-83, несмотря на все эти проблемы, все-таки возымело две
положительных стороны. Во-первых, общедоступные версии FIG-Forth,
распространявшиеся в исходных текстах, весьма быстро померкли в лучах рublic
Domain Forth-83, называвшегося F83 и нап исанного Перри и Лаксеном. F83
позволял производить перекомпиляцию самого себя, в отличие от FIG-Forth,
требовавшего ассемблера, имел средства поддержки многозадачного режима,
запускался как утилита в составе операционной системы -- в общем, он буквально
перепрыгнул через FIG-Forth ! Позже появилась версия многосегментного ФОРТа
Тома Циммера. Во-вторых, отзвуки активности FST не прошли даром, и в 1987 году
стали причиной попытки создания ANSI-стандарта ФОРТа.

В течении нескольких следующих лет продавцы ФОРТ-систем испытали некоторый
шок, и многие ФОРТ-компании исчезли. (Собственно говоря, та же история
постигла и многие компании, использовавшие язык С.) FORTH Inc., президентом
которой является Элизабет Разер, занимала лидирующее положение среди
производителей ФОРТ-систем; их доходы и штат сотрудников превышали все
остальные компании в ФОРТ-бизнесе. Только эта компания могла обеспечить весь
комплекс услуг, необходимых для производства и продажи программного о
беспечения: консультирование, создание приложений, обучение и сопровождение;
другие продавцы обычно выпускали продукты, хорошо или плохо документированные,
и этим ограничиваются. Поэтому эта встряска на FORTH Inc. практически не
отразилась.

Пока мир программистов опоминался от этих встрясок и в создании программ на
ФОРТе наступило затишье, произошли некоторые события на фронте аппаратного
обеспечения. Были созданы ФОРТ-процессоры, воспринимающие инструкции языка
ФОРТ как свои родные, среди которых Novix NC 4016 Чарльза Мура, MF1600 Алана
Винфилда и 32-битный WISC Фила Коупмана. Мощность этих реализаций изумляет.
Например, Novix может работать со скоростью более 4 MIPS, и при этом очень
экономичен и требует минимального количества чипов для систем на своей основе.

Элементы терминологии

У кого бы вы не спрашивали, чем является ФОРТ, вам никто не сможет ответить
точно, что это такое: язык, среда, операционная система или философия
программирования... Все эти определения верны в некотором смысле, но это
определения "извне", которые нас ни как не приблизят к пониманию того, что
такое ФОРТ на самом деле. ФОРТ можно понять, только ближе познакомившись с ним
или хотя бы с его терминологией. Единственной конструкцией ФОРТа, [1] является
слово. Кстати, сам термин "слово" имеет два значения: машинное слово и слово
ФОРТ-системы, это разные вещи, и даже в ФОРТе это понимается двояко: как
ограниченная пробелами лексема, полученная из входного пот ока и как примитив
грамматического разбора WORD, реализованный как стандартное слово
ФОРТ-системы. Исходные тексты слов называются определения. Существуют слова
ФОРТа, написанные в машинных кодах (примитивы) и определенные в самом ФОРТе
(вторичные, или в ысокоуровневые, определения).

ФОРТ-система ищет слова в словаре, который можно представить как символьную
таблицу, ассоциирующую каждое слово системы с адресом, содержащим исполняемую
часть определения. Словарь делится на "словарики", поиск в которых может
производиться как по отдель ности в каждом, так и во всех по очереди; все это
позволяет переопределять слова, однако имеет то опасное свойство, что
невозможно отличить скрытое переопределением слово от непереопределенного.

Почему мы так останавливаемся на этой терминологии ? Хотя бы для того, чтобы
вы имели представление о семантической структуре ФОРТа и могли читать книги о
ФОРТе или разговаривать с фортерами. Термины "слово" ("word"), "словарь"
("dictionary"), "словарик" ("vocabulary"), "определение" ("definition") -- это
традиционные термины ФОРТа, используемые в любой литературе по ФОРТу и в любых
комментариях и исходных текстах. Кроме того, многие фортеры -- самоучки и не
владеют общепринятой терминологией.

Язык

Рассмотренный чисто как язык, ФОРТ кое-чем напоминает современные
структурированные языки программирования, такие как С, Паскаль или Модула-2.
Он имеет собственные средства управления, однако в отличие от С, не имеет
оператора GOTO. Подобно С, однако отл ично от Паскаля и Модулы-2, он не
различает процедуры и функции. Более важные различия между ФОРТом и другими
языками заключается в отсутствии в ФОРТе типизированных данных. Это ключевое
различие позволяет ФОРТу быть "расширяемым языком", чего не могут о стальные
языки. ФОРТ позволяет программисту совершенно свободно создавать любые форматы
данных и действия над ними, просто расширяя исходный словарь ФОРТ-системы и
немедленно использовать все это при определении новых слов или при
непосредственном исполн ении. ФОРТ позволяет программисту создавать новые
объекты языка и даже заставлять их по разному работать в процессе компиляции
и
в процессе исполнения. Единственный способ расширения для традиционных языков
-- создание процедур, функций и новых типов дан ных средствами типа struct в
С. Однако ФОРТ описывается не только множеством своих слов или синтаксическими
правилами, ФОРТ -- это виртуальная машина. Наиболее важной чертой этой машины
является использование двух стеков -- стека данных и стека возвратов. Почти
все слова ФОРТ-системы и спользуют стек данных для передачи данных друг другу;
стек возвратов используется для управления и для временного (в предела одного
слова) хранения значений. ФОРТ по своей сути поддерживает рекурсивную
структуру определений и программ именно в силу своей стековой архитектуры; в
классическом стиле программирования на ФОРТе глобальные переменные отсутствуют
или используются очень редко.

Существующие стандарты ФОРТа описывают имена и функции почти 200 слов,
позволяющих программисту использовать все возможности виртуальной машины и
управлять интерпретацией/компиляцией в ФОРТ-системе. Коммерческие ФОРТ-системы
имеют еще больший словарный з апас -- порядка 500 слов. К сожалению, в
большинстве ФОРТ-систем слова документируются очень слабо, если вообще
документируются.

В принципе, такое большое количество слов в языке не есть специфический
недостаток ФОРТа: большинство систем программирования на С имеет примерно
столько же элементов языка, если учесть библиотеки, и поэтому изучение ФОРТа
не более трудно, чем С. В некотором смысле вы можете рассматривать некоторое
небольшое количество "волшебных" слов как "язык" ФОРТ-системы, а все остальное
-- как библиотеки добавочных функций, разбитых по категориям: стековые
примитивы, арифметические и логические примитивы, оператор ы для работы с
памятью и т.д. Как и в других языках, вы можете пользоваться 10% словаря в 90%
случаев, что позволяет изучать язык постепенно и в первую очередь то, что вам
более всего необходимо. Вы можете просто "ухватить" основные идеи и слова, и
после довательно как бы "выстраивать" его у себя в голове. Вы можете начать
изучение с примитивов ФОРТ-системы, определенных в машинном коде, постепенно
как бы восстанавливая определения высокоуровневых слов. Вы как бы построите
свою ФОРТ-систему. Таким образо м, вы можете изучать ФОРТ с любого места, чего
явно не позволяют делать другие языки.

Наиболее часто критикуемой особенностью ФОРТа является его постфиксная (или
обратная польская) запись. Следующим моментом, подвергающимся наиболее часто
критике, являются имена многих стандартных слов. Однако если учесть, что во
времена появления ФОРТа б ольшинство компьютеров имели от 8 до 16 килобайт
оперативной памяти, а обмен данными происходил через терминалы твердой копии
со скоростью порядка 10 символов в секунду, то короткие мнемоники многих
ФОРТ-слов (каковых "неудобных" мнемоник весьма мало) ст ановятся вполне
понятны. В принципе каждый язык имеет свои соглашения, и ФОРТ в этом смысле
ничуть не хуже тех же С или Паскаля. Читабельные и переносимые программы могут
быть написаны на любом языке, точно так же как и совершенно непонятные. Однако
у ФО РТа в этом смысле есть даже преимущество -- вы можете переименовать любое
слово ФОРТ-системы, и ни один другой язык вам этого не позволит сделать !

Более частые жалобы по поводу используемой в ФОРТе постфиксной (обратной
польской) записи требуют более детального рассмотрения. В постфиксных системах
аргументы предшествуют операторам; например, в ФОРТе сложение 1 и 2 выглядит
так:

1 2 +

на С это будет выглядеть следующим образом:
1 + 2

а на ЛИСПе с его префиксной формой вот так:
+ 1 2

Когда компиляторы с С или Паскаля транслируют программу методом рекурсивного
спуска (а они реализуются именно так), им приходится преобразовывать выражения
из инфиксной в постфиксную форму перед тем, как создавать соответствующий
машинный код. ФОРТ перек ладывает эту ношу на плечи программиста, благодаря
чему компилятор может быть проще, быстрее и компактнее. При частом
использовании постфиксной нотации это не является сколь-нибудь значительным
осложнением. Замечательная способность ФОРТа к расширению по зволяет
преодолеть и этот барьер, поскольку расширения, реализующие инфиксную запись,
пишутся на ФОРТе очень легко. Однако большинство программистов, пишущих на
ФОРТе, относятся к ним весьма прохладно и никогда их не используют. Среда
разработки программ С, Паскаль и Модула-2 были разработаны и традиционно
реализуются как компиляторы, и интерпретирующие реализации для этих языков
(если они есть) обычно медленнее и сложнее. Хотя одноименные интегрированные
среды для этих языков, чей ряд был начат ТурбоПас калем в 1983 году, весьма
сильно повысили эффективность программирования, они практически никогда не
содержат ничего, кроме редактора, компилятора и компоновщика, объединенных в
одну оболочку. Они не являются интерпретирующими системами: вы не можете зап
устить на выполнение отдельную конструкцию языка (когда это требуется,
например, для отладки) просто введя ее имя с клавиатуры. В отличие от них ФОРТ
-- это интерпретирующий, интерактивный, интегрированный пакет языковых
ресурсов. В типичных ФОРТ-системах редактор, ассемблер и различные утилиты для
отладки написаны на самом ФОРТе и могут быть вызваны для работы в любое время.
Обы чно исходные тексты этих приложений доступны вместе с ФОРТ-системой, и
программист может изменить их по своему желанию. Хотя ФОРТ можно реализовать
многими разными путями, "классические" реализации включают в себя
унифицированные интерпретатор и компилят ор, основанные на некотором числе
несложных концепций и простых правил.

Ядром интерпретатора/компилятора является бесконечный цикл, читающий
отделенные пробелами слова из входного потока; то, что он с ними сделает,
определяет глобальная переменная STATE. Когда STATE установлена в 0, система
занимается "интерпретацией". Каждо е слово ищется в словаре; если оно найдено,
оно выполняется, если нет -- интерпретатор пытается преобразовать его в число
и положить на стек; в случае неуспеха выдается сообщение об ошибке. Когда
STATE установлена в -1, система "компилирует" новое опреде ление. Если слово
найдено в словаре, его атрибут (обычно адрес поля кода) компилируется на
вершину словаря. Если слово не найдено, система пытается превратить его в
число и сгенерировать код, который при исполнении положит это число на стек во
время испо лнения этого нового определения.

Другими словами, каждое определенное на ФОРТе слово представляет из себя
последовательность адресов и литерных данных, именуемую шитый код. Адреса
определяют, прямым или непрямым образом, выполняемый машинный код. Когда шитый
код исполняется, небольшая п одпрограмма, называемая адресный интерпретатор,
просматривает соответствующие списки адресов (определения слов) и выполняет
соответствующие машинные подпрограммы. Как только новая последовательность
команд (новое слово) было скомпилировано, оно может быт ь запущено простым
вводом его имени с консоли.

Все определения в ФОРТ-системе имеют одинаковый статус, поэтому не существует
барьера между "низкоуровневыми" словами и "высокоуровневыми". Типичная
программа на ФОРТе запускается простым введением ее "имени" (главного слова).
Однако существует два специ альных класса ФОРТ-слов: обычные и слова
немедленного исполнения (immediate). Во время компиляции обычные слова
компилируют ссылки на свое поле кода, в то время как immediate слова
выполняются независимо от значения переменной STATE. Определяющим словом,
определяющим новое слово лексикона, является двоеточие (:), одним из действий
которого является установка переменной STATE в истинное значение, что и
переводит всю систему в состояние компиляции.

Процесс программирования на ФОРТе заключается в следующем: используя процесс
определения через двоеточие, программист создает новые слова, определяющие
необходимые ему классы и понятия, затем при помощи этих слов создает
необходимые объекты (члены классо в); завершает процесс написания программы
определение "главного" слова, запускающего всю последовательность необходимых
ФОРТ-слов.

Как уже было сказано, слова немедленного исполнения исполняются независимо от
значение переменной STATE, как в режиме интерпретации, так и в режиме
компиляции. Одним из самых важных слов немедленного исполнения является слово
точка-с-запятой (;), заверша ющее компиляцию определения через двоеточие.
Кроме того, к этому классу слов относятся слова, реализующие структуры
управления (такие как IF, BEGIN и т.д.), генерирующие нужный код в процессе
компиляции слов. Например слово IF генерирует код, используя з начение со
стека и создавая команду условного перехода ?BRANCH offset. Слово (;)
заканчивает определение, начатое словом (:), а его главное действие состоит в
сбросе значения переменной STATE в 0 (ложь). Используя механизм определения
через двоеточие, пр ограммист может расширять возможности компилятора, вводя
новые слова немедленного исполнения.

Операционная среда

В течении первого десятилетия существования ФОРТа он реализовывался как
"туземец", представляя собой скорее надстройку над программой-монитором
машины, чем язык, работающий под управлением ОС. Практически, он представлял
собой не сколько среду для разраб отки программ, сколько полную операционную
среду. Такие реализации ФОРТ-систем содержали свои собственные драйвера
устройств и не могли работать под управлением какой-либо операционной системы,
представляя из себя удобную надстройку-расширение над аппара тной частью
компьютеров. Поскольку Чарльз Мур положил в основу создаваемого им языка
требования производительности и компактности, то ему пришлось снабдить его и
своей операционной системой, включающей дисковую систему, драйвера клавиатуры,
принтера и те рминала. Кроме того, на самом ФОРТе можно написать ассемблер
того компьютера, для которого предназначена система, на котором уже, в свою
очередь, создавать необходимые драйвера. Такой ассемблер является практически
стандартным расширением любой ФОРТ-сист емы. Первые реализации ФОРТа для
работы под управлением "больших" ОС появились не ранее 1979 года, в основном
в
тех небольших фирмах, которые появились после опубликования листингов
FIG-Forth. Двое таких фирм-"пионеров" -- Laboratory Microsystems Inc., перене
сшая Z-80 Forth под ОС Cр/M, решив использовать системные вызовы ОС для
управления компьютером (вместо встроенных драйверов), и Micromotion, создавшая
систему под ОС компьютера Aррle II. Достаточно быстро число таких ФОРТ-систем
превысило число нативных реализаций ФОРТ а, и на сегодняшний день более 80%
всех систем работают под управлением "больших" ОС. Насколько мне известно,
только FORTH Inc. продолжает поставлять нативные ФОРТ-системы, поддерживая,
однако, и их аналоги для ОС MS-DOS, RSX-11, и VAX VM S (и многих других).

Во встроенных приложениях, конечно же, используются нативные версии ФОРТа для
сведения к минимуму требований к оборудованию. Специальная разновидность
ФОРТ-компиляторов, называемая целевым компилятором, позволяет создавать на
одной платформе программы дл я других платформ, в том числе и такие, которые
можно помещать в ПЗУ. Результаты работы такого компилятора -- двоичный
(исполняемый) образ программы -- переносятся на рабочую платформу при помощи
перекачки по сети или дискет. Вообще говоря, целевой компи лятор -- это всего
лишь кросс-ассемблер; смысл его существования заключается в том, что он может
быть написан на самом ФОРТе и служить для переноса ФОРТ-системы с одной
платформы на другую. Многие ФОРТ-системы позволяют полностью перекомпилировать
сами с ебя, поскольку в их состав входит такой целевой компилятор, снабженный
исходными текстами самой ФОРТ-системы.

Философия

Если говорить о ФОРТе как о кредо, то это можно просуммировать тремя словами:
компактность, быстрота, простота. ФОРТ -программисты традиционно пренебрегают
навороченным экранным интерфейсом, скрупулезным контролем ошибок, что очень
характерно для большин ства современных интегрированных сред. Такой подход
имеет определенный смысл, если учесть что целостная ФОРТ-система, содержащая
редактор, ассемблер, поддержку многозадачности (не говоря о компиляторе) может
занимать в памяти около 8 Kb. Хотя, конечно, е сть и определенные недостатки:
контроль ошибок в ФОРТ -программах, как правило, практически отсутствует (за
исключением наиболее общего, типа деления на 0 на платформе Intel 80x86). В
процессе разработки программы на ФОРТе система часто подвисает, что да ет
"торопыгам" время подумать, а вообще производит несколько неприятное
впечатление. Венцом кредо ФОРТа является то, что системно-зависимый доступ к
аппаратному обеспечению должен быть доступен (и при том переносимо) независимо
от системы команд конкретного процессора, на платформе которого работает
ФОРТ-система. ФОРТ-система без ассембл ера все же предпочтительнее, чем полное
отсутствие ФОРТ-системы [2]. Что касается переносимости, то комитет ANSI
описал достаточно много интерфейсных компонент, эффективно реализуемых для
большинства распространенных ОС и процессоров.

Классическая программа на ФОРТе выглядит как очень много достаточно коротких
слов, реализующих идею программы снизу вверх, использующих прототипы и
последовательное приближение к конечному, главному слову. Если в ФОРТе и есть
догмы, то одна из них говори т, что длина определения одного слова не должна
превышать 2-3 строк и должна содержать не более 9-10 элементов. Такое
соглашение позволяет достаточно быстро отлаживать каждое введенное слово в
интерактивном режиме, что значительно сокращает время разрабо тки новых
словарей. Тестирование выглядит очень просто: программист сам кладет нужные
данные на стек, запускает слово и смотрит на результаты. Если в системе есть
утилита отладки (а в большинстве систем есть целый набор таких утилит), то
можно даже трасс ировать слово в процессе его выполнения. Кроме того, это
позволяет создавать новые слова как угодно специфицированными под конкретную
задачу и полностью оптимизировать ее выполнение.

Способ программирования, принятый в ФОРТе -- снизу вверх -- органично
сочетается с теми типами проблем, для которых вы используете язык [3].
Типичная программа на ФОРТе имеет средства сокрытия методов доступа к
аппаратной части, контроля данных или самой системы; во многих случаях само
аппаратное обеспечение только подразумевается и может отсутствовать в системе
[4]. Обычно ФОРТ -слова, работающие с устройствами компьютера (реальными или
воображаемыми) создаются первыми; когда эта система определений (м ожно
назвать ее драйверами устройств) закончена и обращение к устройствам возможно
уже через ФОРТ -слова, остальная часть приложения просто надстраивается
сверху.

Такое внимание к созданию прототипов и возможно более полному приближению к
семантике задачи достаточно обосновано в контексте программирования
снизу-вверх. В большинстве ФОРТ -приложений доступ к аппаратной части -- это
достаточно длинный путь для дости жения необходимой вам цели. Зато после
предварительной проработки некоторой части кода окончательной версии вашей
программы вы можете спокойно модифицировать его, опираясь на те функциональные
возможности и интерфейсы, которые сами же и создали; просто-н апросто
некоторые низкоуровневые части ваших системно-зависимых определений иногда (и
при удачном проектировании -- очень редко) будут требовать совсем
незначительных изменений.

Важным преимуществом ФОРТ -подхода создания приложений является то, что
интерфейс пользователя может представлять собой просто набор ФОРТ -слов,
зачастую являющихся лишь верхним уровнем вашей системы определений. Это
соглашение позволяет делать очень инт ересные вещи: вы не только можете
пользоваться "официальными" интерфейсами приложения, но также и расширять его
возможности либо обращаться к низкоуровневым словам непосредственно (и даже
изменять их контекст). Вместе с тем на системах, которыми пользуют ся
неаккуратные программисты, это позволяет спрятать критичные для выживания ФОРТ
-системы определения, вызывая их только документированным образом в известных
контекстах более высокого уровня.

Место в мире

В 1969 году в мире был всего один программист, писавший на ФОРТе, и им был сам
Чарльз Мур. Когда в 1973 году была создана FORTH Inc., то никаких особенных
шансов и успехов предвидеть было нельзя. В 1979 году Мур оценивал число ФОРТ
-программистов примерн о в 1000 человек. Если судить по количеству проданных
ФОРТ-систем и книг Лео Броуди о ФОРТе, то число пишущих на этом языке
составляло около 50000 зарегистрированных и около 25000-50000
незарегистрированных пользователей ФОРТ-систем. Популярность этого я зыка
выросла лавинообразно. Хотя с другой стороны, если посмотреть объективно, то
число проданных копий Турбо Паскаля приближается к 1.5 миллиона, не говоря о
Турбо С. Проведя некоторые изыскания, я пришел к выводу, что в истории ФОРТа
есть четыре периода. Первый период, примерно с 1969 до 1978, я бы назвал "эрой
секретного оружия". В течении этого периода ФОРТ использовался узким кругом
профессионалов, работавших в оч ень узких и специальных областях. С точки
зрения разработки концепции и словарного запаса языка это было не лучшее
время, поскольку круг использовавших его людей и решаемых с его помощью
проблем оставался весьма узким.

Второй период, с 1978 по 1982 год, связан с переходом ФОРТа из разряда
малоизвестных специфических продуктов в язык программирования общего
назначения. Этот период можно назвать "евангельской эрой ФОРТ а", имея в виду
"проповедническую" деятельность FIG, фактически превратившую его в первый
структурный язык с графическими расширениями и действительной математикой,
редактором и ассемблером на большинстве популярных IBM PC (и позже на
Macintosh). Сейчас (проводя ретроспективный анализ) мы можем назвать FI G
группой, "узаконившей" ФОРТ путем распространения огромного количества
исходных текстов (но и нарушителями закона тоже). К счастью для них и для нас
всех, компания FORTH Inc. не зарегистрировала за собой торговую марку "Forth"
(и не прикрыла тем самым всю эту малину с распространением языка). В конечном
счете законные изобретатели и владельцы ФОРТа получили больше, чем потеряли --
ФОРТ стал известен.

Года с 1983 по 1986 были периодом разочарования и отхода от ФОРТ а. Многие
почитатели, любители и энтузиасты с ужасом смотрели на увядание ФОРТа на фоне
других языков, а профессионалы пытались направить его развитие в русло, общее
с основным руслом разви тия компьютерной идеологии. Они были убеждены в том,
что ФОРТ способен давать прекрасные пути решений для многих задач
программирования, но ФОРТ игнорировался как государственными учреждениями, так
и коммерческими структурами. Небольшие производители про грамм, использовавшие
ФОРТ , покинули бизнес, не дававший им дохода, успех в котором определялся
темпами развития аппаратной части PC, а общедоступные ФОРТ-системы, которые
можно было получить на BBS и их создатели соревновались друг с другом вместо
того , чтобы нормально поставить маркетинг.

В 1987 году ФОРТ вступил в пору зрелости и стандартизации. ANSI технический
комитет по ФОРТ у (X3J14) под управлением обоих (CBEMA и IEEE) обществ по
компьютерам начал медленно, но верно разбираться в море существовавших тогда
диалектов ФОРТ а, в результ ате чего весной 1994 после многих пересмотров
появился Американский Национальный Стандарт (ANS) языка программирования ФОРТ
 . Пока этот стандарт не установился окончательно, в нем была сделана попытка
сохранить хоть какую-то совместимость с существовавши ми ранее версиями, чтобы
обеспечить возможность переноса уже существовавшего программного обеспечения
на новую платформу, и кроме того, сделать его более привлекательным для
разработки новых проектов. Системы разработки программ на ФОРТе реализованы
прак тически для всех ныне существующих процессоров, и кроме того ФОРТ --
лучший из языков третьего поколения, который легко адаптируется к новой
архитектуре процессорных систем, персональным компьютерам, новым операционным
системам и т.д.

ФОРТ все еще остается весьма привлекательным инструментальным средством для
решения задач в области управления процессами в реальном времени, системах
сбора и первичной переработки данных, и может быть найден в самых неожиданных
местах: от драйвера на ва шем компьютере или программы, управляющей
холодильником у вас дома, до системы управления перемещением багажа в компании
American Airlines, от инструментального языка, используемого для проведения
экспериментов в космической лаборатории SрaceLab до систе мы с 400
процессорами и 17000 сенсорными датчиками в одном из аэропортов Саудовской
Аравии. Мне кажется, что в этом сама суть ФОРТа как языка: всегда быть готовым
к изменениям, будь то изменения в структуре его лексикона или перемена
платформы и области применения. Его уникальные характеристики и минимальные
требования к аппаратному обеспечению обеспечивают ему наивысшую мобильность,
какую только можно найти у языков программирования. В некотором роде ФОРТ не
имеет конкурентов, и я надеюсь, что он сохра нит эти свои позиции (и найдет
новые) еще очень долго.

О языке из документации ФОРТ-системы GP-FORTH (c) Александр Ларионов

Вы слышали о языке программирования ФОРТ ? Если нет -- ничего удивительного в
этом нет. В нашей стране (я имею в виду бывший Советский Союз) о ФОРТе слышали
очень немногие. Между тем в мире популярность ФОРТа растет. Пускай растет
несколько более сдержан но, чем в свое время популярность языка Си, но, на мой
взгляд, это связано с некоторой необычностью ФОРТа, его нестандартностью, а
так же с тем, что ФОРТ на первый взгляд кажется слишком сложным. Если Вы не
знакомы с ФОРТ ом -- у Вас есть возможность с ним познакомится; если знакомы
-- попробуйте "что-нибудь" написать. По своим возможностям ФОРТ далеко обходит
такие языки программирования, как Паскаль и Си. В нем сочетаются компактность
кода, кра сота программ, поразительная гибкость, и достоинства таких языков,
как Лисп и Пролог. Стоит только повнимательней к нему приглядеться. ФОРТ очень
близок Лиспу, хотя не сомневаюсь, что программист, проработавший некоторое
время на Лиспе, при первом знаком стве с ФОРТом попытается опровергнуть это
утверждение. ФОРТ чрезвычайно гибок, и посвященный в него лишь усмехнется,
услышав, как какой-нибудь "студент" рассказывает собравшейся вокруг него
аудитории о гибкости языка Си.

Программа на ФОРТе средних размеров и написанная грамотно вполне может обойти
по компактности кода аналогичную программу, реализованную на языке ассемблера.
Еще в стародавние времена, когда я работал на 8-разрядной персоналке "Корвет",
меня чрезвычайно п оразил факт, что встроенный в ФОРТ-систему ассемблер,
написанный на ФОРТе в оттранслированном виде занимал в памяти менее 1.5К!
Выберите язык программирования, машину, и попробуйте уместить в полтора
килобайта ассемблер для процессора i8080. Если Вы не п оверили приведенному
примеру или Вас просто заинтересовал исходный текст на ФОРТе ассемблера i8080,
попробуйте достать книгу С.H.Баранова и H.Р.Hоздрунова "Язык ФОРТ и его
реализации". В этой прекрасно написанной книге приведено немало и других
интересны х примеров, из которых ФОРТ-ассемблер, конечно, является самым
совершенным. Признаюсь, таких красивых программ на ФОРТе мне больше видеть не
приходилось.

ФОРТ предоставляет программисту практически неограниченные возможности, и не
пытается вести тотальный контроль за корректностью его действий. Hужные Вам
средства контроля Вы сможете сделать сами.

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

Итак, что же такое ФОРТ ? ФОРТ многогранен. Его можно рассматривать как
язык высокого уровня
язык низкого уровня
операционнyю систему
мощную среду для создания системных программ
некоторую концепцию разработки програмного обеспечения

Hазвание ФОРТ происходит от английского слова Forth (вперед), и, одновременно,
как сокращение от Fourth (четвертый). Такое странное название связано со
следующим фактом из истории ФОРТа:

Изобретатель ФОРТа Чарльз Мур, закончивший работу над языком в начале 1970х
годов, работал в то время с моделью IBM-1130 -- ЭВМ третьего поколения.
Полученные результаты показались ему настолько значительными, что он посчитал
язык "языком машин четвертог о поколения" и назвал бы его Fourth, если бы
модель 1130 допускала шестибуквенные идентификаторы. Таким образом Fourth
превратился в Forth -- своеобразная игра слов.

"Сохранять простоту языка" -- так сформулировал свой принцип сам Чарльз Мур в
предисловии к книге Лео Броуди "Starting Forth", которая, кстати, вышла в 1990
году в издательстве "Финансы и статистика".

Поток создания Максимова

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

ФОРТ должен быть основой всего, что касается программирования. Сложность
создания описания для ФОРТ сводится в отсутствии конкретного назначения ФОРТа.
ФОРТ представляет собой набор средств, включающий средства неограниченного
расширения виртуальной ФОРТ -машины, операционной системы, (мета)языка и т.д.
программирования не являются компонентами ФОРТ-системы. Это разные способы
рассмотрения одной и той же системы. Составляющими ФОРТа являются: кодофайл,
шитый код, словарная статья.

Кодофайл это динамически расширяемый набор данных, доступен как для
чтения/записи, так и для передачи управления. Расширяемость его обеспечивается
тем, что он примыкает к свободной области. Указатель (адрес) разделяющей
занятую и свободную области называ ют вершиной кодофайла. Команда HERE кладет
на стек данных значение вершины кодофайла. Отведение места на вершине
кодофайла производится командой ALLOT ( n -- ). Доступ к кодофайлу и делает
ФОРТ неограниченным для расширения. Поскольку на вершине кодофайл а можно
разместить любые структуры данных и программы (в том числе любые
интерпретаторы/компиляторы любых языков программирования). Шитый код и
словарная статья являются дисциплиной по представлению программ в рамках
ФОРТ-системы.

Шитый код является кодом виртуальной ФОРТ-машины. Шитый код представляет собой
идентификатор ФОРТ-программы (чаще всего, адресом точки входа). Особенностью
шитого кода является то, что воспринимаются элементарным интерпретатором.
Элементарный интерпретат ор это интерпретатор который ничего не знает об
операндах. Его задача сводится к извлечению очередной команды и передачи
управления. У шитого кода могут быть операнды, но обработкой их заниматся
программа вызванная интерпретатором в соответствии с кодом очередной команды.

Словарная статья это структура данных, которая определяет соответствие между
шитым кодом и его мнемоническим именем. Как правило, все
программы/подпрограммы ФОРТа оформлены в виде словарных статей.

--------------------------------------------------------------------------------
[1] которую, кстати, вы можете использовать как интерактивно из ФОРТ-системы,
так и в составе программы на ФОРТе

[2] Особенно это заметно в UNIX, в котором роль ассемблера выполняет
С-компилятор и создание и обслуживание ассемблера становится достаточно
нетривиальной задачей, связанной с хорошим знанием архитектуры конкретного
экземпляра ОС

[3] Метод построения интерфейсов и разбивка на компоненты -- так называемая
декомпозиция -- являющиеся базовыми методами построения ФОРТ -приложений
подробно описаны в [thinking].

[4] например, это может касаться блочных операций с виртуальной памятью
ФОРТ-системы в случае, если эта система работает под управлением ОС

================
http://akps.ssau.ru
forth@km.ru
FidoNet SU.FORTH 2:5057/18.29
tel.: +7 8462 28 9910 (work), 15 4313 (home)

Subscribe.Ru
Поддержка подписчиков
Другие рассылки этой тематики
Другие рассылки этого автора
Подписан адрес:
Код этой рассылки: comp.soft.prog.forth
Отписаться
Вспомнить пароль

В избранное