Forth
http://fforum.winglion.ru/

Создание Форт-системы
http://fforum.winglion.ru/viewtopic.php?f=24&t=2211
Страница 1 из 2

Автор:  ibitsa [ Вт июл 21, 2009 02:00 ]
Заголовок сообщения:  Создание Форт-системы

С Фортом знаком мало, поэтому вопросы возможно глупые, сильно не пинайте.

:zombypc; Решил написать Форт-систему, всё казалось просто и понятно, но как только начал кодить,
то встретил несколько непонятных моментов:

:?: Слова, помеченные IMMEDIATE и только компилирующие слова - это одно и тоже или нет.
Если нет, то как помечаются только компилирующие слова ?

:?: Я реализовал адресный интепретатор и небольшой набор слов,
благодаря этому могу вводить новые высокоуровневые слова прямо в коде набором ссылок.
Например
Определение эквивалентное

Код:
  : 2+ 2 + ;


я ввожу в код так

Код:
  dw $LIT,2,$PLUS,$RETURN


где слово LIT проталкивает следующие за ним число в стек.
Слово LIT - только компилирующее и не имеет смысла использовать его во время интерпретации ?

:?: Слово NUMBER , когда ему попадается во входном потоке число то
во время интерпретации - проталкивает данное число в стек
во время компиляции - заносит в новое определение LIT и далее число
То есть слово NUMBER является STATE-учитывающим словом ?

:?: А какие слова записывать в новое определение при компиляции, когда в входном потоке встречаются ." S" и подобные слова ?

:?: Словарь Форта может состоять из минимального набора низкоуровневых слов, а остальные могут
быть реализованны как высокоуровневые, на основе минимального набора.
Где можно посмотореть минимальный набор , который необходимо реализовать самому
и код для высокоуровневых ?

Это позволило бы быстро создать работоспособную систему, а в последствии можно было бы потихоньку
переписать на ассемблере все стандартные слова нуждающиеся в оптимизации.

Заранее благодарен за ответы :lol:

Автор:  WingLion [ Вт июл 21, 2009 06:52 ]
Заголовок сообщения: 

ibitsa писал(а):
Слова, помеченные IMMEDIATE и только компилирующие слова - это одно и тоже или нет.
Если нет, то как помечаются только компилирующие слова ?


Нет, не одно и то же.

слово [ например - имеет признак IMMEDIATE, но ничего не компилирует

ibitsa писал(а):
Слово LIT - только компилирующее и не имеет смысла использовать его во время интерпретации ?


формально, слово LIT является внутренним словом форт-системы (или командой форт-процессора) во время интерпретации оно действительно не имеет смысла (исполнение в режиме интерпретации даст непредсказуемый результат), т.е. его надо только компилировать. Для этого существует слово LITERAL (с признаком IMMEDIATE) - оно компилирует LIT и вслед за ним число, которое при исполнении LIT окажется на стеке, а сам LIT в словаре может даже открыто не присутствовать.




ibitsa писал(а):
Слово NUMBER , когда ему попадается во входном потоке число то
во время интерпретации - проталкивает данное число в стек
во время компиляции - заносит в новое определение LIT и далее число
То есть слово NUMBER является STATE-учитывающим словом ?


Во время компиляции оно просто компилируется, как любое слово, не имеющее признак IMMEDIATE

При исполнении от STATE оно зависеть не должно. Oпределение LIT и число компилируются словом LITERAL, которое может следовать за NUMBER, а может и не следовать. Программист может пожелать использовать число полученное через NUMBER и иным способом. Например, как адрес перехода для слова BRANCH.



ibitsa писал(а):
А какие слова записывать в новое определение при компиляции, когда в входном потоке встречаются ." S" и подобные слова ?


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




ibitsa писал(а):
Словарь Форта может состоять из минимального набора низкоуровневых слов, а остальные могут
быть реализованны как высокоуровневые, на основе минимального набора.
Где можно посмотореть минимальный набор , который необходимо реализовать самому
и код для высокоуровневых ?


Минимальных наборов, вообще говоря, много самых разных.
Здесь на форуме они тоже встречаются (например, в темах про форт-процессоры).

Сами же определения остальных слов найти можно либо в исходниках иных форт-систем, либо в книгах по форту (к примеру, я свою форт-систему писал держа под рукой книгу Баранова и Ноздрунова "Язык Форт и его реализации").

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

Автор:  Hishnik [ Вт июл 21, 2009 09:25 ]
Заголовок сообщения: 

ibitsa писал(а):
Слова, помеченные IMMEDIATE и только компилирующие слова - это одно и тоже или нет. Если нет, то как помечаются только компилирующие слова ?

Нет, это разные понятия. Слова "только для режима компиляции" никак специально не помечаются, вместо этого в них встраивается проверка текущего режима. Часто такую проверку выполняет слово ?COMP.
ibitsa писал(а):
А какие слова записывать в новое определение при компиляции, когда в входном потоке встречаются ." S" и подобные слова ?

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

Автор:  mOleg [ Вт июл 21, 2009 17:07 ]
Заголовок сообщения: 

насчет минимального набора слов советую посмотреть на Форт-систему eForth.
Система не торопливая, но достаточно простая для понимания.

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

Автор:  Mihail [ Ср июл 22, 2009 00:12 ]
Заголовок сообщения: 

ibitsa писал(а):
Где можно посмотореть минимальный набор , который необходимо реализовать самому
и код для высокоуровневых ?


Если конкретного Форт слова нет в http://fpauk.narod.ru/gfwords.html
можно спросить сдесь о том как оно выражается через другие слова.

Автор:  ibitsa [ Чт июл 23, 2009 00:28 ]
Заголовок сообщения: 

WingLion писал(а):
слово [ например - имеет признак IMMEDIATE, но ничего не компилирует

WingLion, Вы меня неправильно поняли или скорей всего я неправильно написал.
Я имел ввиду "только для режима компиляции"
Благо Хищник, понял меня правильно и ответил на вопрос
Хищник писал(а):
Нет, это разные понятия. Слова "только для режима компиляции" никак специально не помечаются, вместо этого в них встраивается проверка текущего режима. Часто такую проверку выполняет слово ?COMP.


Про LIT
WingLion писал(а):
формально, слово LIT является внутренним словом форт-системы (или командой форт-процессора) во время интерпретации оно действительно не имеет смысла (исполнение в режиме интерпретации даст непредсказуемый результат), т.е. его надо только компилировать. Для этого существует слово LITERAL (с признаком IMMEDIATE) - оно компилирует LIT и вслед за ним число, которое при исполнении LIT окажется на стеке, а сам LIT в словаре может даже открыто не присутствовать.


Именно так я себе и представлял

WingLion писал(а):
ibitsa писал(а):
Слово NUMBER , когда ему попадается во входном потоке число то
во время интерпретации - проталкивает данное число в стек
во время компиляции - заносит в новое определение LIT и далее число
То есть слово NUMBER является STATE-учитывающим словом ?


Во время компиляции оно просто компилируется, как любое слово, не имеющее признак IMMEDIATE

При исполнении от STATE оно зависеть не должно. Oпределение LIT и число компилируются словом LITERAL, которое может следовать за NUMBER, а может и не следовать. Программист может пожелать использовать число полученное через NUMBER и иным способом. Например, как адрес перехода для слова BRANCH.

Про слово NUMBER я так решил из книги Л. Броуди "Начальный курс программирования на языке форт"
Вот цитата от туда
Если интерпретатор не находит такой строки в словаре, он обращается к обработчику чисел (NUMBER). Последний проверяет, не является ли переданная ему информация числом, и если это действительно так, помещает его в участок памяти, отведенный для чисел.

Со словом NUMBER еще не разобрался, но явно приписывал ему функции слова LITERAL

Код:
LITERAL
Компиляция: ( x -- )  Ввести исполняемые действия, данные ниже, в  текущее определение.
Исполняемые действия: ( -- x )  Положить x на стек.


Про ." и S" спасибо, всё понял.

mOleg и Mihail спасибо за ссылки.

PS
Хочу поделиться своими наблюдениями
Пару лет назад у меня небыло интернета и когда меня интересовало что-то, я покупал книгу и
перечитывл её от корки до корки, высасывая знания даже из намеков.
Когда небыло денег, я каждый день заходил в книжный магазин, прочитывал одну главу и приходя домой проверял новые знания на компе.
Голова была чистая и ясная.
Сейчас есть интернет, на компе есть книжки по форту, ссылки на ресурсы по форту, и исходники.
А в голове полный бардак, какие-то обрывки недопонятого и не знание за что хвататься дальше.
Вывод: Много хорошо, тоже нехорошо

Ещё раз спасибо за ответы, буду разбираться дальше.

Автор:  mOleg [ Чт июл 23, 2009 00:44 ]
Заголовок сообщения: 

Цитата:
Вывод: Много хорошо, тоже нехорошо

тут я не удержался Моя философия см описание понятий истина, правда, неправда ;)

Автор:  WingLion [ Чт июл 23, 2009 06:26 ]
Заголовок сообщения: 

ibitsa писал(а):
Про слово NUMBER я так решил из книги Л. Броуди "Начальный курс программирования на языке форт"
Вот цитата от туда
Если интерпретатор не находит такой строки в словаре, он обращается к обработчику чисел (NUMBER). Последний проверяет, не является ли переданная ему информация числом, и если это действительно так, помещает его в участок памяти, отведенный для чисел.

Со словом NUMBER еще не разобрался, но явно приписывал ему функции слова LITERAL



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

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

Автор:  Kopa [ Чт июл 23, 2009 09:04 ]
Заголовок сообщения: 

ibitsa писал(а):
Сейчас есть интернет, на компе есть книжки по форту, ссылки на ресурсы по форту, и исходники.
А в голове полный бардак, какие-то обрывки недопонятого и не знание за что хвататься дальше.
Вывод: Много хорошо, тоже нехорошо


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

P.S. Форт многогранен.
в Вашем сообщении не прозвучала мотивация создания своей Форт системы.

Автор:  Mihail [ Чт июл 23, 2009 11:34 ]
Заголовок сообщения: 

ibitsa писал(а):
А в голове полный бардак, какие-то обрывки недопонятого и не знание за что хвататься дальше.


На самом деле, Форт не язык (не все тут с этим согласны). Т.е. у него нет
определенных синтаксиса и семантики. Для полноценного использования Фора,
следует разобраться с исходными текстом конкретной Форт системы. Форт устроен очень просто.
Я рекомендую СПФ http://fforum.winglion.ru/viewtopic.php ... highlight=
Большинство здесь сидят на нем.

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

Автор:  mOleg [ Чт июл 23, 2009 11:49 ]
Заголовок сообщения: 

Kopa писал(а):
А есть ли понимание, что создание ещё одной своей Форт системы необходимо в Вашем случае.
Или лучше взять одно из многих решений и с него начать осмысление Форт тематики?

для того, чтобы понять чужое, надо попытаться сделать свое :)

