Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Вт мар 19, 2024 07:21

...
Google Search
Forth-FAQ Spy Grafic

Часовой пояс: UTC + 3 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 29 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Создание Форт-системы
СообщениеДобавлено: Вт июл 21, 2009 02:00 
Не в сети

Зарегистрирован: Чт июл 16, 2009 17:48
Сообщения: 4
Откуда: Нижний Новгород
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
С Фортом знаком мало, поэтому вопросы возможно глупые, сильно не пинайте.

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

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

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

Код:
  : 2+ 2 + ;


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

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


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

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

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

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

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

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вт июл 21, 2009 06:52 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 13:19
Сообщения: 3565
Откуда: St.Petersburg
Благодарил (а): 4 раз.
Поблагодарили: 72 раз.
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 писал(а):
Словарь Форта может состоять из минимального набора низкоуровневых слов, а остальные могут
быть реализованны как высокоуровневые, на основе минимального набора.
Где можно посмотореть минимальный набор , который необходимо реализовать самому
и код для высокоуровневых ?


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

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

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

_________________
С уважением, WingLion
Forth-CPU . RuF09WE
Мой Форт
Отсутствие бана это не заслуга юзера, а недоработка модератора (с)


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вт июл 21, 2009 09:25 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7958
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
ibitsa писал(а):
Слова, помеченные IMMEDIATE и только компилирующие слова - это одно и тоже или нет. Если нет, то как помечаются только компилирующие слова ?

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

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вт июл 21, 2009 17:07 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 5062
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 23 раз.
Поблагодарили: 63 раз.
насчет минимального набора слов советую посмотреть на Форт-систему eForth.
Система не торопливая, но достаточно простая для понимания.

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

_________________
Мне бы только мой крошечный вклад внести,
За короткую жизнь сплести
Хотя бы ниточку шёлка.
fleur


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Ср июл 22, 2009 00:12 
Не в сети

Зарегистрирован: Ср май 03, 2006 11:27
Сообщения: 1394
Откуда: St.Petersburg
Благодарил (а): 2 раз.
Поблагодарили: 11 раз.
ibitsa писал(а):
Где можно посмотореть минимальный набор , который необходимо реализовать самому
и код для высокоуровневых ?


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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Чт июл 23, 2009 00:28 
Не в сети

Зарегистрирован: Чт июл 16, 2009 17:48
Сообщения: 4
Откуда: Нижний Новгород
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
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
Хочу поделиться своими наблюдениями
Пару лет назад у меня небыло интернета и когда меня интересовало что-то, я покупал книгу и
перечитывл её от корки до корки, высасывая знания даже из намеков.
Когда небыло денег, я каждый день заходил в книжный магазин, прочитывал одну главу и приходя домой проверял новые знания на компе.
Голова была чистая и ясная.
Сейчас есть интернет, на компе есть книжки по форту, ссылки на ресурсы по форту, и исходники.
А в голове полный бардак, какие-то обрывки недопонятого и не знание за что хвататься дальше.
Вывод: Много хорошо, тоже нехорошо

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Чт июл 23, 2009 00:44 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 5062
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 23 раз.
Поблагодарили: 63 раз.
Цитата:
Вывод: Много хорошо, тоже нехорошо

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

_________________
Мне бы только мой крошечный вклад внести,
За короткую жизнь сплести
Хотя бы ниточку шёлка.
fleur


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Чт июл 23, 2009 06:26 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 13:19
Сообщения: 3565
Откуда: St.Petersburg
Благодарил (а): 4 раз.
Поблагодарили: 72 раз.
ibitsa писал(а):
Про слово NUMBER я так решил из книги Л. Броуди "Начальный курс программирования на языке форт"
Вот цитата от туда
Если интерпретатор не находит такой строки в словаре, он обращается к обработчику чисел (NUMBER). Последний проверяет, не является ли переданная ему информация числом, и если это действительно так, помещает его в участок памяти, отведенный для чисел.

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



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

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

_________________
С уважением, WingLion
Forth-CPU . RuF09WE
Мой Форт
Отсутствие бана это не заслуга юзера, а недоработка модератора (с)


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Чт июл 23, 2009 09:04 
Не в сети
Moderator
Moderator

Зарегистрирован: Ср май 10, 2006 15:37
Сообщения: 1132
Откуда: Chelyabinsk ( Ural)
Благодарил (а): 0 раз.
Поблагодарили: 9 раз.
ibitsa писал(а):
Сейчас есть интернет, на компе есть книжки по форту, ссылки на ресурсы по форту, и исходники.
А в голове полный бардак, какие-то обрывки недопонятого и не знание за что хвататься дальше.
Вывод: Много хорошо, тоже нехорошо


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

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Чт июл 23, 2009 11:34 
Не в сети

Зарегистрирован: Ср май 03, 2006 11:27
Сообщения: 1394
Откуда: St.Petersburg
Благодарил (а): 2 раз.
Поблагодарили: 11 раз.
ibitsa писал(а):
А в голове полный бардак, какие-то обрывки недопонятого и не знание за что хвататься дальше.


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

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Чт июл 23, 2009 11:49 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 5062
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 23 раз.
Поблагодарили: 63 раз.
Kopa писал(а):
А есть ли понимание, что создание ещё одной своей Форт системы необходимо в Вашем случае.
Или лучше взять одно из многих решений и с него начать осмысление Форт тематики?

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

_________________
Мне бы только мой крошечный вклад внести,
За короткую жизнь сплести
Хотя бы ниточку шёлка.
fleur


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Чт июл 23, 2009 13:01 
Не в сети

Зарегистрирован: Вт май 09, 2006 12:31
Сообщения: 3438
Благодарил (а): 5 раз.
Поблагодарили: 16 раз.
Цитата:
для того, чтобы понять чужое, надо попытаться сделать свое
например форк ... другой


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Чт июл 23, 2009 15:56 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 5062
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 23 раз.
Поблагодарили: 63 раз.
вопрос писал(а):
например форк ... другой

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

_________________
Мне бы только мой крошечный вклад внести,
За короткую жизнь сплести
Хотя бы ниточку шёлка.
fleur


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Чт июл 23, 2009 18:03 
Не в сети

Зарегистрирован: Чт июл 16, 2009 17:48
Сообщения: 4
Откуда: Нижний Новгород
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Kopa писал(а):
А есть ли понимание, что создание ещё одной своей Форт системы необходимо в Вашем случае.
Или лучше взять одно из многих решений и с него начать осмысление Форт тематики?

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


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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пт июл 24, 2009 00:19 
Не в сети
Аватара пользователя

Зарегистрирован: Чт апр 26, 2007 21:09
Сообщения: 303
Благодарил (а): 12 раз.
Поблагодарили: 10 раз.
Вы не мазохист. Вы, по всей видимости, нормальный реликт...
Остаётся только позавидовать имеющимся возможностям вида "захотел-сделал"...


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 29 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 3 часа [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
phpBB сборка от FladeX // Русская поддержка phpBB