Forth
http://fforum.winglion.ru/

очередной флуд от gudleifr
http://fforum.winglion.ru/viewtopic.php?f=7&t=3056
Страница 1 из 7

Автор:  gudleifr [ Вт май 12, 2015 20:49 ]
Заголовок сообщения:  очередной флуд от gudleifr

<удалено из-за того, что коллега mOleg этого не понял>

Автор:  Ethereal [ Вт май 12, 2015 20:53 ]
Заголовок сообщения:  Re: Ошибки в известных реализациях Форта и их исправление.

gudleifr писал(а):
Иммедиате-словари просто неудобны.
Чем они неудобны ?
: FOO SLOVAR ZZZ ;
как-то удобнее, чем
: FOO [ SLOVAR ] ZZZ ;

Автор:  Ethereal [ Вт май 12, 2015 20:53 ]
Заголовок сообщения:  Re: Ошибки в известных реализациях Форта и их исправление.

gudleifr писал(а):
Иммедиате-словари просто неудобны.
Чем они неудобны ?
: FOO SLOVAR ZZZ ;
как-то удобнее, чем
: FOO [ SLOVAR ] ZZZ ;

Автор:  gudleifr [ Вт май 12, 2015 21:00 ]
Заголовок сообщения:  Re: Ошибки в известных реализациях Форта и их исправление.

<удалено из-за того, что коллега mOleg этого не понял>

Автор:  Ethereal [ Вт май 12, 2015 21:05 ]
Заголовок сообщения:  Re: Ошибки в известных реализациях Форта и их исправление.

gudleifr писал(а):
Проще сразу реализовать FORTH прямо по книге.
Так я это сделал давно. Но не под Винды. А в данный момент идея в том, чтобы получить 4 разных форта - FIG, 79, 83 и Бар-Нозд, как бы по ходу дела. Трансформируя один в другой и закрывая непонятки. Я, например, только из Фиг-Форта понял, что такое ;CODE и еще много вещей понял только из него.

Автор:  Ethereal [ Вт май 12, 2015 21:16 ]
Заголовок сообщения:  Re: Ошибки в известных реализациях Форта и их исправление.

gudleifr писал(а):
Ethereal писал(а):
Чем они неудобны ?
Тем, что после компиляции FOO долго удивляешься, почему ничего не работает
У меня все работает, а ты пишешь не о том. Слово : в Фиг-Форте и в F-79 первым делом копирует CURRENT в CONTEXT. Поэтому указывать в тексте определения контекст все равно придется. И лучше это делать без лишних [ ]

Автор:  gudleifr [ Вт май 12, 2015 21:21 ]
Заголовок сообщения:  Re: Ошибки в известных реализациях Форта и их исправление.

<удалено из-за того, что коллега mOleg этого не понял>

Автор:  Ethereal [ Вт май 12, 2015 22:14 ]
Заголовок сообщения:  Re: Ошибки в известных реализациях Форта и их исправление.

gudleifr писал(а):
Т.е. слово ; опять копирует CURRENT в CONTEXT ?
Ничего оно не копирует.

В Forth-83 та-же песня. В описании слова ":" :
The search order is changed so that the first vocabulary in the search order is replaced by the compilation vocabulary.

Автор:  gudleifr [ Вт май 12, 2015 22:31 ]
Заголовок сообщения:  Re: Ошибки в известных реализациях Форта и их исправление.

<удалено из-за того, что коллега mOleg этого не понял>

Автор:  Ethereal [ Ср май 13, 2015 04:22 ]
Заголовок сообщения:  Re: Ошибки в известных реализациях Форта и их исправление.

Ну если ты начнешь определять еще одно слово по ":", то он снова автоматически укажет на CURRENT. А для интерпретации - ну да, куда угодно, куда ты последний раз его определял, туда и показывает. Перед интерпретацией укажи FORTH для определенности и всего делов. И к чему эти вопросы ? Форты Фиг,79,83 были именно такими.
Средства управления поиском из ANSI-Форта появились, кстати, именно в Форте-83, но значились там пока еще не в качестве обязательного, а в качестве "Experimental proposal" экспериментального предложения.

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

Автор:  Ethereal [ Ср май 13, 2015 04:25 ]
Заголовок сообщения:  Re: Ошибки в известных реализациях Форта и их исправление.

