A more high-level explanation of Forth

Refresh

November 2018

Views

266 time

3

Preamble

Forth, through the few manuals I've read, is often defined in extremely low-level terms, typically in assembly. Defining Forth in this way is extremely counter-intuitive for understanding implementations, and truly only shines for writing assembly-based or other low-level-language based ports of Forth to varying systems/architectures.

This can be seen in the famous JonesForth, where he implements words that are not necessary to implement in assembly for speed, and which blur the line between where the assembly ends and the Forth begins.

Starting Forth is a much better work that explains Forth in a more understandable manner, however, since it is geared towards teaching Forth itself, it is not very concise in the matter of how a Forth interpreter/compiler actually functions, and again blurs the Forth implementation.

Question

What I am truly asking is concisely what is involved in a functioning Forth implementation? What is the high-level model to how Forth works? So far I understand:

  • Forth uses a dictionary to look up defined words
  • Forth has two stacks, a parameter stack and return stack
  • The parameter stack is used to hold values being operated on, whereas the return stack is used to hold return positions from jumps to nested words
  • The primitive word NEXT is used to return to the state of the top of the return stack and typically appears after every defined word.

This is all I can truly say for sure because in the ANS FORTH-83 required word set, INTERPRET is not defined, however in Starting Forth, INTERPRET is defined as a primitive word used to check the dictionary for a word, if not check if it's a number, and if not abort. All of this conflicting information, and conversely the lack of information about Forth has overall made the guts of Forth complex to understand.

2 answers

0

Либо смотреть на ЧЕТВЕРТЫЙ как пользователь / программист (и есть книги Броди «Начиная ВПЕРЕД» и «Думая ВПЕРЕД» блеск, или загляните в Pelc в учебнике ). Нет необходимости беспокоиться о следующем, или сборки, или что - нибудь «низкого уровня». Выберите некоторую FORTH систему и использовать.

Или futz вокруг с его внутренностями, то jonesforth является обязательным. Другие интересные системы , чтобы посмотреть на это lbForth (самообеспечение хостинг, metacompiled для нескольких машин), или и далее (также metacompiled, boostraps от минимальных «псевдо-ассемблер» источников).

Есть также несколько Фортов, написанных на C, если вы не хотите возиться с низким уровнем низкой детализацией уровня.

4

Любая Forth реализация может быть логически разделена на следующие слои (или механизмы):

  1. Forth процессор. Она включает в себя доступ к стека данных, возвращаемого стека, памяти, вызова и возврата из подпрограммы, логических и арифметических операций, резьбовой интерпретатор кода (или «адрес» переводчика, если таковые имеются). Иногда его также называют Forth Virtual Machine (МКО).

  2. Генератор кода. Он отвечает за доступ к пространственным данным и код областях пространстве, создание подпрограмм, инкрементальная компиляция литералов, подпрограммы, возвращается, и поток управления.

  3. Переводчик. Она включает в себя возможности для создания словарей и слов (словарных статей), управлять порядок поиска и устранения лексем (имена, цифры и т.д.) в зависимости от контекста.

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

Каждый следующий слой на основе (и использует) предыдущие слои. Кроме того, некоторые дополнительные повторно используемые модули могут быть использованы под капотом (например, стеки, списки и т.д.).

Понимание следующего слоя требует понимания предыдущего слоя. После уточнения первоначального вопроса, то ответ может быть также расширен.