Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Чт июн 20, 2019 23:09

...
Google Search
Forth-FAQ Spy Grafic

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




Ответить
Имя пользователя:
Заголовок:
Текст сообщения:
Введите текст вашего сообщения. Длина сообщения в символах не более: 60000

Размер шрифта:
Цвет шрифта
Настройки:
BBCode ВКЛЮЧЕН
[img] ВЫКЛЮЧЕН
[flash] ВЫКЛЮЧЕН
[url] ВКЛЮЧЕН
Смайлики ВЫКЛЮЧЕНЫ
Отключить в этом сообщении BBCode
Не преобразовывать адреса URL в ссылки
Вопрос
Теперь гостю придется вводить здесь пароль. Не от своей учетной записи, а ПАРОЛЬ ДЛЯ ГОСТЯ, получить который можно после регистрации на форуме через ЛС.:
Этот вопрос предназначен для выявления и предотвращения автоматических регистраций.
   

Обзор темы - немного о ленивых вычислениях
Автор Сообщение
  Заголовок сообщения:   Ответить с цитатой
А дошло!
Т.е. можно всякие отладочные дела так определять
и они будут компилироваться при первом обращении к ним.
Надо будет попробовать.
Сообщение Добавлено: Пт ноя 13, 2009 18:41
  Заголовок сообщения:   Ответить с цитатой
_Harry писал(а):
mOleg
Ну непонимаю зачем такое SEE?

дык, во-первых, это пример.
во-вторых, этот SEE не будет занимать места в ОЗУ до тех пор, пока он не понадобится, а это значит,
что:
1) быстрее будет запускаться система (не надо подключать лишние либы)
2) меньше будет мусора в словарях (так как слов меньше)
и вообще SEE будет собран только тогда, когда он понадобится.
Сообщение Добавлено: Пт ноя 13, 2009 18:21
  Заголовок сообщения:   Ответить с цитатой
mOleg
Ну непонимаю зачем такое SEE? :shuffle;
Сообщение Добавлено: Пт ноя 13, 2009 18:13
  Заголовок сообщения:   Ответить с цитатой
и еще один вариант использования ленивости:
<pre>
\ 18.10.2009 ~mOleg
\ Сopyright [C] 2009 mOleg mininoleg@yahoo.com
\ "ленивое" SEE

\ сделать имя указанного слова lfa недоступным для поиска
: forget ( lfa --> ) TRUE SWAP &SMG SET-ATTR THROW ;

\ LAZY определение ;)
: SEE ( / NAME --> )
s" .\\lib\\util\\see.fts" Requires \ подключить, если необходимо нужную библиотеку
[ LATEST LIT, ] forget \ сделать себя недоступным для поиска в следующий раз
[ LATEST ID>ASC SLIT, ] EVAL-TOKEN \ выполнить одноименное слово
;
</pre>

использовать обычным образом:
SEE NAME

Если библиотека уже подгружена, то просто будет вызвано слово SEE по имени. Если библиотека не подгружена, то сначала она будет подключена, а затем вызвано слово SEE. "Ленивое" имя будет после исполнения больше недоступно для поиска.

таким образом, я нашел несколько применений "ленивости" в Форте, какие еще варианты кто может предложить? ;)
Сообщение Добавлено: Пт ноя 13, 2009 13:40
  Заголовок сообщения:   Ответить с цитатой
оба многопоточные.
одинаковые имена как бы и не обязательны, просто так легче выдумывать имена 8)
Сообщение Добавлено: Чт ноя 12, 2009 19:43
  Заголовок сообщения:   Ответить с цитатой
mOleg писал(а):
что не очень удобно уже хотя бы WARNING-ами.

А зачем давать два одинаковых имени?
Да второй вариант многопоточный я так понимаю...
Сообщение Добавлено: Чт ноя 12, 2009 19:38
  Заголовок сообщения:  немного о ленивых вычислениях  Ответить с цитатой
собственно пример:
<pre>
0x200 CONSTANT temp-buff#

USER-VALUE temp-buff

\ вернуть адрес строки буфера
: temp-buff ( --> addr )
temp-buff *IF ;THEN DROP
temp-buff# ALLOCATE THROW
DUP TO temp-buff ;
</pre>

в предложенном выше решении вызов temp-buff всегда будет возвращать действительный адрес.
То есть место в хипе под хранение данных будет вызыватья только в момент первого вызова этого слова.
Однако, одно имя упоминается дважды, что не очень удобно уже хотя бы WARNING-ами.
соответственно, гораздо удачнее использовать конструкцию CREATE DOES> и "одним махом двоих побивахам".
<pre>
: HEAP-BUFF ( # / name --> )
CREATE , ADDR USER-PLACE , \ создать имя, выделить место в локальной области под хранение указателя
DOES> ( --> addr )
DUP CELL + @ TlsIndex@ + \ тут должен храниться адрес блока
A@ *IF NIP ;THEN DROP \ если место уже выделено, вернуть адрес
DUP @ ALLOCATE THROW \ выделить место для буфрера в Хипе
TUCK SWAP CELL + @ TlsIndex@ + A! ; \ сохранить полученный адрес, его же вернуть

0x200 HEAP-BUFF temp-buff \ а теперь можно создавать такие буфера пачками ;)
</pre>
Сообщение Добавлено: Чт ноя 12, 2009 19:05

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


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