WingLion.Ru − − − fforum.winglion.ru

RuFS-WE (РуФС-РК)

Russian Forth Standard - WingLion Edition. (RuFS-WE)
Русский Форт Стандарт - Редакция Крыльва.(РуФС-РК)
version 1.09 (07.04.2010)

Вольному − Воля!

© настоящий документ с момента своего появления объявляется общественным достоянием, и может без всяких ограничений распространяться, копироваться, переводиться на другие языки, изменяться с соответствующим уведомлением об этом в начале документа.

изменения − внесено  − краткое описание изменения
15.01.2009 − WingLion − первая редакция для публикации в internet
16.01.2009 − WingLion − продолжено наполнение документа содержательной частью
17.01.2009 − WingLion − продолжено наполнение документа содержательной частью
04.02.2009 − WingLion − начато оформление оглавления, добавлен п 2.3.
17.03.2009 − WingLion − продолжено наполнение таблицы слов
29.03.2009 − WingLion − добавлена таблица команд ФП и ФВМ
12.03.2010 − WingLion − изменения
13.03.2010 − WingLion − произведена крупная реорганизация и правка
14.03.2010 − WingLion − добавлен раздел 1.7 Классический форт
05.04.2010 − WingLion − перекомпонован раздел 2. Минимальное Ядро Форта
06.04.2010 − WingLion − расширено описание набора слов ФП и ФВМ
07.04.2010 − WingLion − дополнения в разделе 2. Минимальное Ядро Форта
07.04.2010 − WingLion − убрано упоминание 2009 года из названия документа
07.04.2010 − WingLion − стилистические правки

Оглавление

0. Введение
0.1. Концепция-Манифест
0.2. Небольшое отступление
0.3. Способ изложения
0.4. Список терминов и сокращений
0.5. Соглашения.
1. Краткое введение в Форт
1.1. Что такое Форт
1.2. Интерпретация и компиляция
1.3. Типы данных
1.4. Стеки и стековая нотация
1.5. Форт процессор и виртуальная форт машина
1.6. Сведения из языка Форт, необходимые для понимания.
1.6.1 Простота. Расширяемость. Открытость.
1.7 Классический Форт.
1.7.1 Сравнительная таблица слов из стандартов 83-го и 94-го годов и их "классичность".
2. Минимальное Ядро Форта
2.1. О реализации
2.2. Что должно уметь ядро?
2.3. Сокращенный набор слов ФП и ВФМ
2.4. Способы расширения ядра.
3. Расширения ядра
4. Рекомендации
4.1. Рекомендации по оформлению исходных текстов программ
4.2. Рекомендации по способам сборки Форта.
Приложения
Приложение 1. Стандарт Forth-83
Приложение 2. Стандарт ANSI-94
Приложение 3. Сравнительная таблица слов из стандартов 83-го и 94-го годов и их "классичность".
Приложение 4. Вариант реализации Минимального Ядра Форта
Заключение.

0. Введение

0.1. Концепция-Манифест

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

Подписи:
WingLion

0.2. Небольшое отступление

Современное состояние вычислительной техники не ставит реальной задачи экономии памяти и ресурсов. Времена, когда 64 / 640 / 4096 килобайт памяти было верхом мечтаний компьютерщика, а на частоту процессора чуть ли не молились, выставляя ее на жирных индикаторах на самом видном месте, давно прошли, поэтому, при выборе минимального набора слов для ядра Форта не ставится задача получить действительный минимум. Часть слов можно выразить через другие, и это свойство будет использовано для описания слов, поведение которых не очевидно или может трактоваться по-разному.
В то же время, возможности современных программируемых систем таковы, что на них возможна реализация самых разнообразных внутренних схем кодирования, в связи с чем фиксировать тип кода для Форта становится совершенно незачем. Программист волен сам выбирать, какой из типов кода подходит для его задачи. Стандарт предусматривает лишь терминологическую фиксацию известных типов кода и дает программисту понятие об их устройстве.
Так же стандарт вводит терминологическую фиксацию для понятий форт-процессор и виртуальная форт машина. Тем не менее, стандарт не претендует на глобальность и объявляет, что Фортом может называться не только то ПО, что написано для форт-процессора или виртуальной форт-машины. Может быть и совершенно иная организация Форта. Важно лишь поведение ПО, которое должно вести себя как Форт.
О разрядности. Разрядность современных компьютеров неуклонно возрастает, поэтому стандарт не указывает, какая разрясноть "должна быть", а утверждает, что разрядность Форта может быть любой разумной величиной от 8бит до 64..128 на настоящий момент, а в будущем может возрастать без изменения функций минимального форт ядра, но с включением расширений, связанных с повышеной разрядностью. Само же минимальное форт ядро будет таковым при любой разрядности, если несет функциональность той части форт ядра, которой достаточно для работы форт-программы.
Так, вряд ли можно ожидать возможность построения полного форта на 8-битном форт-процессоре с 8-битным адресом, однако он из-за этого не перестанет быть форт-процесором, ибо будет исполнять примитивы форта, и программы для него будут писаться на Форте.

