Privacy Policy Cookie Policy Terms and Conditions Forth (язык программирования) — Википедия

Forth (язык программирования)

Материал из Википедии — свободной энциклопедии

Forth
Семантика: императивный
Тип исполнения: интерпретатор/компилятор
Появился в: 1971 г.
Автор(ы): Чарльз Х. Мур
Типизация данных:
Основные реализации: gForth, pForth, kForth, SP-Forth,win32forth ...
Диалекты: FORTH-79, FORTH-83, ANSI FORTH 94 года.
Создан под влиянием: ассемблер, Лисп
Оказал влияние на:

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

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

В отличие от других языков программирования Форт не является плодом коллективного труда какого-либо комитета или коллектива учёных, он родился в голове одного человека — Чарльза X. Мура. В начале 1960-х годов Мура стало все больше не удовлетворять время и затраты труда, требовавшиеся для разработки программ на существовавших тогда ЭВМ. В течение нескольких лет он создал основы прототипа языка Форт, пользуясь для этого такими языками, как Алгол, Кобол, PL/I и ассемблер для IBM/360. Мур назвал свой язык Fourth, считая, что это будет язык для ЭВМ четвёртого (англ. fourth) поколения, однако ему приходилось работать на ЭВМ, которая допускала лишь пятибуквенные имена, составленные из прописных букв, поэтому название было преобразовано в FORTH, что символизировало его революционность (англ. forth — вперёд).

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

Базовый язык Форт общедоступен и бесплатно распространяется заинтересованной группой FORTH Interest Groop (FIG). Существует множество реализаций разработанных как отдельными лицами, так и группами. Часть фирм поставляет различные по своим возможностям коммерческие версии языка, но ещё важнее то, что организована группа по стандартизации языка Форт для того, чтобы написанные на нём программы могли бы работать на различных компьютерах с минимальными затратами на их адаптацию.

В феврале 1978 в Утрехте (Голландия) был разработан стандарт 1977 г. (FORTH-77), адресованный прежде всего пользователям микроЭВМ.

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

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


В 1994 году после продолжительных обсуждений многими фирмами был принят ANSI стандарт.

Из первых успехов применения языка можно отметить использование его в программном обеспечении глубоководного спускаемого аппарата, при поисках «Титаника» в 1985 году. Существуют процессоры и контроллеры, поддерживающие вычислительную модель языка.

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

На основе языка Форт Джоном Уорноком и Чаком Гешке из Adobe Systems в начале 80-xx годов XX в. был создан язык PostScript ([1]), широко используемый для управления устройствами печати и послуживший основой для создания формата документов PDF.

Содержание

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

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

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

  • поле имени — содержит имя статьи (идентификатор слова) в виде строки со счётчиком, а также несколько флагов.
  • поле связи — указатель на предыдущую статью.
  • поле кода — указатель на код для интерпретации статьи.
  • поле параметров — семантика слова (в зависимости от поля кода).

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

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

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

  • через стек данных;
  • через ячейки памяти;
  • через именованные локальные переменные (стандарт 1994 года).

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

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

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

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

[править] Пример кода

Абстрактный пример определяющий слово SORT. При обращении к SORT будет напечатана соответствующая фраза в зависимости от знака находящегося в стеке числа:

: SORT DUP 0> IF ." ПОЛОЖИТЕЛЬНОЕ ЧИСЛО" DROP
              ELSE 0=
                   IF ." НОЛЬ"
                   ELSE ." ОТРИЦАТЕЛЬНОЕ ЧИСЛО"
                   THEN
              THEN ;

[править] Книги

  • Баранов С. Н., Ноздрунов Н. Р. Язык Форт и его реализации. — Л.: Машиностроение, 1988.— 157 с. ISBN 5-217-00324-3
  • Броуди Л. Начальный курс программирования на Форте. — М.: Финансы и статистика, 1990.— 352 с. ISBN 5-279-00252-6
  • Дьяконов В. П. Форт-системы программирования персональных ЭВМ. — М.: Наука, 1992.— 352 с. ISBN 5-02-014460-6
  • Келли М., Спайс Н. Язык программирования Форт: Пер. с англ. — М.: Радио и связь, 1993.— 320 с. ISBN 5-256-00438-7
  • Семенов Ю. А. Программирование на языке Форт. — М.: Радио и связь, 1991.— 240с. ISBN 5-256-00547-2
  • Таунсенд К., Фохт Д. Проектирование и программная реализация экспертных систем на персональных ЭВМ: Пер. с англ. В. А. Кондратенко, С. В. Трубицына. — М.: Финансы и статистика, 1990. — 320 с.

[править] Ссылки


 
THIS WEB:

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - be - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - closed_zh_tw - co - cr - cs - csb - cu - cv - cy - da - de - diq - dv - dz - ee - el - eml - en - eo - es - et - eu - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gd - gl - glk - gn - got - gu - gv - ha - haw - he - hi - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mg - mh - mi - mk - ml - mn - mo - mr - ms - mt - mus - my - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - rm - rmy - rn - ro - roa_rup - roa_tara - ru - ru_sib - rw - sa - sc - scn - sco - sd - se - searchcom - sg - sh - si - simple - sk - sl - sm - sn - so - sq - sr - ss - st - su - sv - sw - ta - te - test - tet - tg - th - ti - tk - tl - tlh - tn - to - tokipona - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu

Static Wikipedia 2008 (no images)

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - en - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu -

Static Wikipedia 2007:

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - be - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - closed_zh_tw - co - cr - cs - csb - cu - cv - cy - da - de - diq - dv - dz - ee - el - eml - en - eo - es - et - eu - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gd - gl - glk - gn - got - gu - gv - ha - haw - he - hi - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mg - mh - mi - mk - ml - mn - mo - mr - ms - mt - mus - my - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - rm - rmy - rn - ro - roa_rup - roa_tara - ru - ru_sib - rw - sa - sc - scn - sco - sd - se - searchcom - sg - sh - si - simple - sk - sl - sm - sn - so - sq - sr - ss - st - su - sv - sw - ta - te - test - tet - tg - th - ti - tk - tl - tlh - tn - to - tokipona - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu

Static Wikipedia 2006:

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - be - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - closed_zh_tw - co - cr - cs - csb - cu - cv - cy - da - de - diq - dv - dz - ee - el - eml - en - eo - es - et - eu - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gd - gl - glk - gn - got - gu - gv - ha - haw - he - hi - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mg - mh - mi - mk - ml - mn - mo - mr - ms - mt - mus - my - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - rm - rmy - rn - ro - roa_rup - roa_tara - ru - ru_sib - rw - sa - sc - scn - sco - sd - se - searchcom - sg - sh - si - simple - sk - sl - sm - sn - so - sq - sr - ss - st - su - sv - sw - ta - te - test - tet - tg - th - ti - tk - tl - tlh - tn - to - tokipona - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu