Forth
http://fforum.winglion.ru/

2VALUE
http://fforum.winglion.ru/viewtopic.php?f=18&t=2677
Страница 2 из 2

Автор:  mOleg [ Чт ноя 04, 2010 19:45 ]
Заголовок сообщения:  Re: 2VALUE

вопрос писал(а):
Если мы захотим заинлайнить этот код?

заинлайнить что? в смысле какую часть кода?
Вообще-то, VALUE переменные по сути не являются переменными - это скорее объекты с тремя методами, за которыми может скрываться что угодно. Иными словами, имеется явный интерфейс, через который следует обращаться к ним.

Автор:  вопрос [ Чт ноя 04, 2010 20:02 ]
Заголовок сообщения:  Re: 2VALUE

и вот куда попадут код и данные в случае инлайнироватния

Автор:  mOleg [ Чт ноя 04, 2010 20:22 ]
Заголовок сообщения:  Re: 2VALUE

вопрос писал(а):
и вот куда попадут код и данные в случае инлайнироватния

вот елки-палки-то!
есть интерфейс, где-то есть данные (форт таки не разлчает данные от кода, и, наоборот, код от данных!), ты обращаешься через интерфейс с помощью некоего запроса к именованному объекту, и получаешь что-то на стеке данных (а может и не стеке данных, а в другом месте) какой-то результат, причем сами данные могут находиться хоть на борту МКС. Все эти самые инлайны, да простит меня Михаил, - опасные трюки в Форте, которые приводят к непредсказуемым последствиям (ведь мы должны не забывать о возможностях самомодификации кода и прочая, прочая).
Еще раз, инлайнить тут просто нечего!
у тебя есть некая словарная статья, в начале (в поле кода) находится не одно, это самое, поле кода, а целых три:
метод извлечения данных
метод сохранения данных
метод определения расположения данных
(сами данные, либо информация, позволяющая получит их), то есть, примерно так: [read][write]['][reference]
это хорошо видно, если сравнить VALUE и USER-VALUE.
Еще для наглядности могу привести код, позволяющий работать через тот же интерфес со стеком.

Автор:  dynamic-wind [ Пт ноя 05, 2010 14:13 ]
Заголовок сообщения:  Re: 2VALUE

mOleg писал(а):
Еще раз, инлайнить тут просто нечего!
у тебя есть некая словарная статья, в начале (в поле кода) находится не одно, это самое, поле кода, а целых три:
метод извлечения данных
метод сохранения данных
метод определения расположения данных
(сами данные, либо информация, позволяющая получит их), то есть, примерно так: [read][write]['][reference]

Нуу это ж медленно! Чем длиннее конвееры, тем медленнее становится косвенный переход.

Автор:  mOleg [ Пт ноя 05, 2010 14:26 ]
Заголовок сообщения:  Re: 2VALUE

dynamic-wind писал(а):
Нуу это ж медленно! Чем длиннее конвееры, тем медленнее становится косвенный переход.

И что? не пользуйтесь VALUE, пользуйтесь VARIABLE 8)
У каждого решения есть свои достоинства и недостатки. Value - очень элегантный механизм.

Автор:  ArtemKAD [ Пт ноя 05, 2010 19:35 ]
Заголовок сообщения:  Re: 2VALUE

dynamic-wind писал(а):
mOleg писал(а):
Еще раз, инлайнить тут просто нечего!
у тебя есть некая словарная статья, в начале (в поле кода) находится не одно, это самое, поле кода, а целых три:
метод извлечения данных
метод сохранения данных
метод определения расположения данных
(сами данные, либо информация, позволяющая получит их), то есть, примерно так: [read][write]['][reference]

Нуу это ж медленно! Чем длиннее конвееры, тем медленнее становится косвенный переход.

Не медленнее кеш-промаха. Весь косвенный код и значение это чистые данные. А вот если туда инлайнить код боюсь на современных Интелах получиться сильно медленнее...

Автор:  mOleg [ Пт ноя 05, 2010 20:40 ]
Заголовок сообщения:  Re: 2VALUE

вообще слово: "инлайнить" - режет слух. Речь ведь идет об оптимизации кода. Оптимизировать же можно вызов, то есть вместо классического в косвенном шитом коде: [(TO)][(name)], где в [] находятся токены,
может присутствовать CALL (to name), что, собственно, и сделано в СПФ.

Автор:  dynamic-wind [ Сб ноя 06, 2010 01:12 ]
Заголовок сообщения:  Re: 2VALUE

ArtemKAD писал(а):
Не медленнее кеш-промаха. Весь косвенный код и значение это чистые данные. А вот если туда инлайнить код боюсь на современных Интелах получиться сильно медленнее...

Тоже верно! Так и не надо делать DTC, код ТО (там всего пара команд) надо подставлять по месту использования. И опять мы натыкаемся на старые ф-товские грабли: почему-то подставлять код считается неудобно, опасно, некошерно :(

Автор:  F-MAP [ Сб ноя 06, 2010 12:46 ]
Заголовок сообщения:  Re: 2VALUE

Цитата:
Не медленнее кеш-промаха. Весь косвенный код и значение это чистые данные. А вот если туда инлайнить код боюсь на современных Интелах получиться сильно медленнее...


А все таки интересно. Может кто-то тестировал отделяя код от данных, на сколько медленее получается на современных процах?

Автор:  F-MAP [ Сб ноя 06, 2010 12:53 ]
Заголовок сообщения:  Re: 2VALUE

Цитата:
на на сколько медленее получается на современных процах?
получается на современных процах?

Сразу попрвлюсь
Цитата:
на сколько быстрее получается на современных процах?


Автор:  ygrek [ Сб дек 18, 2010 19:06 ]
Заголовок сообщения:  Re: 2VALUE

F-MAP писал(а):
Нужна помощь! Понадобилось преписать код, обрабатывающий числа двойной длины, конкретно хотелось иметь аналог слова VALUE, как бы 2VALUE, работающее с числами двойной длины, посмотрел исходники, попытался сам написать, но видимо не силен в ассемблере:


~ygrek/lib/2value.f
~profit/misc/2value.f

Автор:  Гость [ Чт мар 03, 2011 19:38 ]
Заголовок сообщения:  Re: 2VALUE

Без 2TO можно обойтись, если ввести AT ,как в книге Баранова и
Ноздрунова. Тогда будет :
0 S>D 2VALUE COUNTER
COUNTER 1. D+ AT COUNTER 2! \ увеличение счетчика на один

Автор:  Гость [ Чт мар 03, 2011 19:42 ]
Заголовок сообщения:  Re: 2VALUE

Где
: AT ' >BODY STATE @ IF LIT, THEN ; IMMEDIATE

Автор:  Гость [ Вс окт 16, 2011 19:22 ]
Заголовок сообщения:  Re: 2VALUE

chess писал(а):
Ради спортивного интереса переделал VALUE и 2VALUE под одно TO:
.....................
Этот момент можно обойти путем использования локальных переменых или локально-именованных глобальных переменных,
код которых удален от собственно данных на величину большую объема кэша процессора и использование которых не требует
чтения из входного потока.

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

Страница 2 из 2 Часовой пояс: UTC + 3 часа [ Летнее время ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/