0.3. Способ изложения

Некоторая сумбурность изложения является следствием того, что работа над документом не закончена. Работа будет продолжаться до достижения логической целостности и последовательности изложения, так, чтобы материалы не были набором вырванных из контекста мыслей.

0.4. Список терминов и сокращений

Бит ( Bit) - минимальный элемент информации, принимающий два возможных значения.
Байт ( Byte) - стандартный элемент информации, содержащий 8 бит.
Ячейка памяти ( Cell) - Место в памяти, адресуемое одним адресом. Ячейка имеет размер, указываемый в битах или байтах, обычно определяемым используемым в программируемой системе процессором, и формально может быть какого угодно размера, но в настоящее время используются размеры 16 бит ( устаревшие системы), 32 бит(современные системы), 64 бит(новейшие системы). Надо заметить, что вполне могут существовать Форт-системы с очень маленькими размерами ячеек ( 4 бита, например).
Слово ( Word) - этот термин используется очень много и в разных контекстах. В Форте существует понятие Слово, как элемент языка. Другой смысл в понятие слово вкладывался на заре компьютерной техники и нередко используется сейчас - это понятие "машинное слово". В контексте данного документа на роль машинного слова более подходит понятие ячейка. Здесь же термин "слово" будет означать "элемент языка Форт".
Форт-системa - программа, реализующая возможности языка Форт, по сути - синоним понятия Форт-транслятор
Стековый процессор - процессор, имеющий в своем составе несколько ( от 2-х) аппаратных стеков и позволяющий производить некие ( не обязательно одинаковые для всех стеков) операции с элементами стека.
Форт-процессор ( ФП) - стековый процессор, позволяющий реализовать с его помощью все возможности языка Форт.
Виртуальная Форт Машина ( ВФМ) - Программный эмулятор ( возможно гипотетического) Форт-процессора.

0.5. Соглашения.

0.5.1. Документ изначально пишется на русском языке, и может быть переведен на любой иной язык, в том числе, с подходящим переводом терминов. Использование английского ( а не русского) алфавита для написания программ, применяемое в данном документе, является не более чем признанием исторически сложившегося стандарта de facto, и ничуть не мешает программисту использовать свой родной алфавит для написания своих программ. Английский алфавит ( и язык) рекомендуется использовать только для достижения взаимопонимания в международной среде.
0.5.2. Форт бесконечно-расширяем, поэтому и стандарт для него должен быть расширяем, а не застывшим. Это значит, что стандарт должен предусматривать возможность добавления к самому себе дополнительных секций с описанием появляющихся в процессе развития вычислительной техники и программирования возможностей. Принципы добавления секций в стандарт - подобны принципам добавления новых слов в Форт. Секции добавляются в конец документа в соответствии с добавляемыми возможностями. Вклинивание добавлений в центр документа следует считать недопустимым, пока для этого не появится объективная необходимость.
Поэтому и сам форт должен состоять из нескольких функционально различных частей. Первая и центральная часть - ядро Форта, включающее в себя минимальное ядро форта и расширение ядра, которое представляет собой дополнение минимального ядра до полноценного Форта.
Полноценым фортом следует признать Форт, поддерживающий один из существующих стандартов Форта. В том числе, и представленный в данном документе.

1. Краткое введение в Форт

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

1.1. Что такое Форт

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

1.2. Интерпретация и компиляция

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

1.3. Типы данных

