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

...
Google Search
Forth-FAQ Spy Grafic

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




Начать новую тему Ответить на тему  [ Сообщений: 40 ]  На страницу 1, 2, 3  След.
Автор Сообщение
 Заголовок сообщения: Некоторые вопросы устройства системы(_KROL)
СообщениеДобавлено: Вт апр 04, 2017 18:09 
Не в сети

Зарегистрирован: Пт янв 06, 2017 14:57
Сообщения: 365
Благодарил (а): 17 раз.
Поблагодарили: 1 раз.
...За 9 месяцев познаний и изучения форта я многое понял, благодаря
попыткам написать свою систему, но некоторые вопросы функционирования мне
остаются непонятны. Сейчас я почти написал F79(16-битный), но... Короче, у меня есть к вам вопросы :)
Далее я опишу часть моего кода(пишу я на FASM):
Код:
...
macro rpush [arg] { forward
dec bp
dec bp
mov [bp],arg
}
...(основные макросы)
macro AWORD name,wname
{
LAST!!=$
name#_NFA:
name#_sz db @f-name#_n
name#_n db wname
@@:
name#_LFA dw lastword
name:
name#_CFA dw name
name#_PFA dw @f
@@ dw 0
lastword=LAST!!
numwords!!=numwords!!+1
LASTCFA=name#_CFA
}

macro FWORD name,wname
{
LAST!!=$
name#_NFA:
name#_sz db @f-name#_n
name#_n db wname
@@:
name#_LFA dw lastword
name:
name#_CFA dw colon ; (?)
name#_PFA dw name
lastword=LAST!!
numwords!!=numwords!!+1
LASTCFA=name#_CFA
}

macro __IMMEDIATE
{
load c byte from LAST!!
store byte (c or 10000000b) at LAST!!
}

macro __DOES
{
store word $ at LASTCFA
store word colon at LASTCFA+2
}

macro _END { }
macro AEND { _END
      jmp FNEXT }
macro FEND { _END
      dw semicolon }
...
FNEXT:
cld
lodsw
  jmp [ax] ; (?)
...
AWORD DIVIDE,"/DIV"
pop bx,ax
idiv bx
push dx,ax
AEND
...
FWORD _MOD,"MOD"
dw DIVIDE,SWAP,DROP
FEND
...
AWORD colon,"colon"
; AX - CFA
rpush si
mov bx,ax
inc bx
inc bx
; BX - PFA (executable parameters)
mov si,[bx]
inc bx
inc bx
push bx ; other parameters
AEND
...
AWORD semicolon,"semicolon"
rpop si
  jmp FNEXT
_END
...

Раньше, до недавнего времени, я не очень понимал что такое PFA и делал так:
CFA=CODELINK(исполняемый адрес, используется обычно только при поиске)
PFA: код на форте
Т.е. в словах на ассемблере я его не учитывал.
А АИ(адресный интерпретатор) у меня был такой:
Код:
AWORD FCALL,"FCALL"
dec bp
dec bp
mov [bp],si
pop si
  jmp FNEXT 

AWORD FNEXT,"FNEXT"
cld
lodsw
  jmp ax
 
AWORD FRET,"FRET"   
mov si,[bp]
inc bp
inc bp
  jmp FNEXT

МАКРОСЫ:

[color=#FF0000]macro _WORD a_f,name,wname,imm ; (Ещё) ранее я так не совмещал...
; a_f - asm/4th word
; name - name in sources
; wname - name in the system 
; imm - immediate 
{
LAST!!=$
name#_NFA:
IF imm<>0
  name#_sz db (name#_LFA-name#_n) or 128
ELSE
  name#_sz db name#_LFA-name#_n
END IF
name#_n db wname
name#_LFA dw lastword
LASTCFA=$
name#_CFA dw name#_PFA
name#_PFA:
IF a_f<>0
  name:
  call FCALL
END IF
lastword=LAST!!
numwords!!=numwords!!+1
}
     
macro AWORD  name,wname { _WORD 0,name,wname,0
     name: }
macro AWORDI name,wname { _WORD 0,name,wname,1
     name: }     
macro FWORD  name,wname { _WORD 1,name,wname,0 }
macro FWORDI name,wname { _WORD 1,name,wname,1 }[/color]

---------------------------------------
1-й вопрос:
Так какой вариант лучше/правильнее( меня просто DOES> запутал :] )?

2-й вопрос:
Как понять строение словарей из стандартов F79/F83 (VOCABULARY)?
В одном из фортов(кажется скачал с taygeta) я нашёл такую реализацию:

Код:
( M4th KERNEL  Lexicon Related Things                         )
VARIABLE (DICTIONARY)     ( Beginning of new dictionary )

( Begin a new sub-dictionary )
: NEW-DICTIONARY ( -- ) LAST @ (DICTIONARY) ! ;