В Фиг-Форте, кстати, есть вещь, которая не ясна, даже после изучения кода. Например, слово TASK в глоссарии по Фиг-форт определялось, как ничего не делающее, для разграничения аппликаций, чтобы забыть полностью всю последнюю аппликацию по FORGET TASK . Говорилось также в разных статьях, что общей практикой тогда было Форт-сессию начинать с : TASK ; , чтобы по FORGET TASK вернуть все к изначальному состоянию.
The normal convention is to start a FORTH session with the dummy definition:
: TASK ; OK
The work can then be erased by . FORGET TASK. FORTH programs often start with a TASK definition, and finish with FORGET TASK to free the system for other work.

Проблема в том, что слово TASK в Фиг-форте для IBM PC уже определено и оно как раз последнее в его словаре, но забыть его по FORGET нельзя. Забор FENCE не позволяет. При попытке выполнить FORGET TASK не забывается вообще ничего. Это тот случай когда просто нужно знать, что имелось ввиду. По коду и не допрешь. Т.е. непонятно - это ошибка или все таки таков был замысел и имелось ввиду, что пользователь первым делом определит новое слово TASK и будет забывать уже его или будет начинать работу (например, интерпретацию экрана) вообще с FORGET TASK : TASK ; и FORGET TASK завершившись с ошибкой заодно почистит стек или ... что имелось ввиду ?

FORGET , кстати, в Фиг-форте какой-то безбашенный по своей простоте :
Код:
: FORGET
  CURRENT @ CONTEXT @ - 24 ?ERROR \ Если CURRENT != CONTEXT, то выход по ошибке
  [COMPILE] '
  DUP FENCE @ < 21 ?ERROR \ Если забор не позволяет, то выход по ошибке
  DUP NFA DP !            \ Поправили HERE
  LFA @ CONTEXT @ !       \ Поправили указатель на последнее слово в словаре CONTEXT
;

Интересно, что VOC-LINK , сшивающий все словари в список в Фиг-форте
есть и при создании словарей по VOCABULARY формируется. Но вот нужен-то
он только для FORGET и более нигде. И именно FORGET-у на него насрать.
Я этого алгоритма не догоняю. Что имелось ввиду ? Какой стиль работы ?
Раз проверяется на равенство CURRENT и CONTEXT, то имеется ввиду, что
словари есть. Но почему с ними обходятся так грубо ?
При каких условиях имелось ввиду применять такой FORGET ?

Впрочем, есть словечко COLD которое сразу и грубо возвращает Фиг-Форт
к состоянию ядра.

Автор:  gudleifr [ Ср май 13, 2015 10:50 ]
Заголовок сообщения:  Re: Ошибки в известных реализациях Форта и их исправление.

<удалено из-за того, что коллега mOleg этого не понял>

Автор:  Hishnik [ Ср май 13, 2015 23:29 ]
Заголовок сообщения:  Re: Ошибки в известных реализациях Форта и их исправление.

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

А если сделать не так, то при переключении в новый словарь у нас внезапно пропадет все, включая базовые DUP DROP + - и т.д. По-моему, совершенно логично, что словарь, основанный на некоем родителе, является его ответвлением. То, что нужно перекрыть, будет перекрыто, а слова родительского словаря по меньшей мере не мешают, а вот их отсутствие может стать проблемой.

Автор:  Ethereal [ Чт май 14, 2015 22:44 ]
Заголовок сообщения:  Re: Ошибки в известных реализациях Форта и их исправление.

Hishnik писал(а):
Ethereal писал(а):
А если сделать не так, то при переключении в новый словарь у нас внезапно пропадет все, включая базовые DUP DROP + - и т.д.

Это не так. Потому как порядок поиска по словарям, ну как у Баранова-Ноздрунова написано, должен быть CONTEXT, CURRENT, FORTH. Так-что DUP DROP не пропадут ни в каком случае.
А в Фиг-Форте порядок явно в коде проставлен CONTEXT, CURRENT, но из-за полного просмотра родителей, при просмотре CONTEXT в итоге последним просматривается весь FORTH и при просмотре CURRENT последним просматривается тоже весь FORTH. Т.е на практике выходит CONTEXT, FORTH, CURRENT, FORTH.

Автор:  gudleifr [ Чт май 14, 2015 22:52 ]
Заголовок сообщения:  Re: Ошибки в известных реализациях Форта и их исправление.

<удалено из-за того, что коллега mOleg этого не понял>

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