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

...
Google Search
Forth-FAQ Spy Grafic

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




Начать новую тему Ответить на тему  [ Сообщений: 16 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: работа со структурами, все думаю как лучше
СообщениеДобавлено: Чт май 21, 2009 19:08 
Не в сети
Moderator
Moderator
Аватара пользователя

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

<pre>
\ 20.05.2009 ~mOleg
\ Сopyright [C] 2009 mOleg mininoleg@yahoo.com
\ структуры со сложным поведением полей

math/ useful.fts
string/ stradd.fts

ALSO HIDDEN DEFINITIONS

\ медоды, лишь добавляющие смещение к указаному адресу
: (f2addr) ( r: addr d: rec --> adddr ) R> 0x0E - @ + ;
: (f1addr) ( r: addr d: rec --> adddr ) R> 0x09 - @ + ;
: (f0addr) ( r: addr d: rec --> adddr ) R> @ + ;

\ извлечение и сохранение чисел одинарной точности
: (@cell) ( r: addr d: rec --> n ) R> @ + @ ;
: (!cell) ( r: addr d: n rec --> ) R> 0x09 - @ + ! ;

\ извлечение и сохранение чисел длиной в два байта
: (@word) ( r: addr d: rec --> n ) R> @ + W@ ;
: (!word) ( r: addr d: n rec --> ) R> 0x09 - @ + W! ;

\ извлечение и сохранение чисел байтовой разрядности
: (@byte) ( r: addr d: rec --> n ) R> @ + B@ ;
: (!byte) ( r: addr d: n rec --> ) R> 0x09 - @ + B! ;

\ извлечение и сохранение чисел двойной длины
: (@long) ( r: addr d: rec --> n ) R> @ + D@ ;
: (!long) ( r: addr d: n rec --> ) R> 0x09 - @ + D! ;

\ извлечение и сохранение исполнимых адресов
: (@token) ( r: addr d: rec --> n ) R> @ + TOKEN@ ;
: (!token) ( r: addr d: n rec --> ) R> 0x09 - @ + TOKEN! ;

\ извлечение и сохранение строк со счетчиком
: (@str) ( r: addr d: rec --> asc # ) R> @ + COUNT ;
: (!str) ( r: addr d: asc # rec --> ) R> 0x09 - @ + SCOPY ;

\ извлечение и сохранение строк с завершающим нулем
: (@zstr) ( r: addr d: rec --> asc # ) R> @ + ZCOUNT ;
: (!zstr) ( r: addr d: asc # rec --> ) R> 0x09 - @ + SWAP 1 + CMOVE ;

\ создать описатель записи Name с полем указанной длины #
\ и методами работы: std to from
: MkRec: ( disp / Name std to from --> disp )
:
COMPILE NEXT-WORD COMPILE SHEADER
COMPILE COMPILE ' COMPILE,
COMPILE DUP COMPILE , LIT, COMPILE +
COMPILE COMPILE ' COMPILE,
COMPILE COMPILE ' COMPILE,
[COMPILE] ;
;

ALSO FORTH THIS

\ описатели полей различного типа:
\ EXECUTE TO FROM
CELL MkRec: Cell[] (@cell) (!cell) (f2addr)
2 MkRec: Word[] (@word) (!word) (f2addr)
1 MkRec: Byte[] (@byte) (!byte) (f2addr)
2 CELLS MkRec: Long[] (@long) (!long) (f2addr)
TOKEN MkRec: Token[] (@token) (!token) (f2addr)
SCNT# MkRec: String[] (@str) (!str) (f2addr)
1 MkRec: ZStr[] (@zstr) (!zstr) (f2addr)
\
: Fld[] ( disp # / name --> disp ) NEXT-WORD SHEADER
COMPILE (f0addr)
OVER , +
COMPILE (f1addr)
COMPILE (f2addr) ;

ALIAS Cell[] Addr[]

\ начать описание структуры с именем name
\ n - число, от которого отсчитывается смещение поля
: Struct ( n / name --> addr n n )
NEXT-WORD <| [CHAR] / KEEP KEEPS |> CREATED HERE 0 , SWAP DUP
DOES> @ ;

\ закончить описание структуры
: /Struct ( addr u disp --> ) RANGE SWAP ! ;

RECENT

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

0 Struct BLABLA
Cell[] 1st
Word[] 2st
Byte[] 3st
Token[] 4st
Long[] 5st
String[] 6st
20 Fld[] 7st
ZStr[] 8st
20 Fld[] 9st
/Struct

CREATE sample /BLABLA ALLOT

-1 sample TO 1st
-1 sample TO 2st
-1 sample TO 3st
' NOOP sample TO 4st
-1 -1 sample TO 5st
s" sample string" sample TO 6st
s" zero end string" sample TO 8st

sample 1st -1 <> THROW
sample 2st 65535 <> THROW
sample 3st 255 <> THROW
sample 4st ' NOOP <> THROW
sample 5st -1 <> THROW -1 <> THROW
sample 6st s" sample string" COMPARE 0 <> THROW
sample 8st s" zero end string" COMPARE 0 <> THROW
}test
</pre>

в данном случае по-умолчанию поля возвращают свои значения, а присвоение значений и получение адреса полей производятся с помощью слов TO и FROM

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


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


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

Зарегистрирован: Вт май 09, 2006 12:31
Сообщения: 3438
Благодарил (а): 5 раз.
Поблагодарили: 16 раз.
Да, всё замечательно, но насколько это переносимо:
такая работа со строками разве не исключительно форк-овская ?


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

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

для СПФа портируемо :)

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


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

Зарегистрирован: Вт май 09, 2006 12:31
Сообщения: 3438
Благодарил (а): 5 раз.
Поблагодарили: 16 раз.
должно быть портируемо под стандарт


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

Зарегистрирован: Вт авг 12, 2008 03:18
Сообщения: 327
Откуда: Москва
Благодарил (а): 36 раз.
Поблагодарили: 7 раз.
mrack_ писал(а):
пример прозрачного кода, красиво


+1 Много программ есть на паскале использующие структуры,
расчитываю перекодить на форт.


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

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

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

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


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

Зарегистрирован: Вт май 09, 2006 12:31
Сообщения: 3438
Благодарил (а): 5 раз.
Поблагодарили: 16 раз.
Цитата:
уже не вижу (для себя)
в некоторых моментах мне даже поддержку стандарта делать не выгодно (урезаю возможности без видимой пользы)

:shock: :shock:
уже - это " от когда"?
что именно тут имеется ввиду - что не выгодно?


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

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

сейчас уже 8)

вопрос писал(а):
что именно тут имеется ввиду - что не выгодно?

в скобках отвечено.

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


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

Зарегистрирован: Вт май 09, 2006 12:31
Сообщения: 3438
Благодарил (а): 5 раз.
Поблагодарили: 16 раз.
Всё, стандарт пал под натиском ...
:) Жаль, как же переносимость? :D


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

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

В том то и прикол, что стандарт ничего такого не обеспечивает и даже не обещает 8(

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


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

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 5062
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 23 раз.
Поблагодарили: 63 раз.
кстати, со структурами вообще несколько вопросов возникает.
1) хранить ли поля структур в общем пространстве имен (базовом словаре) либо для каждой структуры делать отдельное
2) на сколько сложные структуры поддерживать (можно очень просто, как сделано в СПФе c: -- и CONSTANT ; а можно как начале топика)
3) хранить ли вообще имена структур после сборки кода
4) автоматизация импорта структур из хидеров (сишных, как наиболее доступных)

