software.wikisort.org - Язык_программирования

Search / Calendar

Форт (англ. Forth) — один из первых конкатенативных языков программирования, в котором программы записываются последовательностью лексем («слов» в терминологии языка Форт). Математические выражения представляются постфиксной записью при использовании стековой нотации. Поддерживает механизмы метарасширения семантики и синтаксиса языка для адаптации к нужной предметной области. Синтаксис базового уровня в Форте прост и состоит из единственного правила: «все определения разделяются пробелами». Определения Форта могут иметь любое сочетание символов.

Forth
Семантика императивный
Класс языка язык программирования, интерпретируемый язык программирования и компилируемый язык программирования
Тип исполнения интерпретатор/компилятор
Появился в 1971 год
Автор Чарльз Х. Мур
Система типов бестиповый
Основные реализации gForth, pForth, kForth, SP-Forth[1], win32forth[2]
Диалекты FORTH-79, FORTH-83, ANSI FORTH 1994 года, ColorForth, RetroForth. Forth 2012 Standart
Испытал влияние АПЛ, Лисп
Повлиял на PostScript, Factor и другие конкатенативные языки
 Медиафайлы на Викискладе

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


История



Создание


Язык Форт был создан Чарльзом X. Муром в конце 1960-х — начале 1970-х годов. Мур назвал свой язык Fourth, считая, что это будет язык для ЭВМ четвёртого (англ. fourth) поколения. Но так как он работал на машине IBM 1130 (англ.), которая допускала имена, составленные не более чем из пяти прописных букв, название было преобразовано в FORTH (англ. forth — вперёд). Впрочем, первые эксперименты Мура по созданию простого интерпретатора, облегчающего написание программ управления астрономическим оборудованием, относятся ещё к концу 1950-х годов.[3]

С 1971 года Мур работал в Национальной радиоастрономической обсерватории, участвуя в разработке программ сбора и обработки получаемых радиотелескопом данных. Именно тогда появилась первая реализация языка Форт. В этой работе также участвовала сотрудница Мура Элизабет Ратер (англ. Elizabeth Rather), которую можно считать вторым в мире форт-программистом.

Вновь созданный язык был принят в качестве основного языка программирования в Американском астрономическом обществе. Позднее, в 1973 году, Чарльз Мур и Элизабет Ратер основали компанию FORTH, Inc[4], в ходе работы которой в течение следующего десятилетия язык был портирован на множество платформ.

В конце 1970-х годов программистами, заинтересованными в развитии языка, была создана группа FORTH Interest Group (FIG). Этой группой разработана концепция FIG Forth Model — общедоступной форт-системы, которая может быть легко перенесена на популярные компьютерные архитектуры. Эту эталонную форт систему — FIG-FORTH часто рассматривают как первоначальный стандарт языка.


Стандартизация


Идея официальной стандартизации Форта первоначально возникла в рамках Международного объединения астрономов (англ. Astronomical Sciences, AST). В мае 1977 года на встрече в Национальной обсерватории Китт-Пик (США) был выработан глоссарий языка Форт, обозначенный как AST.01.

В феврале 1978 года в Утрехте был принят стандарт FORTH-77, ориентированный на реализацию на микрокомпьютеры.

В октябре 1979 года встреча на острове Санта-Каталина (Калифорния) закончилась разработкой стандарта FORTH-79, который распространяется на ЭВМ всех типов.

Осенью 1983 года состоялась встреча по разработке следующего стандарта, утверждённого в 1984 году как FORTH-83. Стандарт Форт-83 отличается от стандарта Форт-79 некоторыми деталями, но не по существу.

В 1988 году в составе ACM была организована группа SIGFORTH[5]; была и соответствующая Российская группа ACM (председатель — проф. С. Н. Баранов (Санкт-Петербург, СПИИРАН)). Сейчас SIGFORTH существует в составе более общей группы SIGPLAN (англ.).

В 1994 году после продолжительного согласования, в котором участвовали многие заинтересованные фирмы, был принят ANSI стандарт языка Форт.[6]

Текущий стандарт языка Форт был принят в 2012 году.[7]


Дальнейшее развитие и примеры использования


Известный пример успешного применения Форта — его использование в программном обеспечении глубоководного спускаемого аппарата, при поисках «Титаника» в 1985 году. Также Форт был применён в программном обеспечении спектрографа на Шаттле, в микромодулях управления искусственными спутниками Земли, для системы управления в аэропорту Эр-Рияда, системах компьютерного зрения, автоматизации анализа крови и кардиологического контроля, карманных переводчиках.

Диалект языка Форт используется в OpenBoot — базовом программном обеспечении ЭВМ на базе процессоров SPARC и PowerPC.

В начале 1980-x Джон Уорнок и Чак Гешке из Adobe Systems создали язык PostScript[8]. Несмотря на сходство языков, Джон Уорнок отмечал[9], что Форт не оказал влияние на создание PostScript

Существуют процессоры и контроллеры, поддерживающие вычислительную модель языка на аппаратном уровне. Создано множество открытых реализаций Форта для различных аппаратных платформ. Отдельные фирмы (среди которых следует отметить прежде всего основанную Чарльзом Муром FORTH, Inc и британскую компанию MicroProcessor Engineering Ltd.[10]) поставляют различные по своим возможностям коммерческие версии языка.

