Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Вт мар 19, 2024 08:07

...
Google Search
Forth-FAQ Spy Grafic

Часовой пояс: UTC + 3 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 536 ]  На страницу Пред.  1 ... 32, 33, 34, 35, 36  След.
Автор Сообщение
 Заголовок сообщения: Re: Моя система(_KROL)
СообщениеДобавлено: Вт июн 05, 2018 17:57 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 5062
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 23 раз.
Поблагодарили: 63 раз.
_KROL писал(а):
Правда пока только голый скелет.

Я не видел пока удачной реализации форта на Си 8(

_________________
Мне бы только мой крошечный вклад внести,
За короткую жизнь сплести
Хотя бы ниточку шёлка.
fleur


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Моя система(_KROL)
СообщениеДобавлено: Ср июн 06, 2018 01:16 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7958
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
_KROL писал(а):
Что-нибудь скажете? Надо же от чего-то отталкиваться!

В целом это довольно стандартный стартовый набор.

Для практической работы интереснее два других аспекта.
1. Как этот Форт взаимодействует с другими программами. Можно ли его подключить к проекту, у которого есть наглядные, красивые и распространенные вещи. Например, самостоятельно рисовать кнопки или реализовывать сеть в Форте - долго, сложно и не приводит к заметному выигрышу. Проще пользоваться готовыми библиотеками, но для этого надо либо к Форту что-то подключить, либо Форт к чему-то подключить.
2. Как Форт взаимодействует с пользователем и окружением сам по себе. Есть только консоль? И всегда только консоль? Как он открывает-закрывает файлы?
В целом, эти пункты (и даже один из них) могут быть основанием для того, чтобы еще раз написать "базовый набор слов" самостоятельно.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Моя система(_KROL)
СообщениеДобавлено: Чт мар 14, 2019 13:08 
Не в сети

Зарегистрирован: Пт янв 06, 2017 14:57
Сообщения: 365
Благодарил (а): 17 раз.
Поблагодарили: 1 раз.
Всем привет! Как время летит, а форт никак не возможно забыть :)
Как знаете, я много раньше эксперементировал, когда писал свою систему. При выборе шитого кода мне больше понравился прямой, т.к. он проще. Однако, косвенный обладает более широкими возможностями, например, к переносу кода и создния модулей. Наверное, поэтому это классический подход для форта.
И вот, когда я пытался использовать КШК, у меня возникли с пониманием, как там должно быть организован код на поле исполнение DOES>.
На какой тогда код указывает CFA и PFA?
Подскажите, пожалуйста! Быть может я что в этот раз создам интересное... надеюсь :shuffle;


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Моя система(_KROL)
СообщениеДобавлено: Чт мар 14, 2019 22:41 
Не в сети

Зарегистрирован: Пн янв 28, 2019 03:10
Сообщения: 174
Благодарил (а): 20 раз.
Поблагодарили: 13 раз.
Как вариант: DOES> среди прочего компилирует в словарь машинный код, который кладёт PFA на стек и устанавливает указатель адресного интерпретатора на ШК за этим кодом. Поле кода создаваемых слов указывает на этот маш. код. PFA как указывал на поле параметров после поля кода, так и продолжает указывать.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Моя система(_KROL)
СообщениеДобавлено: Пт мар 15, 2019 19:46 
_KROL писал(а):
И вот, когда я пытался использовать КШК, у меня возникли с пониманием, как там должно быть организован код на поле исполнение DOES>.
На какой тогда код указывает CFA и PFA?
Подскажите, пожалуйста! Быть может я что в этот раз создам интересное... надеюсь :shuffle;

Как раз этим занимаюсь. Есть знание английского? Могу дать ссылки на очень хорошие объяснения, умных людей. :shuffle;

Если своими словами, есть две реализации DOES>

1. ФигФорта, <BUILDS DOES>

Она мало интересна сегодня, но проще всего реализуется в Гарвардской архитектуре вроде 8051.

2. CREATE DOES>

Вот про неё и напишу. Главное правило КШК, что поле кода (CFA) всегда содержит адрес программы в машинном коде. DOES> делает вид для программиста, что обработчик написан на Форте. Но на низком уровне в поле кода всё равно сидит адрес машинного кода, таковы требования КШК.

