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

...
Google Search
Forth-FAQ Spy Grafic

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




Начать новую тему Ответить на тему  [ Сообщений: 17 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: контейнеры с данными внутри кода
СообщениеДобавлено: Пт фев 06, 2009 16:30 
Не в сети
Moderator
Moderator
Аватара пользователя

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

source file: box.fts
\ 2009-02-05 ~mOleg
\ Copyright [C] 2009-2013 mOleg mOlegg@ya.ru
\ контейнеры с данными внутри кода

ALSO HIDDEN ALSO FORTH DEFINITIONS

\ обойти данные в коде, начинающиеся со следующей ячейки,
\ вернуть адрес начала данных
\ : (BOX) ( r: addr --> addr ) AR@ CELL + AR@ @ R+ ;

\ для использования в других структурах не-immediate варианты BOX[ ]BOX
: BOX{ ( --> l: addr ) ?COMP COMPILE (BOX) HERE >L 0 , ;
: }BOX ( l: addr --> ) HERE L@ - L> ! ;

\ начать описание контейнера
: BOX[ ( --> l: addr ) BOX{ [COMPILE] [ ; IMMEDIATE

\ завершить описание контейнера, зафиксировать его размер,
\ вернуться к состоянию компиляции
: ]BOX ( l: addr --> ) }BOX ] ; IMMEDIATE

PREVIOUS RECENT

?ABSENT test{ \EOF -- тестовая секция ------------------------------------------

test{ : test 479875 BOX[ 49857 , -1984 , 564757 , ]BOX 98374 ;
test 98374 <> THROW SWAP 479875 <> THROW
DUP @ 49857 <> THROW
DUP CELL + @ -1984 <> THROW
2 CELLS + @ 564757 <> THROW
}test

\EOF пример использования:

: test ." контейнер данных в коде начинается с "
BOX{ 10 ALLOT }BOX H.
." Адреса " ;

\EOF
так в пространстве слова можно хранить данные.
слова внутри скобок интерпретируются, а не компилируются !!!
пространство надо резервировать либо с помощью ALLOT, либо с помощью
компилирующих слов.

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


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

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7960
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
Код:
: CONTAINER CREATE [C]HERE , DOES> @ ;

CONTAINER КУЧАДАННЫХВКОДЕ 10 [C]ALLOT


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

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 5062
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 23 раз.
Поблагодарили: 63 раз.
Хищник писал(а):
: CONTAINER CREATE [C]HERE , DOES> @ ;
CONTAINER КУЧАДАННЫХВКОДЕ 10 [C]ALLOT

: samlpe   BOX{ 10 ALLOT }BOX ." адрес первого ящика: " . CR
BOX{ 20 ALLOT }BOX ." адрес второго ящика: " . CR
;

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


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

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

: sample s" space for data" ( --> addr # ) ;

то есть обычные литеральные строки использовать для хранения данных, можно еще кучу вариантов придумать.

Речь идео об иллюстрации использования стека возвратов для управления логикой работы программы, и возможности использования пространства кода в целях хранения данных (без создания дополнительных, в том числе порождающих, слов).

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


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

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7960
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
Ну это после того как BOX{ }BOX описаны. А зачем их описывать, если выделить память в пространстве кода можно и так?


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

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

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


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

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


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

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

значит невнимательно прочитал.
есть такое выражение "в образовательных целях", то есть показано как можно делать контейнеры данных в коде :) Причем пример не совсем бесполезный, так как внутри BOX{ }BOX можно не только резервировать пространство, но и инициализировать данные, что в случае других рассмотренных вариантов не работает.

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


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

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7960
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
Код:
CONTAINER кучаинициализированногокода 1 [C], 2 [C], 3 [C],


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

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 5062
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 23 раз.
Поблагодарили: 63 раз.
Хищник писал(а):
Код:CONTAINER кучаинициализированногокода 1 [C], 2 [C], 3 [C],

минусы:
1) создается лишнее имя
2) всего один массив (когда в случае с BOX{ можно делать столько, сколько душе угодно )

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пт фев 06, 2009 18:29 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7960
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
mOleg писал(а):
минусы:
1) создается лишнее имя
2) всего один массив (когда в случае с BOX{ можно делать столько, сколько душе угодно )

Код:
1 [C], 2 [C], 3 [C],


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пт фев 06, 2009 18:56 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 13:19
Сообщения: 3565
Откуда: St.Petersburg
Благодарил (а): 4 раз.
Поблагодарили: 72 раз.
Чего мне непонятно, так это вопрос - неужели программист настолько ленивое животное, что не способен оторваться от кодирования очередного слова и не может вставить перед ним строчку: CREATE нужные-мне-данные 100 ALLOT и после этого вернуться к кодированию этого слова?

п.с. про "учебные цели" тут лучше не говорить, а то получается обучение "непойми-чему и нафига-оно-надо-зачем"

_________________
С уважением, WingLion
Forth-CPU . RuF09WE
Мой Форт
Отсутствие бана это не заслуга юзера, а недоработка модератора (с)


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

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

тот, кому надо на "учебные цели" не будет смотреть.

WingLion писал(а):
Чего мне непонятно, так это вопрос - неужели программист настолько ленивое животное, что не способен оторваться от кодирования очередного слова и не может вставить перед ним строчку: CREATE нужные-мне-данные 100 ALLOT и после этого вернуться к кодированию этого слова?

может, но оно не всегда надо. Не всегда хочется создавать себе проблемы.
Объявляя глобальное имя, всегда думаешь, что найдется умелец, который решит использовать удобное место для хранения своих данных.
То есть иногда нужно иметь приватные данные внутри слова, которые никто не сможет использовать без особого изврата.
А написать в коде BOX{ ... }BOX проще, чем писать: CREATE нужные-мне-данные 100 ALLOT

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


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

Зарегистрирован: Пт дек 26, 2008 21:16
Сообщения: 412
Откуда: Великий Новгород
Благодарил (а): 9 раз.
Поблагодарили: 4 раз.
Если говорить об образовательных целях,
то надо бы так:
Код:
\ 2009-02-05 ~mOleg

\ Сopyright [C] 2009 mOleg mininoleg@yahoo.com

\ контейнеры с данными внутри кода (набросок)



\ выложить адрес содержимого контейнера

\ и обойти данные в коде

\ : (BOX) ( r: addr --> ) R@ CELL + R> @ JUMP ;
: (BOX) ( r: addr --> addr ) \ стековая диаграмма вроде должна быть такая???
R@ CELL + \ Положить на стек адрес начала контейнера данных
R> @ JUMP ;  \  Перейти на адрес следующий за контейнером

\ начать описание контейнера

: BOX{ ( --> )

       COMPILE (BOX) HERE 0 A,  \ по идее надо написать зачем пишем 0

       [COMPILE] [ ; IMMEDIATE



: }BOX ( addr --> ) HERE SWAP A! ] ; IMMEDIATE  \ ну и здесь тоже что за адрес зачем пишется?



\EOF пример использования:



: test ." контейнер данных в коде начинается с "

       BOX{ 10 ALLOT }BOX H.

       ." Адреса " ;

Это я к тому что раз уж разговор об образовании пошел надо объяснять лучче :)
Кстати хотелось бы примерчик конкретно илюстрирующий полезность данного способа.


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

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

а вот, пожалуйста смотрите в пример ;)

_Harry писал(а):
Это я к тому что раз уж разговор об образовании пошел надо объяснять лучче

а это поправимо :)

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


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

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


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

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


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

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