Две домашние компьютерные игры от Electronic Arts, созданные в 1980-ых, были написаны на Форте: Worms? (1983)[11] и Starflight (1986).[12] В качестве языка для системного программирования в Canon Cat (1987) использовался Форт.

Ежегодно проводятся конференции ЕвроФорт (EuroForth), в том числе в России, Англии, Австрии, Германии, Испании, Чехии (ранее в Чехословакии).[13]


Основные понятия классической Форт-системы


Основная часть Форт-системы — это связный список слов, или словарь, из которого слово вызывается по имени для выполнения специфических функций. Программирование на Форте состоит в определении новых слов на основе слов, определённых в словаре ранее. Как только новые слова скомпилированы в словарь, они не отличаются по форме от слов, которые в нём уже имелись. Описание слова в словаре называется статьёй.

Структура «типичной» статьи словаря Форта:

Условно статьи Форта можно разделить на две категории: низкоуровневые статьи и форт-статьи. Статьи первого типа содержат в поле кода указатель на процедуру в кодах целевого процессора, непосредственно выполняющую семантику слова. В поле параметров таких статей располагаются передаваемые процедуре параметры, либо сам её код. Форт-статьи содержат в поле параметров указатели на другие статьи, а поле кода указывает на специальную процедуру, называемую интерпретатором ссылок. На практике структура статьи зависит от реализации, но, как правило, похожа на рассмотренную выше. Принцип, используемый внутри поля параметров форт-статьи, называется шитый код (англ. threaded code), а интерпретатор ссылок — виртуальной Форт-машиной.

Грамматически текст, обрабатываемый транслятором Форта, представляет собой последовательность лексем (англ. token), разделённых пробелами и символами конца строки. Транслятор входной строки выбирает очередной токен и производит его поиск в текущем словаре, причём поиск ведётся от более новых слов к старым. Если слово не найдено, предпринимается попытка интерпретировать токен в качестве записи числа, которое, в случае успеха, помещается на вершину стека. Если же токен соответствует слову Форта, анализируется текущее состояния флага compile Форт-системы. Если флаг сброшен, то слово исполняется — управление передаётся по указателю поля кода найденной статьи. Если флаг установлен, слово компилируется, то есть указатель на его поле кода дописывается в текущую создаваемую статью. Если было оттранслировано число, оно снимается со стека и компилируется в литеральный код, исполнение которого внутри словарной статьи помещает число на вершину стека. Кроме того, слова могут содержать флаг immediate («немедленный»), в этом случае они всегда исполняются.

Механизм передачи параметров между словами:

Язык предоставляет способ работы с памятью системы, как с линейной областью.

Обязательным компонентом системы является также стек возвратов. Доступен программно для изменения потока управления программы.

Всё вышесказанное относится к понятию Форт только в первом приближении. Форт — это не совсем язык программирования; вернее, он перекрывает понятие языка программирования. Форт в большей степени является виртуальной машиной и операционной системой ForthOS.[14]

Синтаксис и семантику Форта можно расширить до любого другого языка программирования прямо во время интерпретации (компиляции) форт-программы. Использовать Форт в качестве метаязыка удобно благодаря доступности средств Форта, поддерживающих те языки, которые уже есть в Форт-системе. Все ресурсы Форт-системы доступны пользователю и представлены в виде словарных статей. Как правило, словарные статьи, определённые пользователем, имеют точно такое же представление в Форт-системе, как и все остальные словарные статьи, из которых и состоит вся Форт-система.


Типы кода Форта


В качестве машинного представления скомпилированной форт-программы используется тот или иной вид шитого кода.

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

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

Одно из не совсем очевидных преимуществ использования косвенного шитого кода в том, что весь машинный код, то есть примитивы, вызовы интерпретатора кода и переменных, могут размещаться в одном сегменте кода, который будет недоступен для изменения. Весь остальной код Форта размещается в сегменте данных. Этих сегментов может быть много, а работать с единственным номером сегмента легче, чем с двумя.

Форт системы могут также использовать байт-код, как логическое завершение развития косвенного шитого кода и свёрнутого шитого кода с адресной таблицей. В этом случае код программы (Форта) представляет собой последовательность байтов, или код некоторого придуманного виртуального процессора. Для исполнения этого кода должна существовать таблица на 256 адресов (2-байтовых, 4- или 8-байтовых), по которым расположены примитивы Форта или сложные определения.

Этот вариант сильно отличается от других видов кода и заслуживает особого внимания.


Примеры программ


.( Привет Мир)

Пример определения слова .SIGN, печатающего соответствующую фразу в зависимости от знака числа на вершине стека:

\ Напечатать знак числа
: .SIGN ( n -- )
   ?DUP 0= IF
     ." НОЛЬ"
   ELSE
     0> IF
     ." ПОЛОЖИТЕЛЬНОЕ ЧИСЛО"  ELSE
     ." ОТРИЦАТЕЛЬНОЕ ЧИСЛО"  THEN
   THEN
;

Пример реального кода, создающего строчную константу в принятом в Форт виде (со счётчиком):

\ Создать "константу" из строки
: S-CONSTANT ( c-addr u "<spaces>name" -- )
   CREATE 
     DUP , 0 ?DO
       DUP C@ C, CHAR+
     LOOP DROP 0 C,
   DOES>
     DUP CELL+ SWAP @
;

В этом примере создаётся определение слова name с помощью слова CREATE. При исполнении слова name на стек будет положен адрес указателя области памяти, который был во время компиляции слова. Для того, чтобы его можно было как-то использовать, туда записывается («компилируется» строка). При выполнении слова выполняются слова, указанные после слова DOES>.

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

Кроме создания новых синтаксических конструкций, одной из самых сильных возможностей Форта является возможность вмешиваться в процесс компиляции с помощью слов немедленного исполнения (immediate-слов).

Примеры таких стандартных слов:

[ — Временное переключение в режим исполнения (фактически, часто просто записывает 0 в переменную STATE).

] — Переключиться обратно в режим компиляции.

LITERAL — Компилировать число, в данный момент лежащее на вершине стека, как константу. Также является словом немедленного исполнения.

Пример кода, где используются эти слова:

\ Некоторый размер данных в килобайтах
16 CONSTANT size
 
\ Напечатать отчёт о пересчёте килобайтов в байты
: report ( -- )
   size . ."  килобайт эквивалентны "
   [ size 1024 * ] LITERAL . ." байтам"
;

Особенности языка Forth


Одна из постоянных тем споров вокруг языка Форт — это место, которое он занимает среди «классических» императивных языков. Программы на Форте имеют крайне непривычный вид:

Йоды магистра тайна речи раскрыта:
Старым Форта программистом был он просто.

Эти особенности и определяют преимущества и недостатки языка Форт:

Возможно, что на самом деле больше всего развитию Форта препятствует «тяжёлое наследство», пришедшее от машин с низкими возможностями, для которых он изначально создавался. В стандарте ANSI FORTH 94 существуют, например, следующие особенности:

Многие из этих особенностей — следствие того, что на момент принятия стандарта существовало множество плохо совместимых Форт-систем, которые базировались на двух частично различающихся стандартах 1979 и 1983 годов.


См. также


Диалекты
Приложения

Примечания


  1. Проект SP-Forth на сайте SourceForge.net
  2. Win32Forth Project Group. Дата обращения: 18 августа 2006. Архивировано 13 августа 2006 года.
  3. C. H. Moore, E. D. Rather, D. R. Colburn. The Evolution of Forth. ACM SIGPLAN Notices, Volume 28, No. 3. March, 1993 / History of Programming Languages Conference (апрель 1993). Дата обращения: 19 февраля 2010. Архивировано 22 августа 2011 года.
  4. Embedded Systems Development and Programming Tools by FORTH, Inc. Дата обращения: 19 февраля 2010. Архивировано 4 января 2010 года.
  5. 22nd EuroForth Conference. Дата обращения: 19 февраля 2010. Архивировано 5 декабря 2008 года.
  6. DPANS’94. Дата обращения: 22 июля 2007. Архивировано 30 июня 2007 года.
  7. Forth. forth-standard.org. Дата обращения: 2 мая 2022. Архивировано 11 мая 2022 года.
  8. Adobe PostScript 3 — Resources. Дата обращения: 2 декабря 2006. Архивировано 3 января 2007 года.
  9. Федерико Бьянкуцци, Шейн Уорден. Пионеры программирования. Диалоги с создателями наиболее популярных языков программирования = Masterminds of Programming: Conversations with the Creators of Major Programming Languages. — Символ-Плюс, 2011. — С. 502. — 608 с. — ISBN 9785932861707.
  10. MPE — MicroProcessor Engineering Limited. Дата обращения: 19 февраля 2010. Архивировано 5 января 2010 года.
  11. Maynard, David S. David Maynard: Software Artist. Дата обращения: 27 июня 2021. Архивировано 15 июня 2021 года.
  12. Maher, Jimmy Starflight. The Digital Antiquarian (28 октября 2014). Дата обращения: 23 мая 2017. Архивировано 25 апреля 2017 года.
  13. EuroForth: European Forth Conference. Дата обращения: 24 января 2010. Архивировано 16 июня 2010 года.
  14. ForthWiki — ForthOS. Дата обращения: 1 февраля 2006. Архивировано 30 августа 2005 года.
  15. Ориджин пользователя Aquatix. Дата обращения: 12 августа 2012. Архивировано 9 февраля 2014 года.

Литература


Журнальные публикации

Ссылки


Стандарт
Русскоязычные ресурсы
Коллекции ссылок на форт-ресурсы



Текст в блоке "Читать" взят с сайта "Википедия" и доступен по лицензии Creative Commons Attribution-ShareAlike; в отдельных случаях могут действовать дополнительные условия.

Другой контент может иметь иную лицензию. Перед использованием материалов сайта WikiSort.org внимательно изучите правила лицензирования конкретных элементов наполнения сайта.

2019-2025
WikiSort.org - проект по пересортировке и дополнению контента Википедии