Автор:  вопрос [ Чт июл 23, 2009 13:01 ]
Заголовок сообщения: 

Цитата:
для того, чтобы понять чужое, надо попытаться сделать свое
например форк ... другой

Автор:  mOleg [ Чт июл 23, 2009 15:56 ]
Заголовок сообщения: 

вопрос писал(а):
например форк ... другой

так я ж не начинающий 8)

Автор:  ibitsa [ Чт июл 23, 2009 18:03 ]
Заголовок сообщения: 

Kopa писал(а):
А есть ли понимание, что создание ещё одной своей Форт системы необходимо в Вашем случае.
Или лучше взять одно из многих решений и с него начать осмысление Форт тематики?

P.S. Форт многогранен.
в Вашем сообщении не прозвучала мотивация создания своей Форт системы.


Я мазохист. :)
Как-то написал небольшую 16-битную ОС (несколько килобайт), в чем тоже небыло никакого смысла, кроме получения удовольствия от напряжения мозгов.

Автор:  Wlad [ Пт июл 24, 2009 00:19 ]
Заголовок сообщения: 

Вы не мазохист. Вы, по всей видимости, нормальный реликт...
Остаётся только позавидовать имеющимся возможностям вида "захотел-сделал"...

Страница 1 из 2 Часовой пояс: UTC + 3 часа [ Летнее время ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/