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]. А то получается, что есть аш три вида управляющих конструкций для двух режимов. Зачем? Вот оно это самое усложнение, про которое я говорил. |
Автор: | 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/ |