Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Ср апр 24, 2024 02:32

...
Google Search
Forth-FAQ Spy Grafic

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




Начать новую тему Ответить на тему  [ Сообщений: 10 ] 
Автор Сообщение
 Заголовок сообщения: Inline-константы
СообщениеДобавлено: Вт мар 06, 2007 17:34 
Не в сети

Зарегистрирован: Пн дек 04, 2006 12:10
Сообщения: 28
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Может я щас буду изобретать колесо, но вот какая мысль появилась.

Сейчас в СПФ да и в стандарте, если я правильно помню, константы ведут себя так:
- в режиме интерпретации - положить число на стек
- в режиме компиляции - вкомпилировать ссылку на константу

Я предлагаю в режиме компиляции вкомпиливат само значение константы.
Должно получиться, что-то вроде такого:

: ICONSTANT ( n "name" -- )
CREATE , IMMEDIATE
DOES> ( -- n )
@ STATE @ IF LIT, THEN
;
Подозреваю, что IMMEDIATE так напрямую не сработает и его надо заменить на более правильный вариант.
Но в целом идея должна быть понятна.

Также можно наборы таких констант организовывать в отдельные файлы и компилить во временные словари.
Пример:

-- myConst.f --

TEMP-WORDLIST DUP SET-CURRENT DUP ALSO CONTEXT !
0 ICONSTANT C1
1 ICONSTANT C2
...
CLEAR-TEMP-WORDLIST myConstClear

-- main.f --
S" myConst.f" INCLUDED

...

myConstClear

где

: CLEAR-TEMP-WORDLIST ( wid -- ) CREATE , DOES> PREVIOUS @ FREE-WORDLIST ;

Для чего все это.
Довольно часто приходиться создавать и держать в словаре большой набор констант. Например для Windows-функций.
Но это не совсем логично, ведь главное предназначение констант это предоставлять доступ к неизменяемому значению.
Например, компилятор С напрямую подставляет значение константы в код.

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

Какие будут мнения?


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

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

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


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

Зарегистрирован: Пн дек 04, 2006 12:10
Сообщения: 28
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Я говорил не про Виндовс функции, а про константы для них.
Эти константы не столько мешают, сколько занимают место в словаре, а используються не так часто.
Поэтому нет большого смысла хранить их в основном словаре - можно во временном, только на время компиляции.


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

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

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


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

Зарегистрирован: Пн дек 04, 2006 12:10
Сообщения: 28
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Вот и я о чем.
Но во временном словаре можно будет хранить только инлайн-константы, которые я описал в первом посте, поскольку только их можно будет использовать безопасно в основном словаре после удаления временного. А функции нельзя.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вт мар 06, 2007 18:48 
http://www.forth.org.ru/~yz/wincons.html ?

И кроме того:
Код:
16 CONSTANT a

: r a ;
lib/ext/disasm.f
SEE r


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

Зарегистрирован: Пн дек 04, 2006 12:10
Сообщения: 28
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
profiT писал(а):
http://www.forth.org.ru/~yz/wincons.html ?

Похоже. Только у меня без специальных файлов констант и с узнаваемым интерфейсом.

profiT писал(а):
И кроме того:
Код:
16 CONSTANT a

: r a ;
lib/ext/disasm.f
SEE r

А это часом не оптимизатор постарался?
Или это так константы в СПФ работают?


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вт мар 06, 2007 19:34 
Код:
16 CONSTANT a

: r a ;
DIS-OPT
lib/ext/disasm.f
SEE r


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

Зарегистрирован: Пн дек 04, 2006 12:10
Сообщения: 28
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
profiT писал(а):
Код:
16 CONSTANT a

: r a ;
DIS-OPT
lib/ext/disasm.f
SEE r


Если поставить DIS-OPT перед определением r:
Код:
16 CONSTANT a

DIS-OPT
: r a ;
lib/ext/disasm.f
SEE r

то получаем
Код:
5590A0 E8DBFFFFFF       CALL    559080  ( a )
5590A5 C3                     RET     NEAR
END-CODE


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вт мар 06, 2007 19:50 
Хэх.. Сдаёмсу-у...


Вернуться к началу
  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 10 ] 

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


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

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


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

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