Типы данных по сути являются закреплением интерпретации элементов информации и фиксацией правил ее использования. С этой точки зрения Форт считается бестиповым языком. Изначально типизация в Форте отсутствует, однако существуют соглашения относительно обозначений различных данных, появляющихся на стеке и в памяти.
Эти типы важны для описания работы слов, но никак не контролируются Фортом, хотя программист при желании может создать для себя контроль типов такой, какой ему требуется. Таким образом, для языка Форт все элементы информации, это не более чем биты, байты и ячейки. Тем не менее, совершенно без интерпретации данных язык обойтись не может, поэтому в Форте существуют следующие интерпретации:
    • Byte - Байт - число в пределах от 0 до +255 ( иногда от −128 до +127)
    • Char - Символ - обычно код ASCII, но может быть и иная кодировка символов - размер соответствует кодировке. Это элемент памяти, в котором кодируется символ для вывода на экран, ввода с клавиатуры и т.п. Размер зависит от реализации. Для ASCII - один байт.
    • CELL - ячейка - элемент памяти, соответствующий одному адресу, равный по ширине физической памяти вычислительной системы, т.е. машинному слову.
    • u(nsigned) - беззнаковое целое - число от 0 до +2N−1, где N - разрядность ячейки - размер одна ячейка
    • du - беззнаковое двойное целое - число от 0 до +22N−1, где N - разрядность ячейки - размер две ячейки
    • d - знаковое целое - число от −2N−1 до +2N−1−1, где N - разрядность ячейки - размер одна ячейка
    • d = data - Данное - размер одна ячейка - безотносительно к интерпретации
    • dd - знаковое двойное целое - число от −22N−1 до +22N−1−1, где N - разрядность ячейки - размер две ячейки
    • dd = double data - двойное данное - две ячейки безотносительно к интерпретации
    • Addr - Адрес - число от 0 до +2−1, где NA - разрядность адреса - размер обычно одна ячейка, но может отличаться
    • Float - представление чисел с плавающей запятой. Существование множества различных реализаций делает бессмысленным фиксацию в стандарте конкретного варианта, поэтому стандарт лишь устанавливает, что подобные данные в Форте есть, и модуль расширения форта, работающий с такими данными, имеет право на существование со своими собственными стандартами на представление чисел с плавающей точкой. Стандатным для модуля должны быть слова, преобразующие другие типы данных в Float и обратно, в частности Float в String и String в Float. Размер зависит от реализации.
    • String - строка - представляемая группой ячеек, содержащей информацию достаточную для получения доступа к содержимому строки, представляющему собой массив из Char. Существует множество реализаций представлений строк. Программист обязан четко знать, какое представление ( представления) строк использует конкретная реализация Форта и применять соответствующие методы работы с ними. Стандарт не фиксирует ни реализацию строк, ни количество реализаций строк в одной форт системе, но рекомендует использовать для работы со строками только одно представление строк и стандартный набор строковых слов, полностью входящих не в ядро, но в строковый модуль расширения ядра. В ядре же содержится минимальный набор слов работы со строками, представление которых не обязано соответствовать представлению строк в модуле расширения, но модуль обязан содержать функции конвертации своих строк в строки ядра и обратно. Аналогично, если реализация использует несколько представлений строк, то работа с ними обеспечивается несколькими модулями расширений, и они обязаны содержать слова для конвертации строк из одного представления в другое.

1.4. Стеки и стековая нотация

Одной из основ работы программ являетая организация взааимодействия между частями программы - организация передачи параметров и данных.
В Форте эта передача преимущественно организовывается с помощью стека ( стеков). Стек по своей сути является массивом данных с непроизвольным доступом.
В Форте используется так называемый стек LIFO ( Last In First Out) - данные пишутся в стек последовательно и последовательно считываются. При этом данные, записанные в последнюю очередь считываются первыми. Подобно тому, как вставляются и вынимаются патроны в магазине автомата. Именно такой стек используется в Форте для передачи данных между программами. Этот стек в Форте обычно называют Стеком Данных или просто Стеком. Такой же стек используется для организации работы подпрограмм и возврата из них. Этот стек называется Стеком Возвратов.
Для пояснения того, как слова Форта работают со стеками применяется стековая нотация, представляющая собой запись, содержащую в себе информацию о состоянии стека перед выполнением слова и после. Выглядит стековая нотация так:
     ( data1,data2,... -> result1,rezult2,... )