В теории обработчик слова, созданного CREATE DOES> , должен быть всегда DODOES — но ему необходим параметр, где лежит ШК настоящего высокоуровневого обработчика. Этот ШК скомпилирован после каждого DOES> индивидуально. Поэтому до него компилируется индивидуальный кусочек машинного кода (на него и ставится ссылка в поле кода), запускающий интерпретацию ШК.

Теперь на практике.
Код:
: CONSTANT CREATE , DOES> @ ;
5 CONSTANT FIVE
10 CONSTANT TEN

Компилируются так в КШК:
Код:
Поле имени: 8 "CONSTANT"
Поле кода: CALL ( обычное для всех двоеточий)
Поле параметров:
CREATE
,
(;DOES)
DOCON: ( метка, для полей кода констант)
Машинный код, например JSR DODOES и адрес нашего ШК в стеке
@ ( тут уже наш обработчик пошёл)
EXIT

Поле имени: 4 "FIVE"
Поле кода: DOCON
Поле параметров: 5

Поле имени: 3 "TEN"
Поле кода: DOCON
Поле параметров: 10

Поле связи я не пишу, оно тут роли не играет. Интересно, что (;DOES) одно и тоже как для DOES> так и для низкоуровневого ;DOES


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Моя система(_KROL)
СообщениеДобавлено: Пт мар 15, 2019 20:56 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7958
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
ath писал(а):
Как раз этим занимаюсь.

А заниматься надо разъяснением, что имелось в виду под "незаконным преследованием тех, кто соблюдает требования ANS". Даю время до конца недели на приведение фактов, подтвержденных документально, либо принесение извинений подписчикам за сознательное введение в заблуждение. Невыполнение данного требования приведет к блокированию аккаунта. Любое сообщение на посторонние темы вместо затребованного разъяснения - аналогично.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Моя система(_KROL)
СообщениеДобавлено: Чт апр 18, 2019 21:58 
Не в сети
Аватара пользователя

Зарегистрирован: Ср фев 23, 2011 20:42
Сообщения: 600
Откуда: Карелия
Благодарил (а): 3 раз.
Поблагодарили: 24 раз.
ath писал(а):
Если своими словами, есть две реализации DOES>
1. ФигФорта, <BUILDS DOES>
Она мало интересна сегодня, но проще всего реализуется в Гарвардской архитектуре вроде 8051.
2. CREATE DOES>
В общем-то <BUILDS можно свести к
: <BUILDS CREATE CELL ALLOT ;
так-что <BUILDS это почти что CREATE , но все-же не оно.

Из некоего 32-разрядного FIG :
: <BUILDS 0 CONSTANT ;
: DOES> R> LATEST PFA ! (;CODE) ассемблерное_бла_бла
Код:
      ENTRY   7, '<BUILDS', BUILDS
; Used within a colon-definition:
;     : cccc  <BUILDS  ...
;               DOES>  ...  ;
; Each time cccc is executed, <BUILDS defines a new word with a
; high-level execution procedure. 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 procedures to
; be written in high-level rather than in assembler code (as required
; by ;CODE ).
      DD   DoCOLON
      DD   ZERO, CONSTANT, SEMI_S

      ENTRY   5, 'DOES>', DOES
; A word which defines the run-time action within a high-level
; defining word. DOES> alters the code field and first parameter of
; the new word to execute the sequence of compiled word addresses
; following DOES>. Used in combination with <BUILDS. When the DOES>
; part executes it begins with the address of the first parameter of
; the new word on the stack. This allows interpretation using this
; area or its contents. Typical uses include the Forth assembler,
; multidimensional arrays, and compiler generation.
      DD   DoCOLON
      DD   R_FROM, LATEST, PFA, STORE_
      DD   _SEMI_CODE_
DoDOES:      sub   ebp, 4
      mov   [ebp], esi
      mov   esi, [eax+4]
      push   ebx
      lea   ebx, [eax+8]
      NEXT$


Последний раз редактировалось Ethereal Чт апр 18, 2019 22:19, всего редактировалось 4 раз(а).

Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Моя система(_KROL)
СообщениеДобавлено: Чт апр 18, 2019 22:10 
Не в сети
Аватара пользователя

