Forth
http://fforum.winglion.ru/

Что же касается средств управления потоком интерпретации
http://fforum.winglion.ru/viewtopic.php?f=36&t=1786
Страница 2 из 5

Автор:  mOleg [ Пн дек 22, 2008 15:56 ]
Заголовок сообщения: 

VoidVolker писал(а):
Воо, я кажется понял: между [CASE/[IF и ] выполняется некоторый код, а потом ] забирает число со стека

именно так

VoidVolker писал(а):
а дальше в зависимости от этого числа происходит компиляция нужного участка кода. Так?

да

VoidVolker писал(а):
Так? Хорошо, тогда надо посмотреть реализации и префиксного и постфиксного вариантов, выбрать более удачный и внести в стандарт.

ну, вариант для [ flag ] [CASE] можно в форке увидеть.
а вариант c [CASE flag ] я через пару дней сделаю ;)

Автор:  Гость [ Пн дек 22, 2008 16:27 ]
Заголовок сообщения: 

потому что ] скобка используется в форте для другого, а лексемы IF] OF] CASE] не используются. То есть так удобнее использовать и проще реализовать стуруктуру.

Автор:  mOleg [ Пн дек 22, 2008 16:32 ]
Заголовок сообщения: 

Гость писал(а):
потому что ] скобка используется в форте для другого, а лексемы IF] OF] CASE] не используются. То есть так удобнее использовать и проще реализовать стуруктуру.

Как раз наоборот. менять поведение закрывающей скобки проще, чем открывающей. Для этого достаточно определить закрывающую скобку
в отдельный словарь.
Как-то так:
<pre>
VOCABULARY bracket
ALSO bracket DEFINITIONS

: ] ... PREVIOUS ] ;

PREVIOUS DEFINITIONS

: [OF ... [COMPILE] [ ALSO bracket ... ; IMMEDIATE
</pre>
ну, понятно, что словарь может называться иначе, и быть вообще сокрытым ;)

Автор:  in4 [ Пн дек 22, 2008 17:03 ]
Заголовок сообщения: 

VoidVolker писал(а):
вопрос писал(а):
кто-то без внутристрочных комментариев не может.
Кто? К тому же они визуально "разрывают" целостность кода.

Но дают возможность очень подробно проследить за состоянием стеков. Очень удобно при отладке нетривиальных слов. И для их понимания тоже!

Автор:  WingLion [ Пн дек 22, 2008 17:45 ]
Заголовок сообщения: 

Народ, а у ] разве нет стандартного определения, как "переключения из режима исполнения в режим компиляции", которое, вроде, никаких чисел со стека не забирает?

Автор:  mOleg [ Пн дек 22, 2008 17:56 ]
Заголовок сообщения: 

WingLion писал(а):
Народ, а у ] разве нет стандартного определения, как "переключения из режима исполнения в режим компиляции", которое, вроде, никаких чисел со стека не забирает?

ну есть, и что?
в разных словарях могут быть одноименные слова (это к примеру)
к тому же могут и другие быть варианты реализации,
визуально же, вариант [IF bla bla bla ] лучше выглядит, чем, к примеру [IF bla bla bla IF]
впрочем, я ведь не вел речь о реализации, не предлагал в стандарт конструкцию, я лишь пояснил свое мнение.
В американском стандарте управлению потоком трансляции не очень много внимания уделено.

Автор:  WingLion [ Пн дек 22, 2008 18:06 ]
Заголовок сообщения: 

Если я правильно понял, речь о конструкциях, позволяющих компилировать разный код в зависимости от неких выставленных заранее опций? так?

Автор:  mOleg [ Пн дек 22, 2008 18:07 ]
Заголовок сообщения: 

WingLion писал(а):
Если я правильно понял, речь о конструкциях, позволяющих компилировать разный код в зависимости от неких выставленных заранее опций? так?

в то числе

Автор:  figwam [ Пн дек 22, 2008 21:14 ]
Заголовок сообщения: 

Во первых, более логично и фортово: "[ ... ] [IF]" --> "[ ... IF]"
А во вторых, для открывающей скобки достаточно запомнить только текущий STATE
Код:
: [  STATE @ STATE-PREV ! POSTPONE [ ; IMMEDIATE
: IF] STATE-PREV @ STATE ! POSTPONE [IF] ; IMMEDIATE

Автор:  вопрос [ Пн дек 22, 2008 21:36 ]
Заголовок сообщения: 

Цитата:
вопрос писал(а):
кто-то без внутристрочных комментариев не может.

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

Автор:  Hishnik [ Пн дек 22, 2008 21:54 ]
Заголовок сообщения: 

Хм. А вот интересно. Если есть свобода реализации, тогда надо ввести в стандарт не только синтаксис комментариев, но и семантику. Тогда появляются сущности "комментарий до конца строки" и "внутристрочный комментарий", с описанным действием (т.е. не "комментируют", а "выбирают из входного потока символы до конца строки / до символа, закрывающего комментарий и ничего с ними больше не делают"). И в качестве примеров рекомендуемый синтаксис, или его альтернативные наборы. С отсутствием требований реализовать что-то одно, много, или по одному из каждой группы.

Автор:  VoidVolker [ Пн дек 22, 2008 23:55 ]
Заголовок сообщения: 

mOleg писал(а):
Как раз наоборот. менять поведение закрывающей скобки проще, чем открывающей. Для этого достаточно определить закрывающую скобку в отдельный словарь.

А зачем менять поведение открывающей скобки? :? Переход в режим интерпретации все-равно происходит. А дальше просто использовать стандартные для режима интерпретации [IF] [ELSE] [THEN]. А то получается, что есть аш три вида управляющих конструкций для двух режимов. Зачем? Вот оно это самое усложнение, про которое я говорил.

Автор:  WingLion [ Вт дек 23, 2008 00:22 ]
Заголовок сообщения: 

Вспомнил, кстати, одну конструкцию, которую использовал в исходниках для "условной компиляции" (в "СвоемФорте")

Код:
: SP> SYS-ID NOT IF [COMPILE] \ THEN ; IMMEDIATE \ for Sprinter only commands
: PC> SYS-ID IF [COMPILE] \ THEN ; IMMEDIATE     \ for PC only commands


слово SP> попросту запрещает интерпретацию/компиляцию всего, что стоит за ним в строке, если SYS-ID не соответствует условию
слово PC> - аналогично - попросту запрещает интерпретацию/компиляцию всего, что стоит за ним в строке, если SYS-ID соответствует условию.

далее эти слова используются для определения в одном исходнике системно-зависимых слов. Например:

Код:
\ system-dependent command

\ PC only
PC> : SAVE-SYSTEM 100 HERE @ 100 - SAVE . ." bytes saved" ;

\ Sprinter only
\ header for sprinter EXE file
SP> CREATE (HEAD) C" E C, C" X C, 45 , 200 , 0 , 0 , 0 , 0 , 0 , 4100 , 4100 , BFFE ,
SP> : SAVE-SYSTEM C000 200 2DUP ERASE (HEAD) C000 16 CMOVE
SP>   C-FILE DUP >R WRITE-FILE ?I/O
SP>   4100 HERE @ 4100 - R@ WRITE-FILE ?I/O R>
SP>   CLOSE-FILE ?I/O + . ." bytes saved" ;


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

Тут, кстати, есть и еще одна "хитрость", которую можно использовать где угодно, а именно - компиляция
"кода данного свыше" - строчка:

SP> CREATE (HEAD) C" E C, C" X C, 45 , 200 , 0 , 0 , 0 , 0 , 0 , 4100 , 4100 , BFFE ,

Есть просто конкретная последовательность байтов, которую надо вписать в exe-шник,
и она тупо "компилируется числами". Происхождение этой строчки в данном случае попросту не имеет значения.

Автор:  вопрос [ Вт дек 23, 2008 01:51 ]
Заголовок сообщения: 

VoidVolker писал(а):
mOleg писал(а):
Как раз наоборот. менять поведение закрывающей скобки проще, чем открывающей. Для этого достаточно определить закрывающую скобку в отдельный словарь.

А зачем менять поведение открывающей скобки? :? Переход в режим интерпретации все-равно происходит. А дальше просто использовать стандартные для режима интерпретации [IF] [ELSE] [THEN]. А то получается, что есть аш три вида управляющих конструкций для двух режимов. Зачем? Вот оно это самое усложнение, про которое я говорил.
Я думаю, это очень хорошая идея, так построен HTML: открытие тега - скобка и слово, затем поведение интерпретатора по отношению к тому, что внутри скобок определяется словом, это даёт такую нечастую в форте наглядность.

Автор:  VoidVolker [ Вт дек 23, 2008 16:42 ]
Заголовок сообщения: 

вопрос писал(а):
Я думаю, это очень хорошая идея, так построен HTML: открытие тега - скобка и слово, затем поведение интерпретатора по отношению к тому, что внутри скобок определяется словом, это даёт такую нечастую в форте наглядность.

Стоп! 1. К хтмл и наглядности данная тема не имеет отношения.
2. Я утверждаю, что нет никакой необходимости вводить в стандарт третий вид уравляющих конструкций, и считаю их переусложненными.

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