Здесь запись слева от стрелки соответствует состоянию стека до исполнения слов, справа - после. Вершина стека условно находится слева, таким образом данная нотация означает, что на стеке лежали данные data2 и data1 - последнее на вершине стека, а после исполнения на стеке остались результаты работы слова - rezult2 и rezult1 - последнее на вершине стека.
Это условная запись, представляющая свобой комментарий, применяемый для облегчения описания работы слов непосредственно в исходных файлах, и ее вид никак не ограничивается. Есть лишь рекомендация - применять именно такую стековую нотацию, для того, чтобы этот комментарий был понятен всем форт-программистам.

1.5. Форт процессор и виртуальная форт машина

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

1.6. Сведения из языка Форт, необходимые для понимания.

1.6.1 Простота. Расширяемость. Открытость.

Простота Форта заключается в его наипростейшем синтаксисе, определяемом фактически только двумя правилами:
    • 1. Все программы на Форте записываются СЛОВАМИ
    • 2. Слова отделяются друг от друга пробелами.

T.e. программа на Форте записывается просто последовательностью:

СЛОВО1 СЛОВО2 СЛОВО3 СЛОВО4 СЛОВО5  и т.д.


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

: НОВОЕ-СЛОВО СЛОВО1 СЛОВО2 СЛОВО3 СЛОВО4 ;


Здесь НОВОЕ-СЛОВО ( для форт-программиста должно быть очевидно) является определяемым новым словом, а последовательность СЛОВО1 СЛОВО2 СЛОВО3 СЛОВО4 - это последовательность, которая будет исполнена при вызове на исполнение слова НОВОЕ-СЛОВО
Слово ; ( точка с запятой) является словом, заканчивающим определение. В полном соответствии с правилом 1, точка с запятой отделена от последнего слова в записи определения пробелом.
Здесь же надо подчеркнуть, что произвольная программа представляет из себя далеко не линейный список исполняемых действий. В Форте для изменения порядка исполнения имеются специальные слова для создания условных переходов, циклов и других структур кода, позволяющих менять порядок исполнения согласно требуемому алгоритму. Об этих словах будет рассказано ниже, и надо особо отметить, что с точки зрения синтаксиса они ничем не отличаются от всех остальных слов, т.е. они пишутся так же, как все слова Форта - окруженными пробелами.
Открытость Форта означает, что Форт полностью открыт для программиста как программа, т.е. он может быть изменен в любой момент в процессе исполнения/интерпретации входнoго текста. Это позволяет модифицировать Форт так, как удобно программисту. И в то же время, заставляет программиста следить за своим кодом, чтобы из-за ошибок не нарушилась работа самой Форт-системы.

1.7 Классический Форт.

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

1.7.1 Сравнительная таблица слов из стандартов 83-го и 94-го годов и их "классичность".

Сравнительная таблица приведена в приложении 3.

2. Минимальное Ядро Форта

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

2.1. О реализации

Вопрос о самозарождении МЯФ-а оставим философам будущего, а здесь описываются его свойства и способ работы с ним.
Вариант реализациия МЯФ и принципы работы с ним будут представлены в приложении 4.

2.2. Что должно уметь ядро?

2.2.1. Уметь компилировать самого себя одним из перечисленных способов.
    • по шестнадцатеричному ( двоичному, десятичному, любому другому) дампу ( представление дампа - самое простое - последовательность чисел, соответствующих ячейкам целевой системы, разделенных пробелами, табуляциями или переводами строк);
    • по исходному коду компилируемому самим минимальным ядром;
    • использовать собственную копию с модифицированием данных по дополнительному патч-файлу, содержащему простейшие инструкции для вставки/замены ( метод copy-past);
2.2.2. Сохранять скомпилированный код в виде отдельной программы ( .exe файла или иного исполняемого для целевой системы файла);
2.2.3. Работать подобно Форту с сокращенным набором слов, используемым для построения целевого Форта - Форта на целевой системе.
2.2.3. "Работа подобно Форту" означает следующий набор свойств и возможностей:
    • Организация, как минимум, одного списка форт-слов;
    • Реализация слова INTERPRET и всех слов, необходимых для его работы;
    • Реализация всех слов Classic Forth;
    • Реализация загрузки и интерпретации исходных текстов из внешних файлов.

2.3. Сокращенный набор слов ФП и ВФМ

Для представленной в данном документе реализации МЯФ используется ВФМ или ФП, имеющий следующий набор инструкций:
Список сокращенного набора команд Форт Процессора или Виртуальной Форт Машины
NМнемоника ( алиас)флаг1)описание действия [вариант реализации]
1?BRANCH ( IFNZ)A переход, если на стеке2) не ноль [NOT IFZ]
2?nBRANCH ( IFZ) переход, если на стеке ноль [NOT IFNZ]
3LIT.загрузка непосредственного литерала на стек.
4@ ( FETCH).извлечь данное по адресу из стека ( addr --> data=mem[addr]) .
5! ( STORE).сохранить даное в памяти по адресу ( data, addr --> ).
6DLITRзагрузка на стек литерала двойной длины [LIT LIT]
7EXECUTER переход по адресу из стека данных [R> RET]
8CALL ( ADINT).вызов попрограммы ( вызов адресного интерпретатора).
9RET.возврат из подпрограммы.
10NEXTRпереход на следующее слово согласно схеме адресной интерпретации.
11EXITRвыход на верхний уровень исполнения согласно схеме адресной интерпретации [RDROP NEXT]
12DUP.дублирование данного с вершины стека.
13DROP.удаление данного с вершины стека.
14SWAP.перестановка двух элементов на вершине стека.
15OVER.копирование второго элемента стека.
16NIPRудаление второго элемента с вершины стека [SWAP DROP]
17AR> ( >R).переместить данное со стека данных на стек возвратов3).
18A>R ( R>).переместить данное со стека возвратов на стек данных3).
19R@Rкопировать вершину стека возвратов на стек данных3) [R> DUP >R]
20RDROPRудалить вершину стека возвратов [R> DROP]
21AND.поразрядное логическое "И" двух верхних элементов стека ( d1 d1 --> d1 and d2).
22OR.поразрядное логическое "ИЛИ" двух верхних элементов стека ( d1 d1 --> d1 or d2).
23XOR.поразрядное логическое "Исключающее ИЛИ" двух верхних элементов стека ( d1 d1 --> d1 xor d2).
24ADD.сложить два верхних элемента стека.
25ADCRсложить два верхних элемента стека с переносом.
262/.разделить верхний элемент стека на 2.
27NOTRпоразрядное логическое инвертирование верхнего элемента стека .
28NEGRизменение знака верхнего элемента стека [NOT 1 ADD]
29ONE (1)Rположить на стек константу 1.
30ZERO (0,FALSE)Rположить на стек константу 0.
31-1 (TRUE)Rположить на стек константу -1.
32INCRувеличить верхний элемент стека на единицу[1 ADD]
33DECRуменьшить верхний элемент стека на единицу[-1 ADD]
34DDUPRдублирование двойного элемента на стеке[OVER OVER]
35DDROPRудаление двойного элемента[DROP DROP]
36DSWAPRперестановка двух двойных элементов на стеке.
37DOVERRкопирование второго двойного элемента на стеке.
38DANDRпоразрядное "И" двух верхних двойных элементов стека ( dd1 dd1 --> dd1 and dd2)[AND R> AND R>]
39DORRпоразрядное "ИЛИ" двух верхних двойных элементов стека ( dd1 dd1 --> dd1 or dd2)[OR R> OR R>]
40DXORRпоразрядное "Исключающее И" двух верхних двойных элементов стека ( dd1 dd1 --> dd1 xor dd2)[XOR R> XOR R>]
41DADDRсложить два верхних двойных элемента стека[ADD R> ADC R>]
42S>DRрасширение знакового разряда одинарного целого до двойного целого.
43BSWAPRперестановка байтов в двухбайтовом слове.
44BRORRпрокручивание байтов в процессорном слове на 8 бит вправо ( для 16-битного варианта - BSWAP).
45D2/Rразделить двойной верхний элемент стека на 2.
46D@ ( DFETCH)Rизвлечь двойное данное по адресу из стека ( addr --> dd) .
47D! ( DSTORE)R>сохранить двойное даное в памяти по адресу ( dd, addr --> ).

