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

Материал из ПМК вики
Перейти к навигации Перейти к поиску
 
(не показано 48 промежуточных версий этого же участника)
Строка 1: Строка 1:
'''VARIABLE''' — стандартное слово [[Каллисто]].
'''VARIABLE''' (переменная) — стандартное порождающее слово [[Каллисто]].
VARIABLE      ( −− )                              Определить следующее слово, как переменную с начальным значением 0.
[[Файл:CallistoConstVar.png|thumb|right|264px|Пример работы слова VARIABLE]]
Определить следующее слово как глобальную (''язык Си:'' статичную) 16-битную переменную с начальным значением [[FALSE|нуль]].


Определить следующее слово как переменную с начальным значением нуль.
Слово VARIABLE оставлено для совместимости с Фортом. Вместо него при разработке приложений рекомендуется использовать более современное и мощное слово [[VALUE]].


== Ввод слова VARIABLE ==
В [[Режим ЛАТ|режиме ЛАТ]] последовательно нажмите клавиши [[Клавиша ↔|{{Серая клавиша|↔}}]] {{ШГ←}} [[Клавиша ×|{{Серая клавиша|×}}]] [[Клавиша 7|{{Серая клавиша|7}}]] {{ШГ←}} [[Клавиша В/О|{{Чёрная клавиша|В/О}}]] [[Клавиша -|{{Серая клавиша|−}}]] [[Клавиша ИП|{{Чёрная клавиша|ИП}}]]


== VARIABLE в стандарте ANS Forth ==
== VARIABLE в стандарте ANS Forth ==
<PRE>
  6.1.2410  VARIABLE                                                        CORE
  6.1.2410  VARIABLE                                                        CORE
             ( "<spaces>name" -- )
             ( "<spaces>name" -- )
Строка 23: Строка 29:
  Типичное использование:
  Типичное использование:
         ... VARIABLE XYZ ...
         ... VARIABLE XYZ ...
</PRE>


