Forth http://fforum.winglion.ru/ |
|
Вопросы и ответы для занесения в FAQ прошу постить сюда. http://fforum.winglion.ru/viewtopic.php?f=2&t=703 |
Страница 2 из 5 |
Автор: | вопрос [ Пн ноя 16, 2009 20:24 ] |
Заголовок сообщения: | |
Вот ещё правильна ли запись Код: : ['] ' ' COMPILE, ; Если правильна, то во сех ли случаях
|
Автор: | WingLion [ Пн ноя 16, 2009 21:21 ] |
Заголовок сообщения: | |
IMMEDIATE как минимум, не хватает |
Автор: | вопрос [ Пн ноя 16, 2009 22:26 ] |
Заголовок сообщения: | |
но ведь quote (') - сама уже IMMEDIATE |
Автор: | mOleg [ Пн ноя 16, 2009 22:34 ] |
Заголовок сообщения: | |
эхм, иногда надо смотреть в исходники.... или хотя бы пробовать на живой форт-системе код. в СПФ лезть мне лень, из форка: <pre> \ cкомпилировать в текущем определении \ адрес следующего слова в виде литерала : ['] ( / name --> xt ) ?COMP ' ADDR, ; IMMEDIATE </pre> |
Автор: | VoidVolker [ Пн ноя 16, 2009 22:53 ] |
Заголовок сообщения: | |
вопрос писал(а): но ведь quote (') - сама уже IMMEDIATE
Как раз нет, ' не имеет признака немедленного исполнения, тогда как ['] имеет признак немедленного исполнения. Код: : ['] ' ' COMPILE, ;
Вообще неправильно: во время выполнения выбрать два слова из входного потока и положить их адреса на стек, далее скомпилировать верхний адрес. |
Автор: | WingLion [ Пн ноя 16, 2009 23:13 ] |
Заголовок сообщения: | |
У меня в форте это сделано так: Код: : ['] ' [COMPILE] LITERAL ; IMMEDIATE
|
Автор: | вопрос [ Вт ноя 17, 2009 00:18 ] |
Заголовок сообщения: | |
Цитата: эхм, иногда надо смотреть в исходники.... Мы FAQ составляем! VoidVolker писал(а): вопрос писал(а): но ведь quote (') - сама уже IMMEDIATE Как раз нет, ' не имеет признака немедленного исполнения, тогда как ['] имеет признак немедленного исполнения. |
Автор: | вопрос [ Пт ноя 20, 2009 00:44 ] |
Заголовок сообщения: | |
Вот ещё такой любопытный вопрос (сразу скажу - посмотрел и стандарт и исходники) - а должны ли (по замыслу) что-либо делать слова [ "left-bracket" и ] "right-bracket" если они вызваны неуместно - например если система уже находится в состоянии компиляции, а вызывается слово ] или наоборот - в состоянии интерпретации вызывается слово [ Нет, что делает форт-система, я вижу, конечно, а вот как было бы правильно. |
Автор: | Hishnik [ Пт ноя 20, 2009 01:05 ] |
Заголовок сообщения: | |
вопрос писал(а): Вот ещё такой любопытный вопрос (сразу скажу - посмотрел и стандарт и исходники) - а должны ли (по замыслу) что-либо делать слова [ "left-bracket" и ] "right-bracket" если они вызваны неуместно - например если система уже находится в состоянии компиляции, а вызывается слово ] или наоборот - в состоянии интерпретации вызывается слово [
Нет, что делает форт-система, я вижу, конечно, а вот как было бы правильно. То, что сейчас делает форт-система, вполне правильно. |
Автор: | вопрос [ Пт ноя 20, 2009 01:11 ] |
Заголовок сообщения: | |
Хищник писал(а): То, что сейчас делает форт-система, вполне правильно. Угу, всё-таки некоторая неоднозначность существует ... в стандарте присутствует фраза 6.1.2500 [ "left-bracket" Интерпретация: Семантика интерпретации для этого слова не определена. вот она и вызывает смущение, дело в том, что такая же фраза присутствует для слов DO например, но в случае попытки использовать DO вне компиляции, компилятор форта отреагирует иначе - Цитата: DO 3 4 5 LOOP
DO 3 4 5 LOOP ^ -312 Только для режима компиляции ! неожиданно появляется предупреждение |
Автор: | Hishnik [ Пт ноя 20, 2009 01:29 ] |
Заголовок сообщения: | |
Слово DO, как и другие структуры управления, генерирует код, который не имеет смысла в отрыве от слова. Слово [ ничего не компилирует, а просто устанавливает режим исполнения. Использовать его в режиме интерпретации избыточно, но и только. |
Автор: | вопрос [ Пт ноя 20, 2009 02:18 ] |
Заголовок сообщения: | |
Хищник писал(а): Слово DO, как и другие структуры управления, генерирует код, который не имеет смысла в отрыве от слова. Слово [ ничего не компилирует, а просто устанавливает режим исполнения. Использовать его в режиме интерпретации избыточно, но и только.
Да, это уже ответ. Рассмотрим вторую половину вопроса - что будет, если в режиме компиляции использовано слово ] как бы тоже ничего а вот предположим, что у нас режим интерпретации и вдруг используется слово ] без того чтобы было задано начало нового слова ( : ) вот по крайней мере в этом случае имеет смысл появление предупреждения. |
Автор: | Hishnik [ Пт ноя 20, 2009 02:32 ] |
Заголовок сообщения: | |
вопрос писал(а): а вот предположим, что у нас режим интерпретации и вдруг используется слово ] без того чтобы было задано начало нового слова ( : )
вот по крайней мере в этом случае имеет смысл появление предупреждения. В этом случае все слова, использующие ], и создающие заголовок словарной статьи самостоятельно, будут зачем-то выдавать предупреждения. |
Автор: | WingLion [ Пт ноя 20, 2009 08:32 ] |
Заголовок сообщения: | |
вопрос писал(а): Семантика интерпретации для этого слова не определена.
Если рассуждать логически, то слово ] в режиме компиляции и слово [ в режиме интерпретации попросту могут делать все что угодно. Их действия в этих режимах не определены стандартом, так же, как действия всех-всех-всех иных слов, не вошедших в стандарт. И это значит, что мы имеем полное право переопределить эти слова так, чтобы в нужных режимах они выполняли действия, определенные стандартом, а в противоположных делали что-то совсем иное "что фортеру в голову взбредет". И это имело бы смысл, если бы нам не хватало слов, но слов предостаточно, поэтому особого смысла в подобном переопределении нет. С другой стороны, последовательность [ что-то там ] в режиме компиляции исполнит это самое "что-то там", поэтому, имеет смысл сделать так, чтобы и в режиме интерпретации [ что-то там ] исполнялось, а для того чтобы оно чем-то отличалось от простого что-то там , это надо делать хитрее. [ - запоминает текущий адрес HERE и переключается в режим компиляции что-то там - это все компилируется ] - а тут делается завершение компиляции, исполнение того, что скомпилировалось начиная от [ и восстановление HERE так, словно ничего и не было. Таким образом последовательность [ 10 0 DO I . LOOP ] в потоке интерпретации не выкинет ошибку когда наткнется на DO, а просто исполнит цикл и распечатает 10 чисел. И подобные виртуальные одноразовые определения вполне имеют смысл |
Автор: | mOleg [ Пт ноя 20, 2009 08:59 ] |
Заголовок сообщения: | |
вообще, со словами [ ] действительно имеется один тонкий момент (который еще не обсуждался), а именно: <pre> CREATE ZZZ ] aaa bbb ccc ddd [ </pre> вот этот момент в ярде случаев позволял содать список адресов слов aaa, bbb, , и иногда этим методом даже пользовались! вот только непереносим он, и совсем не применим к числам, то есть введение <pre> CREATE ZZZ ] aaa 1234 bbb ccc ddd [ </pre> приведет скорее всего к нарушению структуры, и все адреса "сползут". Где-то этот прием обсуждался (как бы не у Броуди) и общий вывод - так делать нельзя. Поэтому, слова управляющие STATE лучше вообще не трогать! А пользоваться уже готовыми : ; и т.п. |
Страница 2 из 5 | Часовой пояс: UTC + 3 часа [ Летнее время ] |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |