~~~~~~~~~~~~~~~~~~~~ Arc.Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~ 
Номер скриншота №:
✰ B1026E31AEA904B49B670FB3A12CAA96__1716031980 ✰
Заголовок документа оригинал.:
✰ Forth (programming language) - Wikipedia ✰
Заголовок документа перевод.:
✰ Форт (язык программирования) — Википедия ✰
Снимок документа находящегося по адресу (URL):
✰ https://en.wikipedia.org/wiki/Forth_(programming_language) ✰
Адрес хранения снимка оригинал (URL):
✰ https://arc.ask3.ru/arc/aa/b1/96/b1026e31aea904b49b670fb3a12caa96.html ✰
Адрес хранения снимка перевод (URL):
✰ https://arc.ask3.ru/arc/aa/b1/96/b1026e31aea904b49b670fb3a12caa96__translat.html ✰
Дата и время сохранения документа:
✰ 21.06.2024 02:17:29 (GMT+3, MSK) ✰
Дата и время изменения документа (по данным источника):
✰ 18 May 2024, at 14:33 (UTC). ✰ 

~~~~~~~~~~~~~~~~~~~~~~ Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~~ 
Сервисы Ask3.ru: 
 Архив документов (Снимки документов, в формате HTML, PDF, PNG - подписанные ЭЦП, доказывающие существование документа в момент подписи. Перевод сохраненных документов на русский язык.)https://arc.ask3.ruОтветы на вопросы (Сервис ответов на вопросы, в основном, научной направленности)https://ask3.ru/answer2questionТоварный сопоставитель (Сервис сравнения и выбора товаров) ✰✰
✰ https://ask3.ru/product2collationПартнерыhttps://comrades.ask3.ru


Совет. Чтобы искать на странице, нажмите Ctrl+F или ⌘-F (для MacOS) и введите запрос в поле поиска.
Arc.Ask3.ru: далее начало оригинального документа

Форт (язык программирования) — Википедия Jump to content

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

Из Википедии, бесплатной энциклопедии
Форт
Парадигма конкатенативный ( на основе стека ), процедурный , рефлексивный
Разработано Чарльз Х. Мур
Впервые появился 1970 год ; 54 года назад ( 1970 )
Дисциплина набора текста Бестиповый
Расширения имен файлов .fs, .fth, .4th, .f, .forth [ нужна цитата ]
Веб-сайт четвертый стандарт .org
Основные реализации
SwiftForth (Форт, Инк.)
Гфорт (проект GNU)
VFX Форт (микропроцессорная инженерия)
Под влиянием
Биткойн-скрипт , Фактор , Джой , РПЛ , Ребол , СТОИК

Форт — это стек-ориентированный язык программирования и интерактивная интегрированная среда разработки , разработанный Чарльзом Х. «Чаком» Муром и впервые использованный другими программистами в 1970 году. Хотя это не аббревиатура , название языка в первые годы своего существования часто писалось заглавными буквами. как ФОРТ . Реализации FORTH-79 и FORTH-83, которые не были написаны Муром, стали стандартами де-факто , а официальный технический стандарт языка был опубликован в 1994 году как ANS Forth. До и после ANS Forth существовал широкий спектр производных Форта. бесплатного программного обеспечения с открытым исходным кодом Реализация Gforth активно поддерживается, как и несколько коммерчески поддерживаемых систем.

Форт обычно сочетает в себе компилятор со встроенной командной оболочкой. [а] где пользователь взаимодействует с помощью подпрограмм , называемых словами . Слова можно определять, тестировать, переопределять и отлаживать без перекомпиляции или перезапуска всей программы. Все синтаксические элементы, включая переменные, операторы и поток управления, определяются как слова. Стек используется для передачи параметров между словами, что приводит к стилю обратной польской нотации .

На протяжении большей части существования Форта стандартным методом была компиляция в многопоточный код , который можно интерпретировать быстрее, чем байт-код . Одним из первых преимуществ Форта был размер: вся среда разработки, включая компилятор, редактор и пользовательские программы, могла поместиться в памяти 8-битной или аналогичной ограниченной системы. Существуют современные реализации, которые больше не ограничены пространством и генерируют оптимизированный машинный код, как и компиляторы других языков. Относительная простота создания базовой системы Форта привела к появлению множества личных и частных вариантов, таких как специальный Форт, используемый для реализации бестселлера 1986 года видеоигры Starflight от Electronic Arts . [1]

Форт используется в Open Firmware загрузчике , в космических полетов . приложениях [2] такие как космический корабль Филе , [3] [4] и в других встроенных системах, которые требуют взаимодействия с аппаратным обеспечением.

Мур разработал серию микропроцессоров для прямого выполнения скомпилированного Forth-подобного кода и экспериментировал с меньшими языками, основанными на концепциях Forth, включая cmForth и colorForth . Большинство этих языков были разработаны для поддержки собственных проектов Мура, таких как проектирование микросхем.

Использует [ править ]