1)Флаг означает признак реализации:
- R - резервирование мнемоники, реализация не обязательна.
- А - альтернативные реализации. Обязательно наличие хотя бы одной альтернативной команды.
2) Здесь и далее, если не оговаривается специально, какой именно стек, речь идет о стеке данных.
3) В случае, если ширина стеков различается, при перемещении происходит преобразование данных с дополнением необходимых разрядов ( вид дополнения определяется резработчиками процессора) и обрезанием лишних разрядов. При одинаковой ширине стеков пробразование данных не производится.
Набор инструкций ФП(ВФМ) может быть сокращен или расширен, при условии, что приведенный здесь набор инструкций реализуется полностью с помощью доступного в процессоре набора инструкций.

2.4. Способы расширения ядра.

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

3. Расширения ядра

3.1. О старых стандартах
3.1.1. Forth-83
3.1.2. ANSI-94
3.1.3. О RuFS
3.2. О будущих стандартах
3.3. Стандартизация расширений
3.4. Расширение набора слов ядра
3.5. Подключаемые модули
3.5.1. Модуль XXX для YYY
3.5.2. Модуль ZZZ для XXX

4. Рекомендации


4.1. Рекомендации по оформлению исходных текстов программ

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

4.2. Рекомендации по способам сборки Форта.

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

Приложения


Приложение 1. Стандарт Forth-83


Приложение 2. Стандарт ANSI-94


Приложение 3. Сравнительная таблица слов из стандартов 83-го и 94-го годов и их "классичность".

Имя слова Forth-83ANSI94Classic Forth
манипуляции со стеком данных
DUPестьестьвключено
DROPестьестьвключено
SWAPестьестьвключено
OVERестьестьвключено
ROTестьестьвключено
-ROTестьестьвключено
работа с памятью
@естьестьвключено
!естьестьвключено
C@естьестьвключено
C!естьестьвключено
D@естьестьвключено
D!естьестьвключено
MOVEестьестьвключено
<MOVEестьестьвключено
HEREестьестьвключено
ALLOTестьестьвключено
,естьестьвключено
арифметика и логика
+естьестьвключено
естьестьвключено
*естьестьвключено
/естьестьвключено
D+естьестьвключено
D−естьестьвключено
D*естьестьвключено
D/естьестьвключено
ANDестьестьвключено
ORестьестьвключено
XORестьестьвключено
NEGАТЕестьестьвключено
NOTестьестьвключено
=естьестьвключено
<естьестьвключено
>естьестьвключено
=0естьестьвключено
определяющие слова
:естьестьвключено
;естьестьвключено
IMMEDIATEестьестьвключено
CREATEестьестьвключено
DOES>естьестьвключено
VARIABLEестьестьвключено
CONSTANTестьестьвключено
слова управляющие порядком исполнения
IFестьестьвключено
THENестьестьвключено
ELSEестьестьвключено
DOестьестьвключено
LOOPестьестьвключено
BEGINестьестьвключено
WHILEестьестьвключено
REPEATестьестьвключено
.?.естьестьне включено
работа с внешними накопителями
блокиестьнетне включено
файлынетестьне включено
телепатиянетнетне включено
консольный ввод/вывод
KEYестьестьвключено
TYPEестьестьвключено
."естьестьвключено
.естьестьвключено
EMITестьестьвключено
CRестьестьвключено
EXPECTестьестьвключено
строки и работа с ними
"естьестьвключено
FINDесть?включено
WORDесть?включено
'есть?включено
компиляция/исполнение
INTERPRETестьестьвключено
[естьестьвключено
]естьестьвключено
EXECUTEестьестьвключено
COMPILEестьестьвключено
[COMPILE]естьестьвключено
много-много других слов
=^ф^=естьестьне включено
Описания работы этих слов в соответствующих стандартах находятся в приложениях 1 и 2.

Приложение 4. Вариант реализации Минимального Ядра Форта

Вариант реализации Минимального Ядра Форта с использованием Форт-процессора с сокращенным набором инструкций, описанным в разделе 2.3.

Заключение.

в настоящее время еще не все ясно, поэтому здесь остается некоторый вакуум


- 33 -