Эх наверно неудачный пример привел, замесил несколько идей в кучу.
давайте поговорим о конструкции { - } я ее не зря так написал, Она состоит
из двух частей: { ... - это часть определительная (записывающая) здесь вершина
и элементы стека ассоциируются (соотносятся) с некими наборами символов - словами
(не путаем! это не слова форт системы, их нет в словаре) здесь главное дать
элементу на стеке метку, желательно осмысленную чтобы служить не только для
идентификации но и для понимания смысла обьектов (самодокументирование)
и так мы удаляем элементы со стека в массив (хранилище) и даем им метки.
далее начинает работать вторая часть конструкции: - ... } ее задача очень
проста - взять слово, найти его среди меток и положить на стек соответствующее
значение (извлекающаяся часть). Слова-метки имеют смысл только внутри конструкции
(ограничены фигурными скобками). Все это очень здорово напоминает стековые
манипуляторы (там метки есть символы 0..9) И мне как человеку написавшему собственный
вариант стековых манипуляторов естественным показался путь компиляции обсуждаемой
конструкции в манипулятор. Но реализация может быть и иной, например непосредственная
генерация примитивов форта для необходимого стекового эффекта.
ссылку уже давали.
И так здесь для временного хранения используются глобальные массивы /d/ и buf, они очищаются
словом { и нет никаких проблем, если мы в одном или нескольких определениях
используем конструкцию { - }. Но мы можем использовать глобальность массивов /d/ и buf
и в полезных и порой необходимых нам задачах. например
Код:
: sum> ( sum lev arr - sum ) SWAP { level - } each: DUP {.. - level } > IF + ELSE DROP THEN ;
здесь метка level ведет себя как VALUE, но мы не создавали словарной статьи.
вот здесь { level - } мы сохранили значение в массиве /d/ и связали с меткой в массиве buf,
а вот здесь {.. - level } мы не инициализировали наши глобальные массивы, а добрались
до значения по метке. В этом примере видно, что мы используя глобальность избежали
необходимость обертки кода между итератором each: и ;
это пример использования записывающей части конструкции в одном определении и
использование читающей части в другом определении. Но можно ведь и дописать
в другой конструкции дополнительные метки и это тоже может быть полезно.
Ну а антиглобалисты вообще могут не использовать слово {.. как будто его не существует
Цитата:
А грабли с одним общим буфером не появятся? К примеру если конструкция { } будет использоваться в слове /arr/ которое располагается между двумя { } { } ...
нет каждая конструкция { - } автономна и независима, побочный эффект дает и использует
вариант {.. - } , по любому нужно понимать, что делаешь
Всех с наступающим рождеством!