⟨BUILDS

Материал из ПМК вики
Перейти к навигации Перейти к поиску

<BUILDS — архаичное слово Каллисто. В паре со словом DOES> используется при разработке порождающего слова с каллистянской исполняющей частью (обработчиком).

<BUILDS        ( −− )                               Начало определяющей части порождающего слова.
Пример работы слова <BUILDS

Такой подход сравнивают с объектно-ориентированным программированием, хотя исторически ООП появилось позже Форта.

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

Примеры порождающих слов в ядре Каллисто: VARIABLE создаёт переменные, CONSTANT создаёт константы, VALUE создаёт величины и т.д. Ваше собственное порождающее слово сможет также создавать слова, разработанные по вашему проекту.

Ввод слова <BUILDS[править]

В режиме NUM последовательно нажмите клавиши  F  $\mathrm{\overset{\rightarrow}{ШГ}}$    Р-ГРД-Г   В/О   3   7      K   1 

Для возврата в режим NUM нажмите синюю клавишу  P .

История[править]

В Форте-79 конструкция <BUILDS…DOES> была вытеснена CREATEDOES> — которая трудно реализуема на МК-161 из-за фон-Неймановской архитектуры последней. В Каллисто используется первоначальный вариант <BUILDS…DOES>.

Основное отличие <BUILDS…DOES> в том, что поле кода создаваемого слова займёт две ячейки, а не одну. В большинстве случаев при переносе на Каллисто конструкции CREATEDOES> достаточно просто заменить в ней слово CREATE на <BUILDS

Если слово CREATE употребляется отдельно, менять его не нужно. Различие здесь в реализации слова DOES>, которому в Каллисто приходится выполнять немного другие действия, требующие отдельного слова <BUILDS

<BUILDS в предыдущем стандарте Forth-83 (англ.)[править]

     <BUILDS      --                            C,M           "builds"
          Used in conjunction with DOES> in defining words, in the
          form:
                  : <namex> ... <BUILDS ... DOES> ... ;
          and then
                  <namex> <name>
          When <namex> executes, <BUILDS creates a dictionary entry
          for the new <name>.  The sequence of words between <BUILDS
          and DOES> established a parameter field for <name>.  When
          <name> is later executed, the sequence of words following
          DOES> will be executed, with the parameter field address of
          <name> on the data stack.

<BUILDS в стандарте Forth-79 (англ.)[править]

<BUILDS                                        C           "builds"
    Used in conjunction with DOES> in defining words, in the form:
         : <name>  . . .  <BUILDS  . . .
              DOES>  ...    ;
    and then  <name>  <namex>
    When  <name> executes, <BUILDS creates a dictionary entry  for
    the  new <namex>.  The sequence of words between  <BUILDS  and
    DOES> established a parameter field for <namex>.  When <namex>
    is later executed, the sequence of words following DOES>  will
    be  executed, with the parameter field address of  <namex>  on
    the data stack.

<BUILDS в fig-FORTH Release 1 glossary, май 1979 (англ.)[править]

<BUILDS                                      C,L0
       Used within a colon-definition:
                       : cccc  <BUILDS  ...
                                DOES>     ...    ;
       Each time cccc is executed, <BUILDS defines a new word with a
       high-level execution proceedure. Executing cccc in the form:
                    cccc nnnn
       uses <BUILDS to create a dictionary entry for nnnn with a call to
       the DOES> part for nnnn. When nnnn is later executed, it has the
       address of its parameter area on the stack and executes the words
       after DOES> in cccc. <BUILDS and DOES> allow runtime proceedures to
       written in high-level rather than in assembler code (as required by
       ;CODE).

Реализация[править]

3085 ;#BUILDS
3086 ; <BUILDS          ( −− )                               Начать определяющую часть порождающего слова.
3087 ; <BUILDS переводится с Форта на русский как "компилируется".
3088 ; Слово взято из Форта−79 и ранее, в Форте−83 и последующих вместо него можно использовать просто CREATE
3089 LBUILD:         .DB     7
3090                 .TEXT   "<BUILDS"               ; ( −− a)
3091                 .DW     LSMUG
3092 BUILD:          .DW CALL, ZERO,BRAN,RCON        ; 0 CONSTANT

Советская реализация[править]

Юрий Семёнов приводит следующее описание слова <BUILDS через определяющее слово CONSTANT (стр. 88):

 : <BUILDS   0 CONSTANT ;

Определение слова <BUILDS в FORTH ИТЭФ:

             HEAD    207Q,'<BUILD',323Q,BUILD,$COL        ; <BUILDS
             DW  ZERO,CON,SEMI

Ссылки[править]


  Stub-icon-48px.png Это заготовка статьи. Вы можете помочь проекту, дополнив её.