Форт занимает свою нишу в астрономических и космических приложениях. [5] а также история встроенных систем . с открытой прошивкой, Загрузочные ПЗУ используемые Apple , IBM , Sun и OLPC XO-1, содержат среду Forth.

Форт часто использовался для создания нового оборудования. Forth был первым резидентным программным обеспечением на новом чипе Intel 8086 в 1978 году, а MacFORTH был первой резидентной системой разработки для Macintosh 128K в 1984 году. [6]

Atari, Inc. использовала тщательно продуманную анимированную демонстрацию, написанную на Форте, для демонстрации возможностей 8-битных компьютеров Atari в универмагах. [7] Electronic Arts опубликовала в 1980-х годах несколько видеоигр, написанных на Форте, включая Worms? (1983), [8] Приключенческий конструктор (1984), [9] Амнезия (1986), [10] Звездный полет (1986), [1] и Лорды завоеваний (1986). Игра по программированию роботов ChipWits (1984) была написана на MacFORTH. [11]

RapidFile Эштона-Тейта (1986), программа базы данных в виде плоских файлов, и VP-Planner. [12] от Paperback Software International Программа для работы с электронными таблицами (1983), конкурирующая с Lotus 1-2-3 , была написана на Форте.

Canon Cat (1987) использует Форт для системного программирования.

Rockwell производила однокристальные микрокомпьютеры с резидентным ядром Forth: R65F11 и R65F12. ASYST был расширением Форта для измерения и управления на ПК. [13]

История [ править ]

Форт произошел от персональной системы программирования Чарльза Х. Мура , которая постоянно развивалась с 1968 года. [6] Впервые Форт познакомился с другими программистами в начале 1970-х годов, начиная с Элизабет Разер США из Национальной радиоастрономической обсерватории (NRAO). [6] После работы в NRAO Чарльз Мур и Элизабет Разер в 1973 году основали компанию FORTH, Inc., которая в течение следующего десятилетия доработала и перенесла системы Forth на десятки других платформ.

Форт назван так потому, что в 1968 году «файл, содержащий интерпретатор, был помечен как ЧЕТВЕРТЫЙ для программного обеспечения 4-го (следующего) поколения, но операционная система IBM 1130 ограничивала имена файлов пятью символами». [14] Мур видел в Форте преемника языков программирования третьего поколения , то есть программного обеспечения для аппаратного обеспечения «четвертого поколения».

MicroFORTH компании FORTH, Inc. был разработан для микропроцессоров Intel 8080 , Motorola 6800 , Zilog Z80 и RCA 1802 , начиная с 1976 года. Позже MicroFORTH использовался любителями для создания систем Forth для других архитектур, таких как 6502 в 1978 году. Четвертая группа интересов была создана в 1978 году. [15] Она продвигала и распространяла собственную версию языка Fig-Forth для большинства моделей домашних компьютеров.

Форт был популярен в начале 1980-х годов. [16] потому что он хорошо подходил для ограниченной памяти микрокомпьютеров . Простота реализации языка привела к множеству реализаций. [17] Домашний компьютер Jupiter ACE имеет Forth в своей резидентной в ПЗУ операционной системе. Insoft GraFORTH — это версия Forth с графическими расширениями для Apple II. [18]

Общая практика была закреплена в стандартах де-факто FORTH-79. [19] и ФОРТ-83 [20] в 1979 и 1983 годах соответственно. Эти стандарты были унифицированы ANSI в 1994 году и обычно называются ANS Forth. [21] [22]

По состоянию на 2018 год исходный код исходной версии FORTH 1130 был восстановлен и теперь обновляется для работы на восстановленной или эмулируемой системе 1130. [23]

Обзор [ править ]

В Форте особое внимание уделяется использованию небольших простых функций, называемых словами . Слова для более крупных задач требуют множества более мелких слов, каждое из которых выполняет отдельную подзадачу. Большая программа на Форте представляет собой иерархию слов. Эти слова, представляющие собой отдельные модули, которые неявно взаимодействуют через механизм стека, могут быть прототипированы, построены и протестированы независимо. Самый высокий уровень кода Forth может напоминать англоязычное описание приложения. Форт называют языком метаприложений : языком, который можно использовать для создания проблемно-ориентированных языков . [24]

Форт опирается на явное использование стека данных и обратную польскую нотацию , которая обычно используется в калькуляторах Hewlett-Packard . В RPN оператор помещается после своих операндов, в отличие от более распространенной инфиксной записи , где оператор помещается между операндами. Постфиксная нотация упрощает синтаксический анализ и расширение языка; Гибкость Форта делает статическую грамматику BNF неприемлемой, и у него нет монолитного компилятора. Расширение компилятора требует всего лишь написания нового слова вместо изменения грамматики и изменения базовой реализации.

Используя РПН, можно получить результат математического выражения (25 * 10 + 50) Сюда:

 25   10   *   50   +   СР   . 
   300   ок 

Сначала в стек кладутся числа 25 и 10.


Слово * берет два верхних числа из стека, умножает их и помещает произведение обратно в стек.

