Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Пт мар 29, 2024 09:26

...
Google Search
Forth-FAQ Spy Grafic

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




Начать новую тему Ответить на тему  [ Сообщений: 133 ]  На страницу Пред.  1, 2, 3, 4, 5, 6, 7, 8, 9  След.
Автор Сообщение
 Заголовок сообщения:
СообщениеДобавлено: Чт мар 04, 2010 16:19 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7960
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
mOleg писал(а):
кстати говоря, я не видел ни одной системы, позволяющей такой трюк.

Чегооо? :shock: Какой такой трюк?
Код:
16 VALUE DUMPLINES

: DUMP // ADDR --
  DUMPLINES 0 DO
  0 I 5 + GOTOXY 76 0 DO 0x20 EMIT LOOP
  0 I 5 + GOTOXY DUP I 16 * + .
    16 0 DO
      I 4 * 12 +  J 5 + GOTOXY
      DUP J 16 * I + C@ .   \  вот оно-то и печатает числа, пользуясь текущим значением BASE
    LOOP
  LOOP
  DROP
;


Мда. Чтобы выдать такое умозаключение, надо, видимо, ни разу в жизни не писать DUMP. :?
mOleg писал(а):
замечательно! Со скоростью света движемся в направлении маинстримовского ужаса. Так можно дойти до установки абсолютно всех глобальных переменны в начале каждого куска кода, т.к. и BASE и WARNING и CURRENT и CONTEXT уже вроде как начинают указывать в явном виде.

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Чт мар 04, 2010 16:24 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7960
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
chess писал(а):
Да я не про компиляцию, а про работающую программу, где ввод с разных каналов в разной форме идет.

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Чт мар 04, 2010 16:27 
Не в сети
Аватара пользователя

Зарегистрирован: Пт дек 26, 2008 21:16
Сообщения: 412
Откуда: Великий Новгород
Благодарил (а): 9 раз.
Поблагодарили: 4 раз.
chess писал(а):
Да я не про компиляцию, а про работающую программу, где ввод с разных каналов в разной форме идет.

А можно поподробней что эта программа делает и зачем ей надо такое поведение?
Ну в кратце хотя бы !
Или это воображаемая программа?


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Чт мар 04, 2010 16:31 
Не в сети
Аватара пользователя

Зарегистрирован: Чт июл 20, 2006 11:31
Сообщения: 2168
Откуда: Екб
Благодарил (а): 0 раз.
Поблагодарили: 41 раз.
Хищник писал(а):
Не могут, потому что DUMP может вызываться и без параметров. Он просто напечатает числа в текущей системе счисления.

В системе без глобальной BASE нет текущей системы счисления, поэтому и DUMP там с параметром, и побочных эффектов при его испльзованию не возникнет.
По корректности перевода - слово произвольный там не к месту. Что такое произвольный? Любой, какой угодно, случайный ... и т.п.

_________________
С уважением, chess


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Чт мар 04, 2010 16:40 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7960
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
chess писал(а):
В системе без глобальной BASE нет текущей системы счисления, поэтому и DUMP там с параметром,

А в системе с глобальной BASE есть текущая система счисления, поэтому и DUMP там без параметров. И что?
chess писал(а):
и побочных эффектов при его испльзованию не возникнет.

Если внутри DUMP поставить заполнение всей памяти нулями, то возникнет, да еще какой.
chess писал(а):
По корректности перевода - слово произвольный там не к месту. Что такое произвольный? Любой, какой угодно, случайный ... и т.п.

Произвольный - это произвольный и есть. Попросили напечатать дамп, а оно сменило систему счисления, переключило в 256-цветный режим и поменяло раскладку. Кстати, а надо ли передавать в DUMP начальную позицию печати, число строк, цвета, указатель на шрифт?

Код:
ADDR X Y W H Color1 Color2 Color3 Font[] FontParameters[] base  DUMP


И так каждый раз - вот радость-то! :))


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Чт мар 04, 2010 16:45 
Не в сети
Аватара пользователя

Зарегистрирован: Чт июл 20, 2006 11:31
Сообщения: 2168
Откуда: Екб
Благодарил (а): 0 раз.
Поблагодарили: 41 раз.
Хищник писал(а):
Если внутри DUMP поставить заполнение всей памяти нулями, то возникнет, да еще какой.

А какое отношение некорректный DUMP(не DUMP) имеет отношение к побочному эффекту?

_________________
С уважением, chess


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Чт мар 04, 2010 16:50 
Не в сети
Аватара пользователя

Зарегистрирован: Чт июл 20, 2006 11:31
Сообщения: 2168
Откуда: Екб
Благодарил (а): 0 раз.
Поблагодарили: 41 раз.
Хищник писал(а):
Если же потоки переключаются спонтанно, то каким образом их можно идентифицировать?

Не обязательно здесь говорить только о потоках. Можно говорить и об обработке прерываний.
В любом случае обмен по конкретному каналу начнется с передачи основания системы счисления.

_________________
С уважением, chess


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Чт мар 04, 2010 16:55 
Не в сети
Аватара пользователя

Зарегистрирован: Чт июл 20, 2006 11:31
Сообщения: 2168
Откуда: Екб
Благодарил (а): 0 раз.
Поблагодарили: 41 раз.
Хищник писал(а):
И так каждый раз - вот радость-то!

Для краткости два или больше дампов - DUMPD, DUMPH.

_________________
С уважением, chess


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Чт мар 04, 2010 16:56 
Не в сети
Аватара пользователя

Зарегистрирован: Пт дек 26, 2008 21:16
Сообщения: 412
Откуда: Великий Новгород
Благодарил (а): 9 раз.
Поблагодарили: 4 раз.
Давайте пойдем от практики:
Есть файл с текстом в тексте присутствуют числа ( в текстовой форме естественно ).
Система счисления известна, префиксов отражающих в какой системе числа не имеется.
Глобальной BASE у нас нет, >NUMBERS имеется .
Как будет выглядеть INTERPRET ? :roll: :roll: :roll:


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Чт мар 04, 2010 17:11 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7960
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
chess писал(а):
А какое отношение некорректный DUMP(не DUMP) имеет отношение к побочному эффекту?

Побочный эффект и есть одно из проявлений некорректной работы.
chess писал(а):
Не обязательно здесь говорить только о потоках. Можно говорить и об обработке прерываний.
В любом случае обмен по конкретному каналу начнется с передачи основания системы счисления.

И только-то? Что, кроме основания системы счисления, больше ничего к данным и особенностям их обработки не относится? :)
chess писал(а):
Для краткости два или больше дампов - DUMPD, DUMPH.

Вот это краткость так краткость! :))


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Чт мар 04, 2010 17:24 
Не в сети
Аватара пользователя

Зарегистрирован: Чт июл 20, 2006 11:31
Сообщения: 2168
Откуда: Екб
Благодарил (а): 0 раз.
Поблагодарили: 41 раз.
_Harry писал(а):
Система счисления известна, префиксов отражающих в какой системе числа не имеется.
Глобальной BASE у нас нет, >NUMBERS имеется .
Как будет выглядеть INTERPRET ?

Как в анекдоте - да он лотерейный билет купил хотя-бы. :D
Если не давать информацию об основании никаким образом, то всегда
будет исходно заданное основание. Либо будут слова, ориентированные
на ввод-вывод в разных основаниях. Другого не дано.
Практическим вариантом все-таки считаю задание чисел с указанием основания.
-ABC1h, 101001b, 998d. При этом изменяется соответственно >NUMBER,
один из вариантов mOleg уже приводил.

_________________
С уважением, chess


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Чт мар 04, 2010 17:28 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7960
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
chess писал(а):
Если не давать информацию об основании никаким образом, то всегда
будет исходно заданное основание. Либо будут слова, ориентированные
на ввод-вывод в разных основаниях. Другого не дано.

Другое как раз дано, и уже давно - BASE.
chess писал(а):
Практическим вариантом все-таки считаю задание чисел с указанием основания.
-ABC1h, 101001b, 998d.

Вот за 998d огромное человеческое спасибо. Это ж докатиться надо - в обязательном порядке указывать десятичную систему счисления! :))


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Чт мар 04, 2010 19:07 
Не в сети
Moderator
Moderator
Аватара пользователя

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

код из СПФ:
<pre>
: DUMP ( addr u -- ) \ 94 TOOLS
DUP 0= IF 2DROP EXIT THEN
BASE @ >R HEX
15 + 16 U/ 0 DO
CR DUP 4 .0 SPACE
SPACE DUP 16 0
DO I 4 MOD 0= IF SPACE THEN
DUP C@ 2 .0 SPACE 1+
LOOP SWAP 16 PTYPE
LOOP DROP R> BASE ! ;
</pre>
код из eForth
<pre>
: DUMP ( b u -- )
BASE @ >R HEX 16 /
FOR CR 16 2DUP dm+ -ROT 2 SPACES _TYPE NUF? 0= WHILE
NEXT ELSE R> DROP THEN DROP R> BASE ! ;
</pre>
код из SwiftForth
<pre>
: DUMP ( a n) 0 ?DO I 15 AND 0= IF CR DUP 4 .HEX SPACE THEN
DUP C@ 2 .HEX 1+ LOOP DROP ;
</pre>
код из win32forth
<pre>
: DUMP ( adr len -- ) ( hex byte format with ascii )
OVER +NO-WRAP DUP ROT
?DO CR I 8 h.R ." | "
I 16 +NO-WRAP OVER UMIN I
2dup
DO I DUMPC@ H.2 space I J 7 + = IF SPACE THEN
LOOP 2DUP - 16 OVER - 3 * SWAP 8 < - SPACES ." |"
DO I DUMPC@ EMIT.
LOOP ." |" NUF? ?LEAVE
SCREENDELAY MS \ slow down output
16 +LOOP DROP ;
</pre>
код из gForth
<pre>
: dump ( addr u -- ) \ tools dump
\G Display @var{u} lines of memory starting at address @var{addr}. Each line
\G displays the contents of 16 bytes. When Gforth is running under
\G an operating system you may get @file{Invalid memory address} errors
\G if you attempt to access arbitrary locations.
cr base @ >r hex \ save base on return stack
0 ?DO I' I - 10 min /dump !
dup 8 u.r ." : " dup .line cr 10 +
10 +LOOP
drop r> base ! ;
</pre>
и на последок код из форка
<pre>
\ отобразить в шестнадцатиричном педставлении байт данных по указанному адресу.
: ~hByte ( addr --> )
['] B@ ECATCH IF DROP ." XX" ;THEN
0 <# BLANK # # #> TYPE ;

\ выдать дамп на экран √
: DTYPE ( asc # --> )
OVER 0 <# 2 BLANKS # # # # # # # # #> TYPE
>R 0 BEGIN R@ WHILE
DDUP + ~hByte
R> 1 - >R 1 + DUP 4 MOD IFNOT SPACE THEN
REPEAT DDROP RDROP ;
</pre>
Можно приводить еще примеры из других Форт-систем.
Интересно, Хищник догадается извиниться за необоснованный наезд?

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


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

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 5062
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 23 раз.
Поблагодарили: 63 раз.
_Harry писал(а):
Давайте пойдем от практики:
Есть файл с текстом в тексте присутствуют числа ( в текстовой форме естественно ).
Система счисления известна, префиксов отражающих в какой системе числа не имеется.
Глобальной BASE у нас нет, >NUMBERS имеется .
Как будет выглядеть INTERPRET ?

смотря о чем идет речь, то есть, перемежаются ли числа чем-то еще.
в случае, если система счисления заранее известна, и при условии
что кроме чисел ничего нет,
что >NUMBER умеет получать на входе основание системы счисления, т.е ( asc # base --> d )
<pre>
: for-hex-numbers ( xt --> )
>R
BEGIN NextToken DUP WHILE \ т.е. до исчерпания входного потока в данном случае
0x10 >NUMBER R@ EXECUTE \ тут EXECUTE будет выполнять действие над числами
REPEAT RDROP DROP DROP ;
</pre>
по собсвтенному опыту скажу, что танцы с бубном вокруг BASE надоели, и гораздо удобнее, если распознавалка чисел получает в явном виде основание системы счисления.

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Чт мар 04, 2010 19:38 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7960
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
mOleg писал(а):
Интересно, Хищник догадается извиниться за необоснованный наезд?

Хищник не занимается детсадовскими ранговыми играми. Была приведена совершенно конкретная ссылка на Броуди, где упоминалось о такой реализации DUMP, которая печатает числа в текущей системе счисления. Любой из перечисленных Фортов может реализовать печать через точку. В чем состоит трюк? В том, что туда уже вставлены слова, которые принудительно печатают в hex? Так это к авторам. Повторяю, ни один из перечисленных Фортов не имеет принципиального запрета на выполнение последовательности C@ . - или это неочевидно?


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

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


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

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


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

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