== История ==
В Форте слово VARIABLE — одно из самых древних и устоявшихся.
Впервые оно появилось в 1964 году под именем DECLARE в программе CURVE, написанной Чак Муром на Алголе для Burroughs B5500 ([https://ru.wikipedia.org/wiki/%D0%9D%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%B0%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F_%D1%83%D1%81%D0%BA%D0%BE%D1%80%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F_%D0%BB%D0%B0%D0%B1%D0%BE%D1%80%D0%B0%D1%82%D0%BE%D1%80%D0%B8%D1%8F_SLAC Национальная ускорительная лаборатория SLAC], [https://ru.wikipedia.org/wiki/%D0%A1%D1%82%D1%8D%D0%BD%D1%84%D0%BE%D1%80%D0%B4%D1%81%D0%BA%D0%B8%D0%B9_%D1%83%D0%BD%D0%B8%D0%B2%D0%B5%D1%80%D1%81%D0%B8%D1%82%D0%B5%D1%82 Стэнфордский университет]). Совместно с VARIABLE работал оператор [[Слово !|!]], но считывание ([[Слово @|@]]) было автоматическим.
В MMSFORTH было слово CVARIABLE для определения переменных размером в байт.


== VARIABLE в предыдущем стандарте Forth-83 (англ.) ==
Начиная с Форта-79, определение целочисленной переменной VARIABLE не требует задания начального значения и не меняет [[Стек данных|стек]].
 
Это изменение появилось в microFORTH — Форте для 8-битных микропроцессоров, ядро которого часто размещали в ПЗУ. Переменные VARIABLE начали поддерживать системы с раздельным адресным пространством ПЗУ и ОЗУ. Возможность задания начального значения в VARIABLE была убрана из-за сложности инициализации ОЗУ во время компиляции ПЗУ без создания «теневой» таблицы — пространство ПЗУ сочли слишком ценным для этого.
 
[[Каллисто]] и большинство версий Форта записывают в созданную переменную ноль, но если вам важна совместимость с Фортом, полагаться на эту особенность не следует.
 
=== VARIABLE в предыдущем стандарте Forth-83 (англ.) ===
       VARIABLE    --                            M,79
       VARIABLE    --                            M,79
           A defining word executed in the form:
           A defining word executed in the form:
Строка 36: Строка 55:
           address of its parameter field is placed on the stack.
           address of its parameter field is placed on the stack.


 
=== VARIABLE в стандарте Forth-79 (англ.) ===
== VARIABLE в стандарте Forth-79 (англ.) ==
  VARIABLE                                    227
  VARIABLE                                    227
     A defining word executed in the form:
     A defining word executed in the form:
Строка 46: Строка 64:
     it will place the storage address on the stack.
     it will place the storage address on the stack.


 
=== VARIABLE в fig-FORTH Release 1 glossary, май 1979 (англ.) ===
== VARIABLE в fig-FORTH Release 1 glossary, май 1979 (англ.) ==
  VARIABLE                                    E,LU
  VARIABLE                                    E,LU
         A defining word used in the form:
         A defining word used in the form:
Строка 56: Строка 73:
         so that a fetch or store may access this location.
         so that a fetch or store may access this location.


== Реализация ==
<pre>
2532 ;#VARIABLE
2533 ; VARIABLE        ( −− )                              Определить следующее слово, как переменную с начальным значением 0.
2534 LVAR:          .DB    8
2535                .TEXT  "VARIABLE"              ; ( "<пр>имя" −− )
2536                .DW    LCON
2537 VAR:            .DW CALL, CREAT,ZERO,COMMA, EXIT ; Действие по умолчание от CREATE нам вполне подходит.
</pre>
Реализации из SP-Forth 4.20:
<pre>
: VARIABLE ( "<spaces>name" -- ) \ 94
  [T] HEADER [I]
  CREATE-CODE COMPILE,
  0 ,
;
</pre>
<pre>
: VARIABLE ( "<spaces>name" -- ) \ 94
\ Пропустить ведущие пробелы. Выделить name, ограниченное пробелом.
\ Создать определение для name с семантикой выполнения, данной ниже.
\ Зарезервировать одну ячейку пространства данных с выровненным адресом.
\ name используется как "переменная".
\ name Выполнение: ( -- a-addr )
\ a-addr - адрес зарезервированной ячейки. За инициализацию ячейки отвечает
\ программа
  CREATE
  0 ,
;
</pre>
=== Советская реализация ===
У Баранова-Ноздрунова приводятся два следующих описания слова VARIABLE (стр. 24):
  : VARIABLE  ( ---> )    CREATE 2 ALLOT ;
  : VARIABLE  ( ---> )    CREATE 0 , ;
Второе описание также используется в 11-й главе [http://www.forth.com/starting-forth/sf11/sf11.html Starting FORTH] ''(англ.)'':
  : VARIABLE  CREATE  0 , ;
Описание и определение слова VARIABLE в ядре ФОРТ-ЕС:
<PRE>
VARIABLE    -> ОПРЕДЕЛИТЬ СЛЕДУЮЩЕЕ СЛОВО KАK                32
            ПЕРЕМЕННУЮ С НАЧАЛЬНЫМ ЗНАЧЕНИЕМ НУЛЬ


== История ==
                    Экран номер 32
Начиная с Форта-79, определение переменной VARIABLE не требует задания начального значения и не меняет [[Стек данных|стек]].
( 31.03.86  CONSTANT  VARIABLE 2CONSTANT  2VARIABLE  : ; )
 
: VARIABLE  ( -> ) CREATE 0 , ;
</PRE>
Определение слова VARIABLE в FORTH ИТЭФ:
<PRE>
            HEAD    210Q, 'VARIABL',305Q,VAR,$COL        ; VARIABLE
            DW CON,PSCOD
  $VAR    LABEL  FAR
            ADD  BX, 2
            PUSH BX
            NEXT
</PRE>


== Ссылки ==
== Ссылки ==
* [http://forth.sourceforge.net/standard/dpans/dpans6.htm#6.1.2410 Слово VARIABLE в стандарте ANS Forth] ''(англ.)'' и [http://forth.sourceforge.net/standard/dpans/dpansa6.htm#A.6.1.2410 комментарий к нему] ''(англ.)''
* {{Исходник|VARIABLE|VARIABLE}}
* [http://www.forth200x.org/documents/html/core.html#core:VARIABLE Слово VARIABLE в черновике Forth 200x] ''(англ.)'' и [http://www.forth200x.org/documents/html/rationale.html#rat:core:VARIABLE комментарий к нему] ''(англ.)''
* См. также слова [[CONSTANT]], [[FVARIABLE]] и [[VALUE]]
* Слово [http://forth.sourceforge.net/standard/dpans/dpans6.htm#6.1.2410 VARIABLE] и [http://forth.sourceforge.net/standard/dpans/dpansa6.htm#A.6.1.2410 комментарий к нему] в стандарте ANS Forth ''(англ.)''
* Слово [http://forth-standard.org/standard/core/VARIABLE VARIABLE] и [http://forth-standard.org/standard/rationale#rat:core:VARIABLE комментарий к нему] в черновике Forth 200x ''(англ.)''
* [http://gudleifr.h1.ru/cgi-bin/pilo.cgi?FL=../g9.txt&IS=\6.PERWOISTOTNIKI\LEO%20BRODIE%20STARTING%20FORTH\08.PEREMENNYE,%20KONSTANTY%20I%20MASSIWY ПЕРЕМЕННЫЕ, КОНСТАНТЫ И МАССИВЫ] в книге [http://gudleifr.h1.ru/cgi-bin/pilo.cgi?FL=../g9.txt&IS=\6.PERWOISTOTNIKI\LEO%20BRODIE%20STARTING%20FORTH Л.Броуди «Начальный курс программирования на языке Форт»]
* [http://gudleifr.h1.ru/cgi-bin/pilo.cgi?FL=../g9.txt&IS=\6.PERWOISTOTNIKI\LEO%20BRODIE%20STARTING%20FORTH\11.RASSIRENIE%20KOMPILATORA:%20OPREDELAUSIE%20I%20KOMPILIRUUSIE%20SLOWA РАСШИРЕНИЕ КОМПИЛЯТОРА: ОПРЕДЕЛЯЮЩИЕ И КОМПИЛИРУЮЩИЕ СЛОВА] в книге [http://gudleifr.h1.ru/cgi-bin/pilo.cgi?FL=../g9.txt&IS=\6.PERWOISTOTNIKI\LEO%20BRODIE%20STARTING%20FORTH Л.Броуди «Начальный курс программирования на языке Форт»]
* [http://www.forth.com/starting-forth/sf8/sf8.html Variables, Constants, and Arrays] в книге [http://www.forth.com/starting-forth/ Leo Brodie Starting Forth] ''(англ.)''
* [http://www.forth.com/starting-forth/sf11/sf11.html Extending the Compiler] в книге [http://www.forth.com/starting-forth/ Leo Brodie Starting Forth] ''(англ.)''




{{нет иллюстраций}}
{{заготовка}}
{{заготовка}}
[[Категория:Слова Каллисто]]
[[Категория:Слова Каллисто]]
[[Категория:Определяющие слова Каллисто]]
[[Категория:Слова высокого уровня]]
[[Категория:Порождающие слова Каллисто]]
[[Категория:Стандартные слова]]
[[Категория:1994 CORE]]
[[Категория:2012 CORE]]

Текущая версия от 18:51, 13 ноября 2017

VARIABLE (переменная) — стандартное порождающее слово Каллисто.

VARIABLE       ( −− )                               Определить следующее слово, как переменную с начальным значением 0.
Пример работы слова VARIABLE

Определить следующее слово как глобальную (язык Си: статичную) 16-битную переменную с начальным значением нуль.

Слово VARIABLE оставлено для совместимости с Фортом. Вместо него при разработке приложений рекомендуется использовать более современное и мощное слово VALUE.

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

В режиме ЛАТ последовательно нажмите клавиши     ШГ←   ×   7   ШГ←   В/О      ИП 

VARIABLE в стандарте ANS Forth[править]

 6.1.2410   VARIABLE                                                        CORE
            ( "<spaces>name" -- )
            Пропускает ведущие разделители пробелы. Выделяет name, ограниченное 
            пробелом. Создает определение для name с семантикой выполнения, 
            определенной ниже. Резервирует одну ячейку области данных в 
            выровненном адресе.

            name объявляется как "variable".

        name Выполнение: ( -- a-addr )
            a-addr - адрес зарезервированной ячейки. Программа ответственна за 
            инициализацию и содержание зарезервированной ячейки.

        См.: 3.4.1 Синтаксический анализ.

 A.6.1.2410   VARIABLE
 Типичное использование:
        ... VARIABLE XYZ ...

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

В Форте слово VARIABLE — одно из самых древних и устоявшихся.

Впервые оно появилось в 1964 году под именем DECLARE в программе CURVE, написанной Чак Муром на Алголе для Burroughs B5500 (Национальная ускорительная лаборатория SLAC, Стэнфордский университет). Совместно с VARIABLE работал оператор !, но считывание (@) было автоматическим.

В MMSFORTH было слово CVARIABLE для определения переменных размером в байт.

Начиная с Форта-79, определение целочисленной переменной VARIABLE не требует задания начального значения и не меняет стек.

Это изменение появилось в microFORTH — Форте для 8-битных микропроцессоров, ядро которого часто размещали в ПЗУ. Переменные VARIABLE начали поддерживать системы с раздельным адресным пространством ПЗУ и ОЗУ. Возможность задания начального значения в VARIABLE была убрана из-за сложности инициализации ОЗУ во время компиляции ПЗУ без создания «теневой» таблицы — пространство ПЗУ сочли слишком ценным для этого.

Каллисто и большинство версий Форта записывают в созданную переменную ноль, но если вам важна совместимость с Фортом, полагаться на эту особенность не следует.

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

     VARIABLE     --                            M,79
          A defining word executed in the form:
                  VARIABLE <name>
          A dictionary entry for <name> is created and two bytes are
          ALLOTted in its parameter field.  This parameter field is to
          be used for contents of the variable.  The application is
          responsible for initializing the contents of the variable
          which it creates.  When <name> is later executed, the
          address of its parameter field is placed on the stack.

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

VARIABLE                                     227
    A defining word executed in the form:
         VARIABLE  <name>
    to  create a dictionary entry for <name> and allot  two  bytes
    for  storage  in the parameter field.   The  application  must
    initialize  the stored value.   When <name> is later executed,
    it will place the storage address on the stack.

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

VARIABLE                                     E,LU
       A defining word used in the form:
                         n VARIABLE cccc
       When VARIABLE is executed, it creates the definition cccc with its
       parameter field initialized to n. When cccc is later executed, the
       address of its parameter field (containing n) is left on the stack,
       so that a fetch or store may access this location.

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

2532 ;#VARIABLE
2533 ; VARIABLE         ( −− )                               Определить следующее слово, как переменную с начальным значением 0.
2534 LVAR:           .DB     8
2535                 .TEXT   "VARIABLE"              ; ( "<пр>имя" −− )
2536                 .DW     LCON
2537 VAR:            .DW CALL, CREAT,ZERO,COMMA, EXIT ; Действие по умолчание от CREATE нам вполне подходит.

Реализации из SP-Forth 4.20:

: VARIABLE ( "<spaces>name" -- ) \ 94
  [T] HEADER [I]
  CREATE-CODE COMPILE,
  0 ,
;
: VARIABLE ( "<spaces>name" -- ) \ 94
\ Пропустить ведущие пробелы. Выделить name, ограниченное пробелом.
\ Создать определение для name с семантикой выполнения, данной ниже.
\ Зарезервировать одну ячейку пространства данных с выровненным адресом.
\ name используется как "переменная".
\ name Выполнение: ( -- a-addr )
\ a-addr - адрес зарезервированной ячейки. За инициализацию ячейки отвечает 
\ программа
  CREATE
  0 ,
;

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

У Баранова-Ноздрунова приводятся два следующих описания слова VARIABLE (стр. 24):

 : VARIABLE   ( ---> )    CREATE 2 ALLOT ;
 : VARIABLE   ( ---> )    CREATE 0 , ;

Второе описание также используется в 11-й главе Starting FORTH (англ.):

  : VARIABLE  CREATE  0 , ;

Описание и определение слова VARIABLE в ядре ФОРТ-ЕС:

VARIABLE     -> ОПРЕДЕЛИТЬ СЛЕДУЮЩЕЕ СЛОВО KАK                 32
             ПЕРЕМЕННУЮ С НАЧАЛЬНЫМ ЗНАЧЕНИЕМ НУЛЬ

                     Экран номер 32
( 31.03.86   CONSTANT  VARIABLE 2CONSTANT  2VARIABLE  : ; )

: VARIABLE  ( -> ) CREATE 0 , ;

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

            HEAD     210Q, 'VARIABL',305Q,VAR,$COL        ; VARIABLE
            DW CON,PSCOD
   $VAR     LABEL   FAR
            ADD  BX, 2
            PUSH BX
            NEXT

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


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