Редактирование: CREATE

Перейти к навигации Перейти к поиску
Внимание: Вы не вошли в систему. Ваш IP-адрес будет общедоступен, если вы запишете какие-либо изменения. Если вы войдёте или создадите учётную запись, её имя будет использоваться вместо IP-адреса, наряду с другими преимуществами.

Правка может быть отменена. Пожалуйста, просмотрите сравнение версий ниже, чтобы убедиться, что это нужная вам правка, и запишите страницу ниже, чтобы отменить правку.

Текущая версия Ваш текст
Строка 6: Строка 6:
В [[Режим ЛАТ|режиме ЛАТ]] последовательно нажмите клавиши [[Клавиша С/П|{{Чёрная клавиша|С/П}}]] [[Клавиша ×|{{Серая клавиша|×}}]] [[Клавиша ИП|{{Чёрная клавиша|ИП}}]] {{ШГ←}} [[Клавиша 2|{{Серая клавиша|2}}]] [[Клавиша ИП|{{Чёрная клавиша|ИП}}]]
В [[Режим ЛАТ|режиме ЛАТ]] последовательно нажмите клавиши [[Клавиша С/П|{{Чёрная клавиша|С/П}}]] [[Клавиша ×|{{Серая клавиша|×}}]] [[Клавиша ИП|{{Чёрная клавиша|ИП}}]] {{ШГ←}} [[Клавиша 2|{{Серая клавиша|2}}]] [[Клавиша ИП|{{Чёрная клавиша|ИП}}]]


== CREATE в стандарте ANS Forth ==
== Детали реализации ==
Создающая часть слова CREATE является высокоуровневой. Для ускорения исполнения создаваемых слов исполняющая часть слова CREATE написана на [[ЯМК|языке МК]].
 
== История ==
Слово присутствует в Форте−79 и последующих, но имеет небольшие отличия из−за принятия на себя функций <BUILDS
 
В 1968 году Чак Мур работал в Mohasco Industries, Inc ([https://en.wikipedia.org/wiki/Amsterdam_%28city%29,_New_York Amsterdam NY], ''англ.''). Первая версия интерпретатора, получившая название FORTH, заработала на миникомпьютере IBM 1130 с графическим дисплеем 2250 (16-битный процессор с ОЗУ 8К, дисководом, клавиатурой, принтером и ридером/панчером перфокарт). Первый FORTH знал слово CREATE под именем ENTER
 
CREATE создавал классическую [[Словарная статья|словарную статью]]:
    ссылка на предыдущую запись
    счётчик и 3 символа
    код для выполнения
    параметры
 
[[Поле кода]] было важной инновацией, так как косвенный переход был единственным накладным расходом, как только слово было найдено. Про ценность счётчика для различения слов Чак Мур узнал от писателей компиляторов из Стэнфорда.
 
В 1970 году Чак Мур, создатель Форта, называл слова, кладущие на стек значение или адрес своего [[поле данных|поля данных]] «существительными» (''англ.'' noun).
 
Если CREATE используется, как часть современной конструкции CREATE…[[DOES⟩|DOES&gt;]] — в большинстве случаев при переносе такого определения слова на Каллисто достаточно просто заменить слово CREATE на [[⟨BUILDS|слово &lt;BUILDS]]
 
Английское слово [http://www.lingvo-online.ru/ru/Translate/en-ru/create create] означает «создать».
 
=== CREATE в стандарте ANS Forth ===
<pre>
<pre>
  6.1.1000  CREATE                                                          CORE
  6.1.1000  CREATE                                                          CORE
Строка 31: Строка 53:
         ... CREATE SOMETHING ...
         ... CREATE SOMETHING ...
</pre>
</pre>
== История ==
Слово присутствует в Форте−79 и последующих, но имеет небольшие отличия из−за принятия на себя функций <BUILDS
В 1968 году Чак Мур работал в Mohasco Industries, Inc ([https://en.wikipedia.org/wiki/Amsterdam_%28city%29,_New_York Amsterdam NY], ''англ.''). Первая версия интерпретатора, получившая название FORTH, заработала на миникомпьютере IBM 1130 с графическим дисплеем 2250 (16-битный процессор с ОЗУ 8К, дисководом, клавиатурой, принтером и ридером/панчером перфокарт). Первый FORTH знал слово CREATE под именем ENTER
CREATE создавал классическую [[Словарная статья|словарную статью]]:
    ссылка на предыдущую запись
    счётчик и 3 символа
    код для выполнения
    параметры
[[Поле кода]] было важной инновацией, так как косвенный переход был единственным накладным расходом, как только слово было найдено. Про ценность счётчика для различения слов Чак Мур узнал от писателей компиляторов из Стэнфорда.
В 1970 году Чак Мур, создатель Форта, называл слова, кладущие на стек значение или адрес своего [[поле данных|поля данных]] «существительными» (''англ.'' noun).
Если CREATE используется, как часть современной конструкции CREATE…[[DOES⟩|DOES&gt;]] — в большинстве случаев при переносе такого определения слова на Каллисто достаточно просто заменить слово CREATE на [[⟨BUILDS|слово &lt;BUILDS]]
Английское слово [http://www.lingvo-online.ru/ru/Translate/en-ru/create create] означает «создать».


=== CREATE в предыдущем стандарте Forth-83 (англ.) ===
=== CREATE в предыдущем стандарте Forth-83 (англ.) ===
Строка 80: Строка 83:


== Реализация ==
== Реализация ==
Создающая часть слова CREATE является высокоуровневой. Для ускорения исполнения создаваемых слов исполняющая часть слова CREATE написана на [[ЯМК|языке МК]].
<pre>
3310 ;#CREATE
3311 ; CREATE          ( −− )                              Создать начало статьи (до PFA) для следующего слова.
3312 ; Сформировать слово с именем XXX (заголовок и CFA), оставив его поле параметров пустым.
3313 ; При обращении к XXX на стек кладётся его адрес.
3314 ; Длина имени слова ограничивается 31 литерой
3315 ; Слово присутствует в Форте−79 и последующих, но имеет небольшие отличия из−за принятия на себя функций <BUILDS
3316 LCREAT:        .DB    6
3317                .TEXT  "CREATE"                ; ( "<пр>имя" −− )
3318                .DW    LIDDOT
3319 CREAT:          .DW CALL, BL,WORD, FIND, ZBRAN,CRE
3320                .DW DROP,IDDOT,LITB            ; Наш FIND возвращает NFA
3321                .DB 4
3322                .DW MESS                        ; Сообщение, что такое слово уже есть
3323 CRE:            .DW HERE, DUP,CAT, LITB
3324                .DB 31
3325                .DW MIN                        ; Обрезать длину по 31 литеру
3326                .DW DUP, CCOM                  ; биты SMUDGE и IMMEDIATE сброшены
3327                .DW ALLOT                      ; Оставить слово как поле имени
3328                .DW LATES, COMMA                ; NFA прошлого слова в поле связи
3329                .DW CURR,UAT, STORE            ; Сделать слово последним в словаре CURRENT @
3330                .DW LITP,SCRE, BRAN,RCOMMA      ; CFA: созданное слово кладёт на стек свой PFA
3331 SCRE:          RM7 10002 + KM3  KGOTO9        ; Созданные слова размещаются в области двоичных данных
</pre>
Реализации из SP-Forth 4.20:
<pre>
0 VALUE CREATE-CODE
CODE _CREATE-CODE
    LEA  EBP, -4 [EBP]
    MOV  [EBP], EAX
    POP EAX
    RET
END-CODE
' _CREATE-CODE TO CREATE-CODE
    '  _CREATE-CODE  >VIRT VALUE CREATE-CODE
: SHEADER ( addr u -- )
  HERE 0 , ( cfa )
\  DUP LAST-CFA !
  0 C,    ( flags )
  -ROT WARNING @
  IF 2DUP GET-CURRENT SEARCH-WORDLIST
    IF DROP 2DUP TYPE ."  isn't unique" CR THEN
  THEN
  CURRENT @ +SWORD
  ALIGN
  HERE SWAP ! ( заполнили cfa )
;
: HEADER
  PARSE-NAME SHEADER
;
: CREATE ( "<spaces>name" -- ) \ 94
  [T] HEADER [I]
  CREATE-CODE COMPILE,
;
</pre>
<pre>
USER LAST-CFA
VECT SHEADER
: SHEADER1 ( addr u -- )
  HERE 0 , ( cfa )
  DUP LAST-CFA !
  0 C,    ( flags )
  -ROT WARNING @
  IF 2DUP GET-CURRENT SEARCH-WORDLIST
    IF DROP 2DUP TYPE ."  isn't unique (" SOURCE-NAME TYPE ." )" CR THEN
  THEN
  CURRENT @ +SWORD
  ALIGN
  ( сдвигаем указатель кода так, чтобы при компиляции переменных и векторов )
  ( следующая ячейка данных, находящаяся после CALL *-CODE была выровнена:  )
  ALIGN-BYTES @ DUP 4 >
  IF 5 - ALLOT
  ELSE 1 - ALLOT
  THEN
  HERE SWAP ! ( заполнили cfa )
;
' SHEADER1 ' SHEADER TC-VECT!
: CREATED ( addr u -- )
\ Создать определение для c-addr u с семантикой выполнения, описанной ниже.
\ Если указатель пространства данных не выровнен, зарезервировать место
\ для выравнивания. Новый указатель пространства данных определяет
\ поле данных name. CREATE не резервирует место в поле данных name.
\ name Выполнение: ( -- a-addr )
\ a-addr - адрес поля данных name. Семантика выполнения name может
\ быть расширена с помощью DOES>.
  SHEADER
  HERE DUP LAST-CFA @ !
  DOES>A ! ( для DOES )
  ['] _CREATE-CODE COMPILE,
;
: CREATE ( "<spaces>name" -- ) \ 94
  PARSE-NAME CREATED
;
</pre>
=== Советская реализация ===
Юрий Семёнов приводит следующее определение слова CREATE (стр. 139):
Юрий Семёнов приводит следующее определение слова CREATE (стр. 139):
<PRE>
<PRE>
Пожалуйста, учтите, что любой ваш вклад в проект «ПМК вики» может быть отредактирован или удалён другими участниками. Если вы не хотите, чтобы кто-либо изменял ваши тексты, не помещайте их сюда.
Вы также подтверждаете, что являетесь автором вносимых дополнений, или скопировали их из источника, допускающего свободное распространение и изменение своего содержимого (см. Pmkwiki:Авторские права). НЕ РАЗМЕЩАЙТЕ БЕЗ РАЗРЕШЕНИЯ ОХРАНЯЕМЫЕ АВТОРСКИМ ПРАВОМ МАТЕРИАЛЫ!

В целях защиты вики от автоматического спама в правках просим вас решить следующую каптчу:

Отменить Справка по редактированию (в новом окне)