( Create dictionary )
: DICTIONARY ( -- ) (DICTIONARY) @ 0= IF
       ABORT" bad dictionary scope!" THEN
     CREATE  LAST @ ,                       ( LFA of new Dict )
     (DICTIONARY) @ ,  LAST @ @ ,           ( Hide/Show Link )
     0 (DICTIONARY) !  DOES> SWAP IF
       DUP 4 + @ SWAP @ !          ( TRUE: Link in dict )
     ELSE
       DUP 2 + @ SWAP @ !  THEN ;  ( FALSE: Remove dict )


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Некоторые вопросы устройства системы(_KROL)
СообщениеДобавлено: Вт апр 04, 2017 18:25 
PFA - это просто то место, где макрос заголовка заканчивается. Далее (с этого места) идет шитый код (дополниьельные CFA для векторных слов, маш.коды, данные CREATE/DOES> - слов...)...
Перечитайте Баранова&Ноздрунова.


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Некоторые вопросы устройства системы(_KROL)
СообщениеДобавлено: Вт апр 04, 2017 19:35 
Не в сети

Зарегистрирован: Пт янв 06, 2017 14:57
Сообщения: 365
Благодарил (а): 17 раз.
Поблагодарили: 1 раз.
Точно! У Баранова в главе "2.2.Структура словарной статьи" есть рисунок, где написано:

NEXT: W:=MEM(RI);RI:=RI+2;
goto MEM(W)

Т.е. правильно:
FNEXT:
cld
lodsw
jmp [ax]

...
name: ; !
name#_CFA dw name
...

Спасибо. А что на счёт словарей?


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Некоторые вопросы устройства системы(_KROL)
СообщениеДобавлено: Вт апр 04, 2017 19:40 
_KROL писал(а):
А что на счёт словарей?
Там же.

Правда, мне все все больше кажется, что словари - это тупик. Кроме обеспечения умозрительной возможности брать из одного словаря, а компилировать в другой, никакой особой пользы от них не наблюдается. Лучше уж "по Муру" подгружать только нужные блоки, или "по мне" использовать механизм вторичных машин.


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Некоторые вопросы устройства системы(_KROL)
СообщениеДобавлено: Вт апр 04, 2017 20:08 
Не в сети

Зарегистрирован: Вс мар 26, 2017 00:23
Сообщения: 40
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
gudleifr писал(а):
_KROL писал(а):
А что на счёт словарей?
Там же.

Правда, мне все все больше кажется, что словари - это тупик. Кроме обеспечения умозрительной возможности брать из одного словаря, а компилировать в другой, никакой особой пользы от них не наблюдается. Лучше уж "по Муру" подгружать только нужные блоки, или "по мне" использовать механизм вторичных машин.

Буду спорить. На мой взгляд - словари основа Форта. Словари и определяющие слова.
Разные словари - это разные контексты. Разные контексты - возможность "перегрузки" "операторов". А вернее использование одного и тогоже сочетания букв в разных смыслах. set, get, store, is, as и т.п. в разных местах текста могут иметь одинаковое написание, но разные функции, сообразно контексту. (Сами же мне про контексты писали).


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Некоторые вопросы устройства системы(_KROL)
СообщениеДобавлено: Вт апр 04, 2017 20:18 
vpn289 писал(а):
Буду спорить.
Не стоит. Попробуйте написать на FORTH что-то настолько большое, чтобы контексты стали оказывать влияние на код (а не просто отыгрывали обязательный балет вокруг чужих библиотек). А потом через полгода попробуйте ткнуть в выбранное наугад место кода и угадать, в каком контексте находитесь...


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Некоторые вопросы устройства системы(_KROL)
СообщениеДобавлено: Вт апр 04, 2017 20:22 
Не в сети

Зарегистрирован: Пт янв 06, 2017 14:57
Сообщения: 365
Благодарил (а): 17 раз.
Поблагодарили: 1 раз.
М... У Баранова есть VOC-LINK, что нету в F83(я всё-таки лучше буду придерживаться этого стандарта ;])

(я просто хочу написать для начала чисто классическую систему)


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Некоторые вопросы устройства системы(_KROL)
СообщениеДобавлено: Вт апр 04, 2017 20:33 
Делайте, как удобнее. Других правил нет.


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Некоторые вопросы устройства системы(_KROL)
СообщениеДобавлено: Вт апр 04, 2017 22:57 
Не в сети
Administrator
Administrator
Аватара пользователя

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

Да бесполезно, проще игнорировать. Человек со вкусом несет чушь во всех темах, до которых дотягивается. Причем здесь это делает сезонно, в периоды бана на других форумах. Классический пример, когда хочется внимания и почета, а поклонников не наблюдается.

Берем банальное:
gudleifr писал(а):
А потом через полгода попробуйте ткнуть в выбранное наугад место кода и угадать, в каком контексте находитесь...