Зарегистрирован: Ср фев 23, 2011 20:42
Сообщения: 600
Откуда: Карелия
Благодарил (а): 3 раз.
Поблагодарили: 24 раз.
_KROL писал(а):
И вот, когда я пытался использовать КШК, у меня возникли с пониманием, как там должно быть организован код на поле исполнение DOES>.
Вот как раз если КШК, то лучше сделать <BUILDS DOES> , потому-что CREATE DOES> тут как серпом по яйцам. CREATE DOES> хорошо для любого другого шитого кода, но не КШК. Не, сделать конечно можно, но не красиво. Придется в словарной статье зарезервировать ячейку, которая будет использоваться только у слов с DOES> и будет бесхозной у всех остальных.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Моя система(_KROL)
СообщениеДобавлено: Пн май 20, 2019 14:41 
Не в сети

Зарегистрирован: Пт янв 06, 2017 14:57
Сообщения: 365
Благодарил (а): 17 раз.
Поблагодарили: 1 раз.
Здравствуйте! :)
Я всё-таки почти сделал (частично) свою новую систему с использование КШК (основываясь на форте Winglion)...
Однако, с хотением нормальной поддержки словарей (через CONTEXT) у меня появился вопрос.
Как я понял, нельзя ссылаться в CFA на код на форте, так как никакого нативного CALL нету. Так что, реализовывать примитив (VOCABULARY) на ассемблере? Тогда и весь контекст? Но это не очень удобно.
p.s. Спасибо за ответы! На счёт отличия <BUILDS и CREATE я понял.
p.p.s. Если что, делать я на той неделе по вдохновению начал :roll:


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Моя система(_KROL)
СообщениеДобавлено: Пн май 20, 2019 14:54 
Не в сети

Зарегистрирован: Пт янв 06, 2017 14:57
Сообщения: 365
Благодарил (а): 17 раз.
Поблагодарили: 1 раз.
Ладно, добавлю примитив does>. Ведь нету других вариантов же?


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Моя система(_KROL)
СообщениеДобавлено: Вт май 21, 2019 07:42 
Не в сети
Аватара пользователя

Зарегистрирован: Ср фев 23, 2011 20:42
Сообщения: 600
Откуда: Карелия
Благодарил (а): 3 раз.
Поблагодарили: 24 раз.
Это как раз тот случай когда не стоит на ассемблере, а стоит шитым кодом. Потому-что вот такое у меня (точнее в классическом Фиг, который я перенес на 32-разрядную почву) получилось определение
Код:
HEX

: VOCABULARY
  <BUILDS
     A0202083 ,
     CURRENT @ CELL- ,
     HERE VOC-LINK @ , VOC-LINK !
     IMMEDIATE
  DOES>
    CELL+ CONTEXT !
;
и в ассемблерном исходнике оно косвенным шитый кодом записывается так
Код:
      ENTRY   10, 'VOCABULARY', VOCABULARY
; A defining word used in the form:
;     VOCABULARY cccc
; to create a vocabulary definition cccc. Subsequent use of cccc will
; make it the CONTEXT vocabulary which is searched first by INTERPRET.
; The sequence "cccc DEFINITIONS" will also make cccc the CURRENT
; vocabulary into which new definitions are placed. In fig-FORTH, cccc
; will be so chained as to include all definitions of the vocabulary
; in which cccc is itself defined. All vocabularys ultimately chain to
; Forth. By convention, vocabulary names are to be declared IMMEDIATE.
; See VOC-LINK
         DD   DoCOLON
         DD   BUILDS, LIT, 0A0202083h, COMMA
         DD   CURRENT, FETCH, CELL_MINUS, COMMA
         DD   HERE, VOC_LINK, FETCH, COMMA, VOC_LINK, STORE_
         DD   IMMEDIATE
         DD   DOES
DoVOC      DD   CELL_PLUS, CONTEXT, STORE_, SEMI_S
Ну а образчик самого словаря можно увидеть в слове FORTH которое суть корневой словарь
Код:
      ENTRY   5+40h, 'FORTH', FORTH
; The name of the primary vocabulary.
; Execution makes FORTH the CONTEXT vocabulary. Until additional user
; vocabularies are defined, new user definitions become a part of
; FORTH. FORTH is immediate, so it will execute during the creation of
; a colon-definition, to select this vocabulary at compile time.
            DD   DoDOES
            DD   DoVOC
            DD   0A0202083h
            DD   LAST_NAME
LAST_VOCAB   DD   0
Константа 0A0202083 выше это просто имя из трех пробелов у фейковой словарной статьи через который словарь сшивается с родителем. Это такой изящный прибамбас Фиг-Форта.
А LAST_NAME - это метка при последнем слове в исходнике, вот такая
LAST_NAME: ENTRY 4, 'SAVE', SAVE
...

