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

...
Google Search
Forth-FAQ Spy Grafic

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




Начать новую тему Ответить на тему  [ Сообщений: 60 ]  На страницу Пред.  1, 2, 3, 4
Автор Сообщение
 Заголовок сообщения:
СообщениеДобавлено: Пн янв 15, 2007 14:14 
Не в сети

Зарегистрирован: Ср май 03, 2006 11:27
Сообщения: 1394
Откуда: St.Petersburg
Благодарил (а): 2 раз.
Поблагодарили: 11 раз.
mOleg писал(а):
В tc_spf.f::488:8 нужно поставить DROP -


C" SHERE-TAB-CUR" FIND NIP
[IF]
: ; PREVIOUS
?SET SetOP POSTPONE ; [I] OPT OPT_CLOSE
DP @ SHERE-TAB-CUR @ CELL- ! ; IMMEDIATE
[ELSE] DROP
: ; PREVIOUS
?SET SetOP POSTPONE ; [I] OPT OPT_CLOSE ; IMMEDIATE
[THEN]

\ За чем тут DROP ?


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

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


на стеке остается лишнее значение после SFIND в случае ветки [ELSE]


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пн янв 15, 2007 20:25 
Не в сети

Зарегистрирован: Ср май 03, 2006 11:27
Сообщения: 1394
Откуда: St.Petersburg
Благодарил (а): 2 раз.
Поблагодарили: 11 раз.
Там FIND, а не SFIND


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

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


тогда, прошу прощения - ступил, то есть у меня там SFIND, но я забыл, что менял это дело.


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

Зарегистрирован: Ср сен 13, 2006 10:06
Сообщения: 636
Откуда: Омск
Благодарил (а): 0 раз.
Поблагодарили: 3 раз.
Код:
: Dups 0 DO I 2 * PICK LOOP ;

Попробуйте это слово с параметром 0. (0 Dups)
Система spf тихо и мирно умирает.

_________________
Меня нет, не будет и не было.


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

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

: Dups 0 DO I 2 * PICK LOOP ;


Попробуйте это слово с параметром 0. (0 Dups)
Система spf тихо и мирно умирает.


Для этого случая придумано слово ?DO

Код:
: Dups 0 ?DO I 2 * PICK LOOP ;

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Чт фев 15, 2007 17:07 
Pretorian писал(а):
Код:
: Dups 0 DO I 2 * PICK LOOP ;

Попробуйте это слово с параметром 0. (0 Dups)
Система spf тихо и мирно умирает.


Нормальная ситуация для некоректного использования DO ... LOOP с переполнением стека данных ( в примере PICK слово)
DO не проверяет на пустой цикл для этого есть ?DO слово более уместное.
И сколько в приведенном примере должен выполнятся DO учитывая
32-х разрядность счетчика цикла.

P.S. Если все контролировать в Форте, то это уже не совсем будет Форт.:)
Поставьте после PICK DROP и ничего криминального не произойдет.
В данном примере на уровне ядра, можно ввести контроль за
переполнением стека данных.


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Чт фев 15, 2007 21:00 
Стек данных при переполнении затирает стек возвратов, что для процесса смертельно ( как и 0 RP! ;)
Для защиты стека возвратов ~ss делал расширение stack-guard.f, но сейчас оно не работает.


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Чт фев 15, 2007 21:35 
Не в сети

Зарегистрирован: Чт май 04, 2006 18:18
Сообщения: 456
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.
У меня работает.

Цитата:
\ А чтоб подействовало на основной поток нужно сделать SAVE
\ 0 TO H-STDOUT S" spf4_guarded.exe" SAVE BYE
\ и попробуйте:
\ spf4_guarded.exe : tt 10000 0 DO I LOOP ; tt
\ ^ -3 Переполнение стека

_________________
http://forth.org.ru/~ygrek


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пт фев 16, 2007 12:52 
Да, лучше сказать — действует не совсем адекватно ;)
stack-guard.f BYE вызывает исключение.


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пт фев 16, 2007 19:09 
Не в сети

Зарегистрирован: Чт май 04, 2006 18:18
Сообщения: 456
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.
хм.. правда.. А я всегда выхожу по Ctrl-C вот и не заметил :) А может у нас BYE неправильный !? :-o

_________________
http://forth.org.ru/~ygrek


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пт фев 16, 2007 19:17 
Не в сети

Зарегистрирован: Ср сен 13, 2006 10:06
Сообщения: 636
Откуда: Омск
Благодарил (а): 0 раз.
Поблагодарили: 3 раз.
У меня точно BYE работает (проверял и еще не пил до этого)

_________________
Меня нет, не будет и не было.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Ср фев 21, 2007 10:27 
Не в сети

Зарегистрирован: Ср сен 13, 2006 10:06
Сообщения: 636
Откуда: Омск
Благодарил (а): 0 раз.
Поблагодарили: 3 раз.
Сорри


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Ср апр 18, 2007 10:28 
Понадобилось слово AHEAD.
Нашел в spf и увидел, что стековая нотация отличается от стандарта
- оставляет после себя 2-а значения ( для стека управления в spf используется стек данных )
А в стандарте описано следующее.

15.6.2.0702 AHEAD TOOLS EXT
Интерпретация: Семантика интерпретации для этого слова не определена.

Компиляция: ( C: -- orig )
Помещает адрес ячейки новой неразрешенной ссылки вперед orig на
стек потока управления. Добавляет семантику времени-выполнения,
данную ниже к текущему определению. Семантика не завершена, пока
orig не разрешена (например, с помощью THEN).

Время-выполнения: ( -- )
Продолжает выполнение с адреса ячейки, определенного разрешением
orig.

P.S. Это особенность spf или нужно по другому это понимать:)
Если только orig что-то большее чем адрес.
И если отделять стек управления, то как с него получить адрес на стеке данных
стандартным способом.


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пн апр 23, 2007 07:03 
По стандарту, orig может занимать и несколько ячеек на стеке.


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

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


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

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


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

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