Теперь для аналогии берем перегруженный метод и угадываем, какому конкретно классу он соответствует. Сразу же возникает встречный вопрос - а зачем??? Он же на то и перегруженный, чтобы можно было упоминать его так, чтобы применение шло с учетом контекста. Ну а со словарями точно такая же история. Они обеспечивают полиморфизм, а значит, слово INIT должно инициализировать вне зависимости от контекста. Точнее, в любом контексте.

Тонкость в том, что эти рассуждения можно применять, расширять и оспаривать при наличии вменяемой позиции. Однако gudleifr действует в соответствии со стратегией "с паршивой овцы хоть шерсти клок", и, не будучи в состоянии использовать Форт для практической профессиональной деятельности, вместо этого занимается уничижением доступных фортеров по любому поводу, чтобы выглядеть на их фоне умудренным мастером.

Шутом гороховым пусть работает, но жалко времени новых подписчиков, которые с ним еще не освоились. При наличии систематических жалоб - забаню.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Некоторые вопросы устройства системы(_KROL)
СообщениеДобавлено: Вт апр 04, 2017 23:20 
Hishnik писал(а):
...
О нашему маркетоиду опять неосторожно напомнили, что у программистов несколько другие проблемы... Извините.

Впрочем, он прав, обсуждать смысловые вещи проще там, где троллей банят. Например, за переход на личности, оправдываемый тем, что аргументы (которых нет) приводить якобы бессмысленно...


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Вложения
СообщениеДобавлено: Вс апр 23, 2017 12:36 
Не в сети

Зарегистрирован: Пт янв 06, 2017 14:57
Сообщения: 365
Благодарил (а): 17 раз.
Поблагодарили: 1 раз.
Как, и можно ли добавить вложения? (просто хочу выложить архив со своей системой)


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Вложения
СообщениеДобавлено: Вс апр 23, 2017 12:44 
_KROL писал(а):
Как, и можно ли добавить вложения? (просто хочу выложить архив со своей системой)
Если Ваша система чего-то стоит, то документация и разъяснения займут места больше, чем сам код. Поэтому единственный достойный выход - организовать свой сайт.


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Некоторые вопросы устройства системы(_KROL)
СообщениеДобавлено: Вс апр 23, 2017 13:03 
Не в сети

Зарегистрирован: Пт янв 06, 2017 14:57
Сообщения: 365
Благодарил (а): 17 раз.
Поблагодарили: 1 раз.
Опять начинаешь? :) Да я ещё школьник(хоть и в выпускном классе). Программированием сам интересуюсь...
+ полной документации пока ещё не написал


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Некоторые вопросы устройства системы(_KROL)
СообщениеДобавлено: Вс апр 23, 2017 13:12 
_KROL писал(а):
Опять начинаешь?
Вы задали вопрос. Я дал ответ. Совершенно корректный и опробованный на практике. Или Вы думаете, что Вы первый, кому захотелось выложить свою учебную программу в Сеть?
Если Вам ответ не нравится, это не значит, что я "издеваюсь над школьником". Это значит, что Вы делаете детские ошибки. Которые я пытаюсь, пока не поздно, исправить.


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Некоторые вопросы устройства системы(_KROL)
СообщениеДобавлено: Вс апр 23, 2017 13:48 
Не в сети

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

1) Свой подход к архитектуре
После долгих раздумий я пришёл к сл. варианту архитектуры:

Элемент словаря
{
NFA
LFA
MCA(Main Code Area) ; Надоели CFA и PFA - только путают
}

MCA слова на ассемблере понятно...
MCA слова на форте:
call FCALL
dw ... (адреса MCA других слов)

И самое интересное! У меня "слова-конструкторы" задаются сл. образом(пример):

OK
:: CONSTANT , DOES> @ ; OK
12 CONSTANT abc OK
abc . 12 OK


Как это выглядит в памяти:
NFA db 8,"CONSTANT"
LFA dw ...
MCA:
call FCALL
; Далее : и т.д. - не названия меток ассемблера!
dw : [ ,
; \_/ скомпилировало ::

dw (DOES>) FRET ; \Скомпилировало DOES>
ParentCode:
call FCALL ; /
dw @ FRET ; родительский метод

---

NFA db 3,"abc"
LFA dw ...
MCA:
call ParentCode ;!!! Скомпилировало (DOES>)
dw 12

2) Граница FENCE
Обычно она защищала слова только от FORGET. Теперь я сделал защиту от записи
во всю системную область.
Преемущества:
Системные пременные имеют два метода.
К примеру HERE и HERE! (запись в переменную).
Но теперь размер и время сокращается за счёт вызовов:
HERE , а не HERE @
HERE! , а не HERE !
Недостаток один: несовместимость(ну, если не поправить) с другими форт-системами.

P.s. Если вас ещё интересуют исходники, напишите как их выложить!

(блин, извините! люблю моноширинный шрифт...)


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

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


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

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


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

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