------------------------------------------------------------------
Как видишь выше вообще нет примитива (VOCABULARY). Словарь создается словом VOCABULARY внутри которого есть <BUILDS DOES>. И поэтому у всех словарей есть общий DOES>-ный код, назовем его doer, он по метке DoVОC и он не на ассемблере. А шитым кодом.

И вообще все это делается просто, ты-же видишь выше, что просто, остроумно, но просто.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Моя система(_KROL)
СообщениеДобавлено: Вт май 21, 2019 08:46 
Не в сети
Аватара пользователя

Зарегистрирован: Ср фев 23, 2011 20:42
Сообщения: 600
Откуда: Карелия
Благодарил (а): 3 раз.
Поблагодарили: 24 раз.
_KROL писал(а):
Как я понял, нельзя ссылаться в CFA на код на форте, так как никакого нативного CALL нету. Так что, реализовывать примитив (VOCABULARY) на ассемблере?
Как-то логика твоей мысли ускользает. Ячейка CFA может ссылаться на (содержать адрес)
Код:
DoCOLON:   sub   ebp, 4
      mov   [ebp], esi
      lea   esi, [eax+4]
      NEXT$
тогда сразу после CFA (т.е. в PFA) располагается шитый код.

CFA может ссылаться на
Код:
DoDOES:      sub   ebp, 4
      mov   [ebp], esi
      mov   esi, [eax+4]
      push   ebx
      lea   ebx, [eax+8]
      NEXT$
тогда сразу после CFA (в первой ячейке PFA) располагается адрес где находится шитый код.

Кстати именно из-за наличия этого адреса в первой ячейке PFA при КШК требуется не CREATE , а отдельное слово <BUILDS. CREATE ведь создает слово, которое возращает адрес совершенно пустого в момент создания PFA. А <BUILDS одну ячейку в PFA под дело занимает. Под то дело, что надо-же куда-то положить адрес, который в ПШК вмонтирован в инструкцию call.

Так-что от того, что в КШК нету call-а неизбежность ассемблерности чего-либо никак не вытекает.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Моя система(_KROL)
СообщениеДобавлено: Вт май 21, 2019 17:37 
Не в сети

Зарегистрирован: Пт янв 06, 2017 14:57
Сообщения: 365
Благодарил (а): 17 раз.
Поблагодарили: 1 раз.
Ethereal писал(а):
HEX

: VOCABULARY
<BUILDS
A0202083 ,
CURRENT @ CELL- ,
HERE VOC-LINK @ , VOC-LINK !
IMMEDIATE
DOES>
CELL+ CONTEXT !
;
Ethereal писал(а):
DD DoDOES
DD DoVOC
DD 0A0202083h
DD LAST_NAME
У меня такое чувство, что тут немного разные порядки хранения данных...

Я вообще хотел сделать стек контекста, но видно мне пока и достаточно того, как реализовано в твоём форте (я что-то про него забыл).


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Моя система(_KROL)
СообщениеДобавлено: Вт май 21, 2019 18:15 
Не в сети

Зарегистрирован: Пт янв 06, 2017 14:57
Сообщения: 365
Благодарил (а): 17 раз.
Поблагодарили: 1 раз.
У меня должно примерно линковаться следующим образом:
Код:
0<-forth<-abc<-voc1<-...
                ^-some1<-some2

или по другому?
p.s. И должно ли поле связи слов словаря указывать в конце на сам словарь?


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Моя система(_KROL)
СообщениеДобавлено: Вт май 21, 2019 18:22 
Не в сети
Аватара пользователя

Зарегистрирован: Ср фев 23, 2011 20:42
Сообщения: 600
Откуда: Карелия
Благодарил (а): 3 раз.
Поблагодарили: 24 раз.
Они одинаковые. Пусть ты создал словарь BLABLA. Тогда первое слово в нем будет иметь LFA указывающий на 0A0202083 словаря-родителя. А сам словарь BLABLA будет иметь
DD 0A0202083h
DD адрес_последнего_слова_словаря_BLABLA
DD адрес_такого-же_поля_в_словаре_созданном_предпоследним


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 536 ]  На страницу Пред.  1 ... 32, 33, 34, 35, 36  След.

Часовой пояс: UTC + 3 часа [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
phpBB сборка от FladeX // Русская поддержка phpBB