Затем число 50 помещается в стек.


Слово + добавляет два верхних значения, помещая сумму. CR( возврат каретки ) начинает вывод с новой строки. Окончательно, .печатает результат. Поскольку все завершилось успешно, система Форта печатает OK. [25]

Даже структурные особенности Форта основаны на стеках. Например:

 :   FLOOR5   (n -- n')     DUP   6   <   IF   DROP   5   ELSE   1   -   THEN   ; 

Двоеточие указывает на начало нового определения, в данном случае нового слова (опять же, слово — это термин, используемый для подпрограммы), называемого FLOOR5. Текст в круглых скобках представляет собой комментарий, сообщающий, что это слово ожидает число в стеке и вернет возможно измененное число (в стеке).

В подпрограмме используются следующие команды: DUP дублирует число в стеке; 6 помещает 6 на вершину стека; < сравнивает два верхних числа в стеке (6 и DUPed input) и заменяет их значением true или false; IF принимает значение «истина» или «ложь» и выбирает выполнение команд сразу после него или переход к ELSE; DROP отбрасывает значение в стеке; 5помещает 5 на вершину стека; и THEN завершает условное предложение.

The FLOOR5 слово эквивалентно этой функции, написанной на языке программирования C с использованием условного оператора '?:'

intfloor5   (  int   v  )   { 
   return   (  v   <   6  )   ?    5   :   (  в   -   1  ); 
  } 

Более кратко эта функция записывается так:

 :   ЭТАЖ 5   ( n -- n'   1-5   МАКС   ;   ) 

Это можно запустить следующим образом:

 1   ЭТАЖ 5   CR   . 
   5   ок 
  8   ЭТАЖ   5 CR   . 
   7   ок 

Сначала в стек помещается число (1 или 8), FLOOR5 вызывается, который снова извлекает число и отправляет результат. CRперемещает вывод на новую строку (опять же, это сделано только для удобства чтения). Наконец, звонок в . выдает результат и печатает.

Удобства [ править ]

Форта Грамматика не имеет официальной спецификации. Вместо этого он определяется простым алгоритмом. Интерпретатор считывает строку ввода с пользовательского устройства ввода, которая затем анализируется на наличие слова, используя пробелы в качестве разделителя ; некоторые системы распознают дополнительные символы пробелов . Когда переводчик находит слово, он ищет его в словаре . Если слово найдено, интерпретатор выполняет код, связанный с этим словом, а затем возвращается для анализа остальной части входного потока. Если слово не найдено, оно считается числом и делается попытка преобразовать его в число и поместить в стек; в случае успеха интерпретатор продолжает анализ входного потока. В противном случае, если и поиск, и преобразование чисел завершаются неудачей, интерпретатор печатает слово, за которым следует сообщение об ошибке, указывающее, что слово не распознано, сбрасывает входной поток и ожидает ввода нового пользователя. [26]

Определение нового слова начинают со слова : (двоеточие) и заканчивается словом ;(точка с запятой). Например,

 :   Х   ДУП   1+   .    .    ; 

составлю слово Xи делает имя доступным для поиска в словаре. При выполнении путем ввода 10 X на консоли это будет напечатано 11 10. [27]

Большинство систем Форта включают в себя ассемблер для записи слов с использованием возможностей процессора. Ассемблеры Форта часто используют обратный польский синтаксис, в котором параметры инструкции предшествуют инструкции. Типичный обратный польский ассемблер подготавливает операнды в стеке, а мнемоника копирует всю инструкцию в память на последнем этапе. Ассемблер Форта по своей природе является ассемблером макросов, поэтому легко определить псевдоним для регистров в соответствии с их ролью в системе Форт: например, «dsp» для регистра, используемого в качестве указателя стека данных. [28]

, файлы и многозадачность Операционная система

Большинство систем Forth работают под управлением операционной системы хоста, такой как Microsoft Windows , Linux или версия Unix, и используют файловую систему операционной системы хоста для исходных файлов и файлов данных; Стандарт ANSI Forth описывает слова, используемые для ввода-вывода. Все современные системы Forth используют в качестве исходного кода обычные текстовые файлы, даже если они встроены. Встроенная система с резидентным компилятором получает исходный код по последовательному каналу.

Классические системы Forth традиционно не используют ни операционную систему , ни файловую систему . Вместо хранения кода в файлах исходный код хранится в дисковых блоках, записанных по адресам физических дисков. Слово BLOCKиспользуется для перевода номера блока дискового пространства размером 1 КБ в адрес буфера, содержащего данные, который автоматически управляется системой Forth. Использование блоков стало редким явлением с середины 1990-х годов. В размещенной системе эти блоки в любом случае также размещаются в обычном файле.

Многозадачность , чаще всего совместное циклическое планирование , обычно доступна (хотя слова и поддержка многозадачности не охватываются стандартом ANSI Forth). Слово PAUSEиспользуется для сохранения контекста выполнения текущей задачи, поиска следующей задачи и восстановления контекста ее выполнения. Каждая задача имеет свои стеки, частные копии некоторых управляющих переменных и рабочую область. Обмен задачами прост и эффективен; в результате многозадачность Форта доступна даже на очень простых микроконтроллерах , таких как Intel 8051 , Atmel AVR и TI MSP430 . [29]

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

Самокомпиляция и кросс-компиляция [ править ]

Полнофункциональная система Forth со всем исходным кодом скомпилируется сама. Этот метод программисты Forth обычно называют мета-компиляцией или самостоятельным размещением (хотя этот термин не совсем соответствует мета-компиляции в том смысле, в котором он обычно определяется). Обычный метод — переопределить несколько слов, которые помещают скомпилированные биты в память. В словах компилятора используются специально названные версии операций выборки и сохранения, которые можно перенаправить в буферную область памяти. Буферная область имитирует или осуществляет доступ к области памяти, начинающейся с адреса, отличного от адреса буфера кода. Такие компиляторы определяют слова для доступа как к памяти целевого компьютера, так и к памяти главного (компилирующего) компьютера. [30]

После того, как операции выборки и сохранения переопределены для пространства кода, компилятор, ассемблер и т. д. перекомпилируются с использованием новых определений выборки и сохранения. Это эффективно повторно использует весь код компилятора и интерпретатора. Затем код системы Форт компилируется, но эта версия сохраняется в буфере. Буфер в памяти записывается на диск, и предусмотрены способы его временной загрузки в память для тестирования. Когда новая версия работает, она записывается поверх предыдущей версии.

Существуют многочисленные варианты таких компиляторов для разных сред. Для встроенных систем код вместо этого может быть записан на другой компьютер (метод, известный как кросс-компиляция) , через последовательный порт или даже один бит TTL , сохраняя при этом имена слов и другие неисполняемые части словаря в исходной компиляции. компьютер. Минимальными определениями для такого компилятора Форта являются слова, которые извлекают и сохраняют байт, и слово, которое командует выполнить слово Форта. Часто наиболее трудоемкой частью написания удаленного порта является построение исходной программы для реализации выборки, сохранения и выполнения, но многие современные микропроцессоры имеют встроенные функции отладки (например, Motorola CPU32 ), которые устраняют эту задачу. [31]

Структура языка [ править ]

Базовая структура данных Форта — это «словарь», который отображает «слова» в исполняемый код или именованные структуры данных. Словарь размещается в памяти в виде дерева связанных списков со ссылками, идущими от самого последнего (самого последнего) определенного слова к самому старому, пока не будет найдено контрольное значение , обычно это NULL-указатель. Переключение контекста приводит к запуску поиска по списку на другом листе. Поиск по связанному списку продолжается по мере того, как ветвь сливается с основным стволом и в конечном итоге возвращается к дозорному корню. Словарей может быть несколько. В редких случаях, таких как метакомпиляция, словарь может быть изолированным и автономным. Эффект напоминает эффект вложения пространств имен и может перегружать ключевые слова в зависимости от контекста.

Определенное слово обычно состоит из заголовка и тела , причем заголовок состоит из поля имени (NF) и поля ссылки (LF), а тело состоит из поля кода (CF) и поля параметра (PF).

Голова и тело словарной статьи рассматриваются отдельно, поскольку они могут не быть смежными. Например, когда программа на Форте перекомпилируется для новой платформы, голова может оставаться на компилирующем компьютере, а тело переходит на новую платформу. В некоторых средах (например, во встроенных системах ) головки занимают память без необходимости. Однако некоторые кросс-компиляторы могут помещать головы в цель, если ожидается, что сама цель будет поддерживать интерактивный Форт. [32]

Точный формат словарной статьи не предписан, и реализации различаются.

Структура компилятора [ править ]

Сам компилятор не является монолитной программой. Он состоит из слов Форта, видимых системе и доступных для использования программистом. Это позволяет программисту изменять слова компилятора для специальных целей.

Флаг «время компиляции» в поле имени устанавливается для слов с поведением «время компиляции». Большинство простых слов выполняют один и тот же код независимо от того, вводятся ли они в командной строке или встроены в код. При их компиляции компилятор просто помещает в слово код или связанный указатель. [27]

Классическими примерами слов времени компиляции являются управляющие структуры , такие как IF и WHILE. Почти все управляющие структуры Форта и почти весь его компилятор реализованы как слова времени компиляции. За исключением некоторых редко используемых слов потока управления , встречающихся только в нескольких реализациях, таких как слово условного возврата ?EXIT используется в preForth Ульриха Хоффмана, [33] [34] Форта все слова потока управления выполняются во время компиляции для компиляции различных комбинаций примитивных слов вместе с адресами их ветвей. Например, IF и WHILE, и слова, соответствующие им, задайте BRANCH (безусловная ветвь) и ?BRANCH(извлеките значение из стека и выполните ветвление, если оно ложно). счетным циклом Слова потока управления работают аналогично, но создают комбинации примитивных слов, которые работают со счетчиком, и так далее. Во время компиляции стек данных используется для поддержки балансировки структуры управления, вложения и обратного исправления адресов ветвей. Фрагмент:

 ...   DUP   6   <   ЕСЛИ   DROP   5   ELSE   1   -   THEN   ... 

часто компилируется в следующую последовательность внутри определения:

 ...   DUP   LIT   6   <   ?BRANCH   5    DROP   LIT   5    BRANCH   3    LIT   1   -   ... 

Цифры после BRANCH представляют относительные адреса перехода. LIT— это примитивное слово для помещения «буквального» числа в стек данных. (Более быстрый и более короткий код будет скомпилирован с использованием указателей на константы вместо LITи встроенные данные, если какое-либо из задействованных чисел отдельно определено как константа. Аналогичные изменения произошли бы, если бы вместо констант использовались другие слова и так далее.)

Состояние компиляции и состояние интерпретации [ править ]

Слово :(двоеточие) анализирует имя как параметр, создает словарную запись ( определение двоеточия ) и переходит в состояние компиляции. Интерпретатор продолжает считывать слова, разделенные пробелами, с пользовательского устройства ввода. Если слово найдено, интерпретатор выполняет семантику компиляции, связанную с этим словом, вместо семантики интерпретации . Семантика компиляции слова по умолчанию заключается в добавлении семантики его интерпретации к текущему определению. [27]

Слово ;(точка с запятой) завершает текущее определение и возвращается в состояние интерпретации. Это пример слова, семантика компиляции которого отличается от значения по умолчанию. Интерпретационная семантика ; (точка с запятой), большинство слов потока управления и некоторые другие слова не определены в ANS Forth, а это означает, что их следует использовать только внутри определений, а не в интерактивной командной строке. [27]

Состояние интерпретатора можно изменить вручную словами [ (левая скобка) и ](правая скобка), которые переходят в состояние интерпретации или состояние компиляции соответственно. Эти слова можно использовать со словом LITERAL для вычисления значения во время компиляции и вставки вычисленного значения в текущее определение двоеточия. LITERAL имеет семантику компиляции, позволяющую брать объект из стека данных и добавлять семантику к текущему определению двоеточия, чтобы поместить этот объект в стек данных.

В ANS Forth текущее состояние интерпретатора можно прочитать по флагу STATEкоторый содержит значение true в состоянии компиляции и false в противном случае. Это позволяет реализовать так называемые слова с интеллектуальным состоянием , поведение которых меняется в зависимости от текущего состояния интерпретатора.

Непосредственные слова [ править ]

Слово IMMEDIATE отмечает самое последнее определение двоеточия как непосредственное слово , эффективно заменяя его семантику компиляции семантикой интерпретации. [35] Непосредственные слова обычно выполняются во время компиляции, а не компилируются, но это может быть отменено программистом в любом состоянии. ;является примером непосредственного слова. В ANS Forth слово POSTPONEпринимает имя в качестве параметра и добавляет семантику компиляции именованного слова к текущему определению, даже если слово было помечено как немедленное. Форт-83 определил отдельные слова COMPILE и [COMPILE] для принудительной компиляции непрямых и непосредственных слов соответственно.

Вместо резервирования места для флага Immediate в каждом определении некоторые реализации Forth используют словарь Immediate, который проверяется первым в режиме компиляции.

Безымянные слова и токены выполнения [ править ]

В ANS Forth безымянные слова можно определить с помощью слова :NONAME который компилирует следующие слова до следующего ;(точка с запятой) и оставляет токен выполнения в стеке данных. Маркер выполнения предоставляет непрозрачный дескриптор скомпилированной семантики, аналогичный указателям на функции языка программирования C.

Токены выполнения могут храниться в переменных. Слово EXECUTEберет токен выполнения из стека данных и выполняет соответствующую семантику. Слово COMPILE, (compile-comma) берет токен выполнения из стека данных и добавляет связанную семантику к текущему определению.

Слово '(галочка) принимает имя слова в качестве параметра и возвращает токен выполнения, связанный с этим словом в стеке данных. В состоянии интерпретации ' RANDOM-WORD EXECUTE эквивалентно RANDOM-WORD. [36]

Разбор слов и комментариев [ править ]

Слова : (двоеточие), POSTPONE, '(галочка) — примеры синтаксического анализа слов , которые получают аргументы из устройства пользовательского ввода, а не из стека данных. Другой пример – слово ((круглая скобка), которая считывает и игнорирует следующие слова до следующей правой скобки включительно и используется для размещения комментариев в определении через двоеточие. Аналогично, слово \(обратная косая черта) используется для комментариев, продолжающихся до конца текущей строки. Чтобы правильно разобрать, ( (родитель) и \ (обратная косая черта) должна быть отделена пробелом от следующего текста комментария.

Структура кода [ править ]

В большинстве систем Форта тело определения кода состоит либо из машинного языка , либо из некоторой формы многопоточного кода . Исходный язык Forth, который следует неофициальному стандарту Fig (группа интересов Forth), представляет собой TIL (поточный интерпретирующий язык). Это также называется кодом с непрямой резьбой, но Форты с прямой резьбой и подпрограммами также стали популярными в наше время. Самые быстрые современные Форты, такие как SwiftForth, VFX Forth и iForth, компилируют Форт в собственный машинный код.

Объекты данных [ править ]

Когда слово является переменной или другим объектом данных, CF указывает на код времени выполнения, связанный с определяющим словом, которое его создало. Определяющее слово имеет характерное «определяющее поведение» (создание словарной статьи плюс, возможно, выделение и инициализация пространства данных), а также определяет поведение экземпляра класса слов, созданного этим определяющим словом. Примеры включают в себя:

VARIABLE
Называет неинициализированную ячейку памяти, состоящую из одной ячейки. Поведение экземпляра VARIABLE возвращает свой адрес в стеке.
CONSTANT
Называет значение (заданное как аргумент CONSTANT). Поведение экземпляра возвращает значение.
CREATE
Называет место; В этом месте может быть выделено пространство или оно может содержать строку или другое инициализированное значение. Поведение экземпляра возвращает адрес начала этого пространства.

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

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

Форт не обеспечивает согласованность использования типов данных ; Программист несет ответственность за использование соответствующих операторов для извлечения и сохранения значений или выполнения других операций с данными.

Примеры [ править ]

"Привет, мир!" [ редактировать ]

 :   ПРИВЕТ    ( -- )    CR   «   Привет, мир!  »   ; 
ПРИВЕТ, <cr>
 Привет, мир!
 

Слово CR(Возврат каретки) приводит к отображению следующего вывода на новой строке. Слово для разбора ."(точечная кавычка) считывает строку, разделенную двойными кавычками, и добавляет код к текущему определению, чтобы проанализированная строка отображалась при выполнении. Пробел, разделяющий слово ." из строки Hello, World!не включается как часть строки. Это нужно для того, чтобы парсер распознал ." как слово Форта.

Стандартная система Форта также является интерпретатором, и тот же результат можно получить, введя в консоль Форта следующий фрагмент кода:

 ЧР   .   ( Привет, мир!) 

.((dot-paren) — это непосредственное слово, которое анализирует строку, разделенную круглыми скобками, и отображает ее. Как и слово ." пробел, разделяющий .( от Hello, World! не является частью строки.

Слово CRидет перед текстом для печати. По соглашению интерпретатор Forth не начинает вывод с новой строки. Также по соглашению интерпретатор ожидает ввода в конце предыдущей строки после okбыстрый. В языке Форта нет подразумеваемого действия «очистки буфера». CR, как иногда бывает в других языках программирования.

Смешение состояний компиляции и интерпретации [ править ]

Вот определение слова EMIT-Q который при выполнении выдает один символ Q:

 :   EMIT-Q     81   (значение ASCII для символа «Q»)   EMIT   ; 

Это определение было написано для использования ASCII значения Qсимвол (81) напрямую. Текст в скобках является комментарием и игнорируется компилятором. Слово EMIT берет значение из стека данных и отображает соответствующий символ.

Следующее переопределение EMIT-Q использует слова [ (левая скобка), ] (правая скобка), CHAR и LITERAL чтобы временно переключиться в состояние интерпретатора, вычислите значение ASCII Q символ, вернитесь в состояние компиляции и добавьте вычисленное значение к текущему определению двоеточия:

 :   EMIT-Q     [   CHAR   Q   ]    ЛИТЕРАЛ    EMIT   ; 

Слово для разбора CHARпринимает в качестве параметра слово, разделенное пробелами, и помещает значение его первого символа в стек данных. Слово [CHAR] является немедленной версией CHAR. С использованием [CHAR], пример определения для EMIT-Q можно было бы переписать так:

 :   EMIT-Q     [CHAR]   Q    EMIT   ;    \ Выдайте одиночный символ «Q» 

Это определение использовалось \ (обратная косая черта) для описывающего комментария.

Оба CHAR и [CHAR]предопределены в ANS Forth. С использованием IMMEDIATE и POSTPONE, [CHAR] можно было бы определить так:

 :   [CHAR]     CHAR    POSTPONE   LITERAL   ;    НЕМЕДЛЕННЫЙ 

Программа шифрования RC4 [ править ]

В 1987 году Рон Ривест разработал RC4 систему шифрования для RSA Data Security, Inc. Ее описание следующее:

У нас есть массив 256 байт, все разные. Каждый раз, когда массив используется, он изменяется путем замены двух байтов. Обмены контролируются счетчиками i и j , каждый из которых изначально равен 0. Чтобы получить новый i , добавьте 1. Чтобы получить новый j , добавьте байт массива в новый i . Поменяйте местами байты массива в i и j . Код представляет собой байт массива, представляющий собой сумму байтов массива в точках i и j . Это операция XOR с байтом открытого текста для шифрования или зашифрованного текста для расшифровки. Массив инициализируется, сначала устанавливая для него значения от 0 до 255. Затем последовательно просматривайте его, используя i и j , получая новый j , добавляя к нему байт массива в позиции i и ключевой байт, а также меняя местами байты массива в позициях i и j . Наконец, i и j устанавливаются в 0. Все сложения производятся по модулю 256.

В следующей версии стандартного Форта используются только слова Core и Core Extension.

0   значение   ii          0   значение   jj 
 0   значение   KeyAddr     0   значение   KeyLen 
 create   SArray     256   выделение     \ состояние массива из 256 байтов 
 :   KeyArray        KeyLen   mod     KeyAddr   ; 

  :   get_byte        +   с@   ; 
  :   set_byte        +   c!    ; 
  :   as_byte         255   и   ; 
  :   reset_ij        0   TO   ii     0   TO   jj   ; 
  :   i_update        1   +     as_byte   TO   ii   ; 
  :   j_update        ii   SArray   get_byte   +     as_byte   TO   jj   ; 
  :   swap_s_ij 
     jj   SArray   get_byte 
        ii   SArray   get_byte    jj   SArray   set_byte 
     ii   SArray   set_byte 
 ; 

  :   rc4_init   (KeyAddr KeyLen --) 
     256   мин   TO   KeyLen     TO   KeyAddr 
     256   0   DO     i   i   SArray   set_byte     LOOP 
     reset_ij 
     BEGIN 
         ii   KeyArray   get_byte     jj   +    j_update 
         swap_s_ij 
         ii   255   <   WHILE 
         ii   i_update 
     REPEAT 
     reset_ij 
 ; 
  :   rc4_byte 
     ii   i_update     jj   j_update 
     swap_s_ij 
     ii   SArray   get_byte     jj   SArray   get_byte   +     as_byte   SArray   get_byte    xor 
 ; 

Это один из способов проверить код:

hex 
 create   AKey     61   c,   8  A   c,   63   c,   D2   c,   FB   c, 
 :   test     cr     0   DO    rc4_byte   .    ПЕТЛЯ    кр   ; 
  AKey   5   rc4_init 
 2  C   F9   4  C   EE   DC    5   тест     \ вывод должен быть: F1 38 29 C9 DE 

Реализации [ править ]

Поскольку Форт прост в реализации и не имеет стандартной эталонной реализации, существует множество версий языка. Помимо поддержки стандартных разновидностей настольных компьютерных систем ( POSIX , Microsoft Windows , macOS ), многие из этих систем Forth также предназначены для различных встроенных систем . Здесь перечислены некоторые системы, соответствующие стандарту ANS Forth 1994 года.

  • ASYST, Форт-подобная система для сбора и анализа данных. [38]
  • Gforth , портативная реализация ANS Forth из проекта GNU.
  • noForth , реализация ANS Forth (насколько это возможно) для Flash-микроконтроллеров (MSP430 и Risc-V).
  • Open Firmware , загрузчик и стандарт прошивки на основе ANS Forth.
  • pForth , портативный язык Forth, написанный на C.
  • SP-Forth, реализация ANS Forth от Российской группы Forth Interest Group (RuFIG)
  • Swift Forth, реализация генерации машинного кода от Forth, Inc.
  • VFX Forth, оптимизация собственного кода Forth
  • Ферт — адаптация Форта для компьютера Little Man Stack Machine.

См. также [ править ]

  • RTX2010 , процессор, который изначально работает на Forth

Примечания [ править ]

  1. ^ Есть исключения, такие как preForth Ульриха Хоффмана [1] [2] и TCOM Тома Циммера.

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

  1. ^ Перейти обратно: а б Махер, Джимми (28 октября 2014 г.). «Звездный полет» . Цифровой антиквар . Проверено 29 апреля 2023 г.
  2. ^ Приложения НАСА на Форте (исходный сервер НАСА больше не работает, копия с archive.org)
  3. ^ «Процессоры Intersil RTX и программное обеспечение Forth контролировали успешную посадку Philae» (PDF) . Микропроцессор Инжиниринг Лимитед . 13 октября 2014 года . Проверено 29 апреля 2023 г.
  4. ^ «А вот и Philae! На базе RTX2010» . Музей «Хажина процессора» . 12 октября 2014 года . Проверено 29 апреля 2023 г.
  5. ^ «Применения Форта в космосе» . Архивировано из оригинала 24 октября 2010 г. Проверено 4 сентября 2007 г.
  6. ^ Перейти обратно: а б с Вернее, Элизабет Д.; Колберн, Дональд Р.; Мур, Чарльз Х. (1996) [1993]. «Эволюция Форта» . В Бергине, Томас Дж.; Гибсон, Ричард Г. (ред.). История языков программирования---II . Ассоциация вычислительной техники. стр. 625–670. дои : 10.1145/234286.1057832 . ISBN  0201895021 .
  7. ^ «Демонстрационная программа Atari в магазинах» . Атари Мания .
  8. ^ Мейнард, Дэвид С. «Дэвид Мейнард: художник-программист» .
  9. ^ Джон Ромеро (23 сентября 2020 г.). «Искажение времени: Эпизод 9 - Стюарт Смит» (подкаст). Событие происходит в 29:02.
  10. ^ Эйкок, Джон (2023). Вспомнилась амнезия: обратный инжиниринг цифрового артефакта . Книги Бергана. п. 79. ИСБН  978-1800738676 .
  11. ^ Шарп, Дуг (8 апреля 2023 г.). «Язык программирования FORTH (Вперед)» .
  12. ^ «ФОРТ ПОЛУЧАЕТ СВОЮ СПЕЦИАЛЬНУЮ ГРУППУ ПО ЗАИНТЕРЕСАМ» . Технический монитор . 6 февраля 1989 г.
  13. ^ Кэмпбелл и др., «Настройка и работа с Asyst 2.0», MacMillan Software Co., 1987 г.
  14. ^ Мур, Чарльз Х (1991). «Четвертый – Ранние годы» . Архивировано из оригинала 15 июня 2006 г. Проверено 3 июня 2006 г.
  15. ^ «Спецификация ANS 1994, Приложение C («Перспектива»)» . taygeta.com .
  16. ^ «Четвертый язык» , журнал BYTE , 5 (8), 1980 г.
  17. ^ М. Антон Эртл. «Четвертое генеалогическое древо и хронология» .
  18. ^ Клэй, Пол (1982). «Руководство по языку GraFORTH» . archive.org Инсофт
  19. ^ «Стандарт Форт-79» (PDF) . Проверено 29 апреля 2023 г.
  20. ^ «Стандарт Форт-83» .
  21. ^ «Языки программирования: Форт» . Технический комитет ANSI X3J14. 24 марта 1994 года . Проверено 3 июня 2006 г.
  22. ^ «Справочник по стандарту Forth (ANSI INCITS 215-1994)» (PDF) . Портативное программное обеспечение Quartus. 13 сентября 2005 г. Проверено 29 апреля 2023 г.
  23. ^ Клаунч, Карл (2 марта 2018 г.). «Восстановление исходного кода FORTH на IBM 1130» . спасение1130 . Проверено 30 июля 2018 г.
  24. ^ Броди, Лео (1987). Начиная вперед (2-е изд.). Прентис-Холл. ISBN  978-0-13-843079-5 .
  25. ^ Броди 1987 , с. 20
  26. ^ Броди 1987 , с. 14
  27. ^ Перейти обратно: а б с д Броди 1987 , с. 16
  28. ^ Родригес, Брэд. «Создайте свой собственный ассемблер, часть 2: ассемблер 6809 Forth» . Проверено 29 апреля 2023 г.
  29. ^ Родригес, Брэд. «Многозадачность 8051 CamelForth» (PDF) . Проверено 29 апреля 2023 г.
  30. ^ Родригес, Брэд (июль – август 1995 г.). «ДВИЖЕНИЕ ВПЕРЕД, Часть 8: CamelForth для 6809» . Проверено 29 апреля 2023 г.
  31. ^ Шобридж, Питер (21 декабря 1998 г.). «Драйвер режима фоновой отладки Motorola для Windows NT» . Архивировано из оригинала 6 июня 2007 г. Проверено 19 июня 2006 г.
  32. ^ Мартин, Гарольд М. (март 1991 г.). «Разработка привязанной модели Forth». Информационный бюллетень ACM Sigforth . 2 (3). ACM Press: 17–19. дои : 10.1145/122089.122091 . S2CID   26362015 .
  33. ^ Слайды preForth Ульриха Хоффмана
  34. ^ ПреФорт Ульриха Хоффмана
  35. ^ Броди 1987 , с. 273
  36. ^ Броди 1987 , с. 199
  37. ^ "Под капотом". Броди, 1987 год . п. 241. Подводя итог, можно сказать, что существует три типа переменных: Системные переменные содержат значения, используемые всей системой Форта. Пользовательские переменные содержат значения, уникальные для каждой задачи, хотя определения могут использоваться всеми задачами в системе. Обычные переменные могут быть доступны либо в масштабе всей системы, либо только в рамках одной задачи, в зависимости от того, определены ли они внутри. OPERATOR или в рамках частной задачи.
  38. ^ Гарри, Дэвид; Ошио, Коичи; Фланаган, Стивен Д. (1987). «Программное обеспечение ASYST для научных вычислений». Наука . 236 (4805): 1128–32. Бибкод : 1987Sci...236.1128H . дои : 10.1126/science.236.4805.1128 . JSTOR   1699106 . ПМИД   17799670 . S2CID   30463062 .

Внешние ссылки [ править ]

Arc.Ask3.Ru: конец оригинального документа.
Arc.Ask3.Ru
Номер скриншота №: B1026E31AEA904B49B670FB3A12CAA96__1716031980
URL1:https://en.wikipedia.org/wiki/Forth_(programming_language)
Заголовок, (Title) документа по адресу, URL1:
Forth (programming language) - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть, любые претензии не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, денежную единицу можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)