ни на один из пунктов я дать окончательного ответа не могу (получается что и так бывает надо и этак)
поэтому хочется какую-то выдумать универсальную синтаксическую конструкцию, позволяющую делать и так и этак, при этом не городить слишком много.
Сейчас у меня самого 4 варианта:
vocs/ struct.fts - с упрятыванием полей внутрь словарей (изолированные пространства имен)
memory/ fld.fts - чуточку более сложные, чем СПФовские, но по сути такие же простые
memory/ ns.fts - то, что представлено в начале данного топика (сложновато по сравнению с предыдущими)
и набросок .\samples\sketches\typedef.fts для импорта хидеров предназначенный (сложновато оно получается)

а в итоге бы это все слить в один (два, если с учетом импорта хидеров) вариант...

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


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

Зарегистрирован: Вт сен 11, 2007 11:07
Сообщения: 187
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.
factor использует макросы, которыми генерирует требуемый код, см. в направлении functor:
(правда, название для слова он выбирал, чтобы специально дразнить функциональщиков, это не настоящий функтор)

обзорно применение можно глянуть здесь (особо не вдаваясь в детали)
http://factor-language.blogspot.com/search?q=functor%3A

в чём там суть - всё разворачивается в отдельные слова (вместе с операциями доступа к полям)


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

Зарегистрирован: Вт май 09, 2006 12:31
Сообщения: 3438
Благодарил (а): 5 раз.
Поблагодарили: 16 раз.
Цитата:
хранить ли вообще имена структур после сборки кода
если для отладки понадобится поставить какой-либо эксперимент ...


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

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

ни на один из пунктов я дать окончательного ответа не могу (получается что и так бывает надо и этак)
...

Дык пусть и будет и так и этак. Кто мешает подключить/отключить нужную библиотеку.
Кстати действительно имеет смысл сделать что то вроде fld.fts, но без сохранения имен полей и размера структуры в коде. Точнее лучше сделать чтобы это было опциями одной билиотеки типа DEBUG/RELEASE.
Мне так вот кажется :shuffle;


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

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


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

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


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

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