CREATE: различия между версиями

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


== Ссылки ==
== Ссылки ==
* [http://forth.sourceforge.net/standard/dpans/dpans6.htm#6.1.1000 Слово CREATE в стандарте ANS Forth] ''(англ.)'' и [http://forth.sourceforge.net/standard/dpans/dpansa6.htm#A.6.1.1000 комментарий к нему] ''(англ.)''
* Слово [http://forth.sourceforge.net/standard/dpans/dpans6.htm#6.1.1000 CREATE] и [http://forth.sourceforge.net/standard/dpans/dpansa6.htm#A.6.1.1000 комментарий к нему] в стандарте ANS Forth ''(англ.)''
* [http://www.forth200x.org/documents/html/core.html#core:CREATE Слово CREATE в черновике Forth 200x] ''(англ.)'' и [http://www.forth200x.org/documents/html/rationale.html#rat:core:CREATE комментарий к нему] ''(англ.)''
* Слово [http://www.forth200x.org/documents/html3/core/CREATE.html CREATE] и [http://www.forth200x.org/documents/html3/rationale.html#rat:core:CREATE комментарий к нему] в черновике Forth 200x ''(англ.)''





Версия от 23:43, 22 февраля 2016

CREATE (создать) — стандартное слово Каллисто.

Формирует слово с именем XXX (заголовок и CFA), оставляя его поле параметров пустым.


CREATE в стандарте ANS Forth

6.1.1000   CREATE                                                          CORE
           ( "<spaces>name" -- )
           Пропускает ведущие разделители пробелы. Выделяет name, ограниченное 
           пробелом. Создает определение для name с семантикой выполнения, 
           определенной ниже. Если указатель области данных не выровнен, 
           резервирует достаточно области данных для его выравнивания. Новый 
           указатель области данных определяет поле данных name. CREATE не 
           распределяет область данных в поле данных name.
       name Выполнение: ( -- a-addr )
           a-addr - адрес поля данных name. Семантика выполнения name может 
           быть расширена использованием DOES>.
       См.: 3.3.3 Область данных, 6.1.1250 DOES>.
A.6.1.1000   CREATE
Адрес области данных слова, определенного CREATE, дается указателем области 
данных немедленно после выполнения CREATE.
Резервирование пространства поля данных типично делается с помощью ALLOT.
Типичное использование:
       ... CREATE SOMETHING ...


CREATE в предыдущем стандарте Forth-83 (англ.)

     CREATE       --                            M,79
          A defining word executed in the form:
                  CREATE <name>
          Creates a dictionary entry for <name>.  After <name> is
          created, the next available dictionary location is the first
          byte of <name>'s parameter field.  When <name> is
          subsequently executed, the address of the first byte of
          <name>'s parameter field is left on the stack.  CREATE does
          not allocate space in <name>'s parameter field.


CREATE в стандарте Forth-79 (англ.)

CREATE                                       239
    A defining word used in the form:
         CREATE  <name>
    to  create a dictionary entry for <name>,  without  allocating
    any  parameter  field memory.   When  <name>  is  subsequently
    executed,  the address of the first byte of <name>'s parameter
    field is left on the stack.


CREATE в fig-FORTH Release 1 glossary, май 1979 (англ.)

CREATE
       A defining word used in the form:
                          CREATE cccc
       by such words as CODE and CONSTANT to create a dictionary header for
       a Forth definition. The code field contains the address of the words
       parameter field. The new word is created in the CURRENT vocabulary.


Реализация CREATE

Юрий Семёнов приводит следующее описание слова CREATE (стр. 139):

 : CREATE   FINDN                      ( поиск слова в словаре)
            IF                              ( если оно найдено)
               DROP          ( запись адреса поля имени в стек)
               ID.                              ( печать имени)
               4 MESSAGE                     ( печать "MSG# 4")
            THEN HERE ↑ C@       ( запись в стек числа символов
                                в слове)
            WIDTH @   ( максимально допустимое число символов в
                        имени )
            MIN            ( укорочение имени, если оно слишком
                             длинное)
            1+ ALLOT            ( выделение нужного числа байт)
            ?ALIGN     ( выравнивание выделенного числа байт на
                         чётную границу, что важно для ЭКВМ типа
                         СМ)
            ↑ '240 TOGGLE              ( коррекция байта имени)
            HERE 1- '200 TOGGLE    ( коррекция последнего байта
                                     имени)
            LATEST ,                   ( формирование поля LFA)
            CURRENT @ !           ( коррекция значения CURRENT)
            HERE 2+ , ;                  ( заполнение поля CFA)


История

Если CREATE используется, как часть конструкции CREATE…DOES> — в большинстве случаев при переносе такого определения слова на Каллисто достаточно просто заменить CREATE на <BUILDS


Ссылки


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


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