Forth http://fforum.winglion.ru/ |
|
Моя система(_KROL) http://fforum.winglion.ru/viewtopic.php?f=2&t=3127 |
Страница 35 из 36 |
Автор: | mOleg [ Вт июн 05, 2018 17:57 ] |
Заголовок сообщения: | Re: Моя система(_KROL) |
_KROL писал(а): Правда пока только голый скелет. Я не видел пока удачной реализации форта на Си 8( |
Автор: | Hishnik [ Ср июн 06, 2018 01:16 ] |
Заголовок сообщения: | Re: Моя система(_KROL) |
_KROL писал(а): Что-нибудь скажете? Надо же от чего-то отталкиваться! В целом это довольно стандартный стартовый набор. Для практической работы интереснее два других аспекта. 1. Как этот Форт взаимодействует с другими программами. Можно ли его подключить к проекту, у которого есть наглядные, красивые и распространенные вещи. Например, самостоятельно рисовать кнопки или реализовывать сеть в Форте - долго, сложно и не приводит к заметному выигрышу. Проще пользоваться готовыми библиотеками, но для этого надо либо к Форту что-то подключить, либо Форт к чему-то подключить. 2. Как Форт взаимодействует с пользователем и окружением сам по себе. Есть только консоль? И всегда только консоль? Как он открывает-закрывает файлы? В целом, эти пункты (и даже один из них) могут быть основанием для того, чтобы еще раз написать "базовый набор слов" самостоятельно. |
Автор: | _KROL [ Чт мар 14, 2019 13:08 ] |
Заголовок сообщения: | Re: Моя система(_KROL) |
Всем привет! Как время летит, а форт никак не возможно забыть Как знаете, я много раньше эксперементировал, когда писал свою систему. При выборе шитого кода мне больше понравился прямой, т.к. он проще. Однако, косвенный обладает более широкими возможностями, например, к переносу кода и создния модулей. Наверное, поэтому это классический подход для форта. И вот, когда я пытался использовать КШК, у меня возникли с пониманием, как там должно быть организован код на поле исполнение DOES>. На какой тогда код указывает CFA и PFA? Подскажите, пожалуйста! Быть может я что в этот раз создам интересное... надеюсь |
Автор: | zma [ Чт мар 14, 2019 22:41 ] |
Заголовок сообщения: | Re: Моя система(_KROL) |
Как вариант: DOES> среди прочего компилирует в словарь машинный код, который кладёт PFA на стек и устанавливает указатель адресного интерпретатора на ШК за этим кодом. Поле кода создаваемых слов указывает на этот маш. код. PFA как указывал на поле параметров после поля кода, так и продолжает указывать. |
Автор: | ath [ Пт мар 15, 2019 19:46 ] |
Заголовок сообщения: | Re: Моя система(_KROL) |
_KROL писал(а): И вот, когда я пытался использовать КШК, у меня возникли с пониманием, как там должно быть организован код на поле исполнение DOES>. На какой тогда код указывает CFA и PFA? Подскажите, пожалуйста! Быть может я что в этот раз создам интересное... надеюсь Как раз этим занимаюсь. Есть знание английского? Могу дать ссылки на очень хорошие объяснения, умных людей. Если своими словами, есть две реализации 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 |
Автор: | Hishnik [ Пт мар 15, 2019 20:56 ] |
Заголовок сообщения: | Re: Моя система(_KROL) |
ath писал(а): Как раз этим занимаюсь. А заниматься надо разъяснением, что имелось в виду под "незаконным преследованием тех, кто соблюдает требования ANS". Даю время до конца недели на приведение фактов, подтвержденных документально, либо принесение извинений подписчикам за сознательное введение в заблуждение. Невыполнение данного требования приведет к блокированию аккаунта. Любое сообщение на посторонние темы вместо затребованного разъяснения - аналогично. |
Автор: | Ethereal [ Чт апр 18, 2019 21:58 ] |
Заголовок сообщения: | Re: Моя система(_KROL) |
ath писал(а): Если своими словами, есть две реализации DOES> В общем-то <BUILDS можно свести к1. ФигФорта, <BUILDS DOES> Она мало интересна сегодня, но проще всего реализуется в Гарвардской архитектуре вроде 8051. 2. CREATE DOES> : <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:10 ] |
Заголовок сообщения: | Re: Моя система(_KROL) |
_KROL писал(а): И вот, когда я пытался использовать КШК, у меня возникли с пониманием, как там должно быть организован код на поле исполнение DOES>. Вот как раз если КШК, то лучше сделать <BUILDS DOES> , потому-что CREATE DOES> тут как серпом по яйцам. CREATE DOES> хорошо для любого другого шитого кода, но не КШК. Не, сделать конечно можно, но не красиво. Придется в словарной статье зарезервировать ячейку, которая будет использоваться только у слов с DOES> и будет бесхозной у всех остальных.
|
Автор: | _KROL [ Пн май 20, 2019 14:41 ] |
Заголовок сообщения: | Re: Моя система(_KROL) |
Здравствуйте! Я всё-таки почти сделал (частично) свою новую систему с использование КШК (основываясь на форте Winglion)... Однако, с хотением нормальной поддержки словарей (через CONTEXT) у меня появился вопрос. Как я понял, нельзя ссылаться в CFA на код на форте, так как никакого нативного CALL нету. Так что, реализовывать примитив (VOCABULARY) на ассемблере? Тогда и весь контекст? Но это не очень удобно. p.s. Спасибо за ответы! На счёт отличия <BUILDS и CREATE я понял. p.p.s. Если что, делать я на той неделе по вдохновению начал |
Автор: | _KROL [ Пн май 20, 2019 14:54 ] |
Заголовок сообщения: | Re: Моя система(_KROL) |
Ладно, добавлю примитив does>. Ведь нету других вариантов же? |
Автор: | Ethereal [ Вт май 21, 2019 07:42 ] |
Заголовок сообщения: | Re: Моя система(_KROL) |
Это как раз тот случай когда не стоит на ассемблере, а стоит шитым кодом. Потому-что вот такое у меня (точнее в классическом Фиг, который я перенес на 32-разрядную почву) получилось определение Код: HEX и в ассемблерном исходнике оно косвенным шитый кодом записывается так: VOCABULARY <BUILDS A0202083 , CURRENT @ CELL- , HERE VOC-LINK @ , VOC-LINK ! IMMEDIATE DOES> CELL+ CONTEXT ! ; Код: ENTRY 10, 'VOCABULARY', VOCABULARY Ну а образчик самого словаря можно увидеть в слове FORTH которое суть корневой словарь; 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 Код: ENTRY 5+40h, 'FORTH', FORTH Константа 0A0202083 выше это просто имя из трех пробелов у фейковой словарной статьи через который словарь сшивается с родителем. Это такой изящный прибамбас Фиг-Форта.; 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 А LAST_NAME - это метка при последнем слове в исходнике, вот такая LAST_NAME: ENTRY 4, 'SAVE', SAVE ... ------------------------------------------------------------------ Как видишь выше вообще нет примитива (VOCABULARY). Словарь создается словом VOCABULARY внутри которого есть <BUILDS DOES>. И поэтому у всех словарей есть общий DOES>-ный код, назовем его doer, он по метке DoVОC и он не на ассемблере. А шитым кодом. И вообще все это делается просто, ты-же видишь выше, что просто, остроумно, но просто. |
Автор: | Ethereal [ Вт май 21, 2019 08:46 ] |
Заголовок сообщения: | Re: Моя система(_KROL) |
_KROL писал(а): Как я понял, нельзя ссылаться в CFA на код на форте, так как никакого нативного CALL нету. Так что, реализовывать примитив (VOCABULARY) на ассемблере? Как-то логика твоей мысли ускользает. Ячейка CFA может ссылаться на (содержать адрес)Код: DoCOLON: sub ebp, 4 тогда сразу после CFA (т.е. в PFA) располагается шитый код.mov [ebp], esi lea esi, [eax+4] NEXT$ CFA может ссылаться на Код: DoDOES: sub ebp, 4 тогда сразу после CFA (в первой ячейке PFA) располагается адрес где находится шитый код.mov [ebp], esi mov esi, [eax+4] push ebx lea ebx, [eax+8] NEXT$ Кстати именно из-за наличия этого адреса в первой ячейке PFA при КШК требуется не CREATE , а отдельное слово <BUILDS. CREATE ведь создает слово, которое возращает адрес совершенно пустого в момент создания PFA. А <BUILDS одну ячейку в PFA под дело занимает. Под то дело, что надо-же куда-то положить адрес, который в ПШК вмонтирован в инструкцию call. Так-что от того, что в КШК нету call-а неизбежность ассемблерности чего-либо никак не вытекает. |
Автор: | _KROL [ Вт май 21, 2019 17:37 ] |
Заголовок сообщения: | Re: Моя система(_KROL) |
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 Я вообще хотел сделать стек контекста, но видно мне пока и достаточно того, как реализовано в твоём форте (я что-то про него забыл). |
Автор: | _KROL [ Вт май 21, 2019 18:15 ] |
Заголовок сообщения: | Re: Моя система(_KROL) |
У меня должно примерно линковаться следующим образом: Код: 0<-forth<-abc<-voc1<-... ^-some1<-some2 или по другому? p.s. И должно ли поле связи слов словаря указывать в конце на сам словарь? |
Автор: | Ethereal [ Вт май 21, 2019 18:22 ] |
Заголовок сообщения: | Re: Моя система(_KROL) |
Они одинаковые. Пусть ты создал словарь BLABLA. Тогда первое слово в нем будет иметь LFA указывающий на 0A0202083 словаря-родителя. А сам словарь BLABLA будет иметь DD 0A0202083h DD адрес_последнего_слова_словаря_BLABLA DD адрес_такого-же_поля_в_словаре_созданном_предпоследним |
Страница 35 из 36 | Часовой пояс: UTC + 3 часа [ Летнее время ] |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |