[__My 4tH__]
Участников: 2
Страница 2 из 2
Страница 2 из 2 • 1, 2
Re: [__My 4tH__]
А где написано, что надо читать именно DOCS\SOURCES.TXT? Для стороннего человека Ваш проект - это 260к кода, который может содержать ошибку в любом месте!_KROL пишет:Вы просто не внимательны. Кое-что я описал в DOCS\SOURCES.TXT. Да и вообще в DOCS я обычно сейчас и пишу всё!
Но, вообще, если Вы хотите получить FORTH, то ошибку можно искать по его правилам. Рассматривайте весь код, который уже отладили как стенд, созданный для единственной цели - отладки того, что пока не идет. Смело добавляйте в свое "ядро" отладочные и диагностические механизмы, не скупитесь на обвес анализируемого фрагмента всякими тестерами и пробниками. Пусть FORTH покажет, на что способен.
Gudleifr- Admin
- Сообщения : 3244
Дата регистрации : 2017-03-29
Re: [__My 4tH__]
: cls 0 18 DO 0 4F DO 14 B800 IJ 2* NOP C!L LOOP LOOP ;
Не понял: почему 18 и 4F вместо 19 и 80 ?
Почему 14 вместо 20 ?
Почему IJ определено по документации, как I*J+I ?
Если IJ , все-таки, означает J*Ilim+I , у Вас все равно неправильно - Ilim=4F (а множить надо на 50).
Впрочем, вложенные циклы у Вас, похоже, просто не работают...
Не понял: почему 18 и 4F вместо 19 и 80 ?
Почему 14 вместо 20 ?
Почему IJ определено по документации, как I*J+I ?
Если IJ , все-таки, означает J*Ilim+I , у Вас все равно неправильно - Ilim=4F (а множить надо на 50).
Впрочем, вложенные циклы у Вас, похоже, просто не работают...
Gudleifr- Admin
- Сообщения : 3244
Дата регистрации : 2017-03-29
Re: [__My 4tH__]
Ну, я использую NOP для отладки в TD Хот я когда-то хотел на ассемблере написать отладчик для форта... Видимо момент настал!Но, вообще, если Вы хотите получить FORTH, то ошибку можно искать по его правилам. Рассматривайте весь код, который уже отладили как стенд, созданный для единственной цели - отладки того, что пока не идет. Смело добавляйте в свое "ядро" отладочные и диагностические механизмы, не скупитесь на обвес анализируемого фрагмента всякими тестерами и пробниками. Пусть FORTH покажет, на что способен.
Это правильно, т.к. начинается всё с 0, а не с 1(т.е. (DECIMAL) 0..79,0..24)!Не понял: почему 18 и 4F вместо 19 и 80 ?
Я сам не понял)Почему 14 вместо 20 ?
Не, циклы работают, а в этом моементе я даже в моём GABCCRT ошибься, спасибо!Почему IJ определено по документации, как I*J+I ?
Если IJ , все-таки, означает J*Ilim+I , у Вас все равно неправильно - Ilim=4F (а множить надо на 50).
Впрочем, вложенные циклы у Вас, похоже, просто не работают...
_KROL- Сообщения : 93
Дата регистрации : 2017-07-28
Возраст : 24
Откуда : Беларусь
Re: [__My 4tH__]
Не, этот счастливый этап для Вас прошел. Ваш FORTH уже умнее. Зачем его останавливать снаружи, если он сам умеет останавливаться в любом месте? И выдавать любые дампы? (Я сам, когда делал первый FOBOS слишком затянул debug-этап. Потом, задним числом понял, что сам FORTH позволил бы эту работу упростить)._KROL пишет:Ну, я использую NOP для отладки в TD
Нет, неправильно. LOOP останавливает повтор, когда пересекается граница lim-1|lim. Т.е. "10 0 DO ... LOOP" пройдет 0..9._KROL пишет:Это правильно
Не похоже. И Вы перепутали начальные и конечные границы._KROL пишет:Не, циклы работают
Gudleifr- Admin
- Сообщения : 3244
Дата регистрации : 2017-03-29
Re: [__My 4tH__]
ДА, багов у меня ещё достаточно! Вот в IF
- Код:
FWORD _IF,"IF",IMM+CONLY
dw COMPILE,?BRANCH,MARK_F,IMM+CONLY
FEND
_KROL- Сообщения : 93
Дата регистрации : 2017-07-28
Возраст : 24
Откуда : Беларусь
Re: [__My 4tH__]
[s]Пока так, но сам дамп пока глючит...[/s]Исправил, работает:
- Код:
: CHAR ' DROP C@ ;
: ," [ CHAR " ] LITERAL WORD DUP HERE @ SWAP ALLOT SWAP CMOVE 0 C, ;
: ." COMPILE LIT'Z ," COMPILE TYPE ; IMMEDIATE
: NUMS 0 SWAP BEGIN BASE @ U/MOD NIP SWAP 1+ SWAP DUP UNTIL DROP ;
: UB. BASE @ SWAP HEX FF AND DUP NUMS 2 SWAP - IF [ CHAR 0 ] LITERAL EMIT THEN U. BASE ! ;
: UW. BASE @ SWAP HEX FFFF AND DUP NUMS 4 SWAP - DUP IF 0 DO [ CHAR 0 ] LITERAL EMIT LOOP ELSE DROP THEN U. BASE ! ;
: UD. SWAP UW. UW. ;
: UD:. SWAP UW. [ CHAR : ] LITERAL EMIT UW. ;
: SIGN 8000 AND ;
: FAR1+ 1+ DUP NOT IF SWAP 1000 + SWAP THEN ;
: FARU+ 0 DO FAR1+ LOOP ;
: 4DUP 2OVER 2OVER ;
: 2= SWAPL = -ROT = AND ;
: DUMP
2DUP 100 FARU+ 2SWAP
BEGIN
CR 2DUP UD:. ." - "
2DUP
10 0 DO 2DUP C@L UB. BL EMIT FAR1+ LOOP BL EMIT
2DROP
10 0 DO 2DUP C@L EMITC GETXY 1+ GOTOXY FAR1+ LOOP
4DUP 2= NOT
UNTIL
;
_KROL- Сообщения : 93
Дата регистрации : 2017-07-28
Возраст : 24
Откуда : Беларусь
Re: [__My 4tH__]
Выкложил новый релиз на форум кота.
http://fforum.winglion.ru/viewtopic.php?f=2&t=3127&p=43898#p43898 (внизу)
http://fforum.winglion.ru/viewtopic.php?f=2&t=3127&p=43898#p43898 (внизу)
_KROL- Сообщения : 93
Дата регистрации : 2017-07-28
Возраст : 24
Откуда : Беларусь
Re: [__My 4tH__]
Я тут попытался про Форт написать:
http://forum.shelek.ru/index.php/topic,30865.msg303305/topicseen.html#new
Как ты думаешь, нормально получается? Однако чуть надо дополнить и...
http://forum.shelek.ru/index.php/topic,30865.msg303305/topicseen.html#new
Как ты думаешь, нормально получается? Однако чуть надо дополнить и...
_KROL- Сообщения : 93
Дата регистрации : 2017-07-28
Возраст : 24
Откуда : Беларусь
Re: [__My 4tH__]
К сожалению, то, что Вы написали, не имеет к FORTH практически никакого отношения. Извините._KROL пишет:Как ты думаешь, нормально получается?
Кстати, ответ на вопрос "зачем сделаны два стека?" дал Дейкстра в своей работе 1962-го года: "ПОПЫТКА УНИФИКАЦИИ ПОНЯТИЙ, ОТНОСЯЩИХСЯ К ПОСЛЕДОВАТЕЛЬНОМУ ВЫПОЛНЕНИЮ ПРОГРАММЫ" - https://gudleifr.forum2x2.ru/t38-topic.
Gudleifr- Admin
- Сообщения : 3244
Дата регистрации : 2017-03-29
Re: [__My 4tH__]
Тогда буду дальше читать и пытаться сделать документацию.
_KROL- Сообщения : 93
Дата регистрации : 2017-07-28
Возраст : 24
Откуда : Беларусь
Re: [__My 4tH__]
Спасибо. Я даже не знал толком что им уже написать... Ну чтож, буду учиться ;)
_KROL- Сообщения : 93
Дата регистрации : 2017-07-28
Возраст : 24
Откуда : Беларусь
Re: [__My 4tH__]
Странно, но вот этот новый вариант Форта под PABC у меня неправильно работает:
А идея была неплохая.
- Код:
// ABC4tH 090917 1 for PABC by _KROL
uses crt,containers;
type tcom=class
name:string; t:integer;
constructor create(s:string); begin name:=s; t:=0; end;
procedure run; begin end;
end;
var turnoff:boolean;
com:objectarray;
data:intstack;
link:intstack;
str:stringstack;
type tscom=class(tcom)
p:procedure;
constructor create(s:string;pr:procedure);
begin
inherited create(s); t:=1;
p:=pr;
end;
procedure run(lnk:integer);
begin
link.push(lnk);
p;
link.pop;
end;
end;
type tucom=class(tcom)
u:intarray;
constructor create(s:string);
begin
inherited create(s); t:=2;
u:=intarray.create;
end;
procedure run(lnk:integer);
var i:integer;
begin
link.push(lnk);
for i:=1 to u.size do
tcom(com[i]).run;
link.pop;
end;
destructor destroy;
begin
u.destroy;
end;
end;
procedure scom(s:string;pr:procedure);
var t:tscom;
begin
t:=tscom.create(s,pr);
com.add(t);
end;
function _read:char;
var c:char;
begin
c:=readkey;
if c=#0 then
c:=readkey;
if ord(c)>=32 then
write(c);
if c in [#10,#13] then writeln;
// read(c);
_read:=c;
end;
// -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
procedure SYS;
begin
writeln('ABC4tH 24.08.17 v.1 (by _KROL)');
end;
procedure BYE;
begin
turnoff:=true;
end;
procedure CLS;
begin
clrscr;
end;
procedure CR;
begin
writeln;
end;
procedure TICK;
var s:string; i:integer;
begin
s:='';
for i:=1 to 255 do
begin
s[i]:=_read;
if (ord(s[i])<=32)or(i=255) then
begin
s[0]:=chr(i-1);
str.push(s);
data.push(i-1);
exit;
end;
end;
end;
procedure FIND;
var i:integer; s:String;
begin
s:=str.pop;
data.pop;
for i:=com.size downto 1 do
if tcom(com[i]).name=s then
begin
data.push(i);
data.push(-1);
exit;
end;
data.push(0);
end;
procedure EXECUTE;
var i:integer;
begin
i:=data.pop;
if i<=com.size then
case tcom(com[i]).t of
0: tcom(com[i]).run;
1: tscom(com[i]).run;
2: tucom(com[i]).run;
end;
end;
// -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
procedure init;
begin
turnoff:=false;
com:=objectarray.create;
data:=intstack.create;
link:=intstack.create;
str:=stringstack.create;
scom('SYS',SYS);
scom('BYE',BYE);
scom('CLS',CLS);
scom('CR',CR);
scom('''',TICK);
scom('FIND',FIND);
scom('EXECUTE',EXECUTE);
end;
procedure run;
var s:string;
begin
repeat
TICK;
FIND;
if data.pop<>0 then EXECUTE;
until turnoff;
end;
procedure done;
begin
com.destroy;
data.destroy;
link.destroy;
str.destroy;
end;
begin
init;
run;
done;
end.
А идея была неплохая.
Последний раз редактировалось: _KROL (Сб Сен 09, 2017 12:11 pm), всего редактировалось 1 раз(а)
_KROL- Сообщения : 93
Дата регистрации : 2017-07-28
Возраст : 24
Откуда : Беларусь
Re: [__My 4tH__]
Нет это я намудрил) Хотел сделать массив линков, как в настоящем шитом коде, а в дочерних классах процедура run была с одним аргументом, соответственно... Правильно так:
- Код:
// ABC4tH 090917 1 for PABC by _KROL
uses crt,containers;
type tcom=class
name:string; t:integer;
constructor create(s:string); begin name:=s; t:=0; end;
procedure run; begin end;
end;
var turnoff:boolean;
com:objectarray;
data:intstack;
link:intstack;
str:stringstack;
type tscom=class(tcom)
p:procedure;
constructor create(s:string;pr:procedure);
begin
inherited create(s); t:=1;
p:=pr;
end;
procedure run;
begin
// link.push(lnk);
p;
// link.pop;
end;
end;
type tucom=class(tcom)
u:intarray;
constructor create(s:string);
begin
inherited create(s); t:=2;
u:=intarray.create;
end;
procedure run;
var i:integer;
begin
// link.push(lnk);
for i:=1 to u.size do
tcom(com[i]).run;
// link.pop;
end;
destructor destroy;
begin
u.destroy;
end;
end;
procedure scom(s:string;pr:procedure);
var t:tscom;
begin
t:=tscom.create(s,pr);
com.add(t);
end;
function _read:char;
var c:char;
begin
c:=readkey;
if c=#0 then
c:=readkey;
if ord(c)>=32 then
write(c);
if c in [#10,#13] then writeln;
// read(c);
_read:=c;
end;
// -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
procedure SYS;
begin
writeln('ABC4tH 24.08.17 v.1 (by _KROL)');
end;
procedure BYE;
begin
turnoff:=true;
end;
procedure CLS;
begin
clrscr;
end;
procedure CR;
begin
writeln;
end;
procedure TICK;
var s:string; i:integer;
begin
s:='';
for i:=1 to 255 do
begin
s[i]:=_read;
if (ord(s[i])<=32)or(i=255) then
begin
s[0]:=chr(i-1);
str.push(s);
data.push(i-1);
exit;
end;
end;
end;
procedure FIND;
var i:integer; s:String;
begin
s:=str.pop;
data.pop;
for i:=com.size downto 1 do
if tcom(com[i]).name=s then
begin
data.push(i);
data.push(-1);
exit;
end;
data.push(0);
end;
procedure EXECUTE;
var i:integer;
begin
i:=data.pop;
if i<=com.size then
case tcom(com[i]).t of
0: tcom(com[i]).run;
1: tscom(com[i]).run;
2: tucom(com[i]).run;
end;
end;
// -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
procedure init;
begin
turnoff:=false;
com:=objectarray.create;
data:=intstack.create;
link:=intstack.create;
str:=stringstack.create;
scom('SYS',SYS);
scom('BYE',BYE);
scom('CLS',CLS);
scom('CR',CR);
scom('''',TICK);
scom('FIND',FIND);
scom('EXECUTE',EXECUTE);
end;
procedure run;
var s:string;
begin
repeat
TICK;
FIND;
if data.pop<>0 then EXECUTE;
until turnoff;
end;
procedure done;
begin
com.destroy;
data.destroy;
link.destroy;
str.destroy;
end;
begin
init;
run;
done;
end.
_KROL- Сообщения : 93
Дата регистрации : 2017-07-28
Возраст : 24
Откуда : Беларусь
Re: [__My 4tH__]
Вам надо немного отойти от попыток "реализовать FORTH в целом". Попробуйте разбить FORTH на части и реализовывать их по отдельности, по возможности находя этим частям полезное применение в реальной жизни.
Gudleifr- Admin
- Сообщения : 3244
Дата регистрации : 2017-03-29
Re: [__My 4tH__]
Так я так порой и делаю, просто надо же порою включать для проверки какие-то зачатки других частей.
_KROL- Сообщения : 93
Дата регистрации : 2017-07-28
Возраст : 24
Откуда : Беларусь
OLD4tH system v.0.026 DRAFT (10.12.17)
OLD4tH system v.0.026 DRAFT (10.12.17)
--- КРАТКОЕ ОПИСАНИЕ ---
Обычный Форт, но с откланениями от стандартов.
--- СОКРАЩЕНИЯ ---
ШК - Шитый Код
--- СОГЛАШЕНИЯ ---
0.Общее
* При использовании слова "стек" по умолчанию должен пониматься "стек данных".
Т.е. слово "данных" можно опускать. Если же слову "стек" в соответствующем
контексте даётся другое значение, то это должно быть оговорено заранее.
* Стек данных (аргументов и т.д.) имеет сокращение "S" и никак иначе.
1.Оформление исходного кода на ЦЯ
* Перед объявлением коментария-заголовка слов ставится ";;" (для ассемблера)
или "///" для C/C++, чтобы позже можно было выделять эти слова из исходного
кода для документации.
2.Оформление исходного кода на Форте
* Сокращения в стековой нотации:
S: - стек (данных)
R: - стек возвратов
M: - память
T: - шитый код (данные, следующие за вызовом этого слова)
V: - словарь
тип' - указатель на ячейку с типом (примеры: CHAR' WORD' CELL')
'слово - указатель или вектор слова
3.Другое
* Прямой ШК
* Под "устройством ввода/вывода" может пониматься как файл, так и отдельный
порт.
--- КАРТА ПАМЯТИ ---
...
SEG=?
OFS:
0x0000
...
0x000B0000 - 0x000B7777 - Monochrome Video Memory
0x000B8000 - 0x000BFFFF - Color Video Memory
...
--- РЕГИСТРЫ ---
SI - IA (Interpret Address - адрес интерпретации)
SP - RP (Return stack Pointer - стек возвратов)
BX - первый элемент стека
BP - SP (указатель на остальные элементы стека)
--- ЗНАЧЕНИЯ (ПЕРЕМЕННЫЕ И КОНСТАНТЫ) ---
FALSE=0
TRUE=-1
BL=" "
VER - версия системы
BASE - текущая система счисления
STATE - регистр состояния системы
HERE - указатель на вершину словаря
LAST - указатель на последнее слово словаря
LATEST - указатель на ячейку указывающую на последнее слово в словаре
CURRENT - словарь, куда заносятся слова
CONTEXT - указатель на первый элемент списка поиска слов
ORDER - список поиска словарей
PAD - временный буфер ввода
HLD - текущий символ в PAD
XHND - адрес кадра исключения (для CATCH THROW)
INPUT - идентификатор устройства ввода
OUTPUT - идентификатор устройства ввода
BUF - адрес начала входного буфера
$BUF - размер входного буфера
#BUF - количество считанных байтов
>IN - текущее смещение от начала входного буфера
--- СТРУКТУРЫ ---
--- ПОИСК СЛОВ ---
(CONTEXT) => ORDER(остальной список) => CURRENT => FORTH
--- ИСПОЛНЕНИЕ ---
--- ИНТЕРПРЕТАЦИЯ ---
--- ОПРЕДЕЛЕНИЕ НОВЫХ СЛОВ ---
--- ПРИМИТИВЫ ---
--- ОТЛИЧИЯ ОТ СТАНДАРТОВ ---
* Некторые названия слов изменены (XHND)
* Ввод/вывод стал только через буфера (исчез TIB), также изменены сами слова
(хочу C<< C>> W<< W>> D<< D>> ..., при этом, возможно добавлю в/в через порты)
* Сокращения в обазначениях
* Порядок поиска
P.s. Думаю над в/в.
P.p.s. Я не думаю, что надо всё всегда упращать до одного слова СИМВОЛ.
--- КРАТКОЕ ОПИСАНИЕ ---
Обычный Форт, но с откланениями от стандартов.
--- СОКРАЩЕНИЯ ---
ШК - Шитый Код
--- СОГЛАШЕНИЯ ---
0.Общее
* При использовании слова "стек" по умолчанию должен пониматься "стек данных".
Т.е. слово "данных" можно опускать. Если же слову "стек" в соответствующем
контексте даётся другое значение, то это должно быть оговорено заранее.
* Стек данных (аргументов и т.д.) имеет сокращение "S" и никак иначе.
1.Оформление исходного кода на ЦЯ
* Перед объявлением коментария-заголовка слов ставится ";;" (для ассемблера)
или "///" для C/C++, чтобы позже можно было выделять эти слова из исходного
кода для документации.
2.Оформление исходного кода на Форте
* Сокращения в стековой нотации:
S: - стек (данных)
R: - стек возвратов
M: - память
T: - шитый код (данные, следующие за вызовом этого слова)
V: - словарь
тип' - указатель на ячейку с типом (примеры: CHAR' WORD' CELL')
'слово - указатель или вектор слова
3.Другое
* Прямой ШК
* Под "устройством ввода/вывода" может пониматься как файл, так и отдельный
порт.
--- КАРТА ПАМЯТИ ---
...
SEG=?
OFS:
0x0000
...
0x000B0000 - 0x000B7777 - Monochrome Video Memory
0x000B8000 - 0x000BFFFF - Color Video Memory
...
--- РЕГИСТРЫ ---
SI - IA (Interpret Address - адрес интерпретации)
SP - RP (Return stack Pointer - стек возвратов)
BX - первый элемент стека
BP - SP (указатель на остальные элементы стека)
--- ЗНАЧЕНИЯ (ПЕРЕМЕННЫЕ И КОНСТАНТЫ) ---
FALSE=0
TRUE=-1
BL=" "
VER - версия системы
BASE - текущая система счисления
STATE - регистр состояния системы
HERE - указатель на вершину словаря
LAST - указатель на последнее слово словаря
LATEST - указатель на ячейку указывающую на последнее слово в словаре
CURRENT - словарь, куда заносятся слова
CONTEXT - указатель на первый элемент списка поиска слов
ORDER - список поиска словарей
PAD - временный буфер ввода
HLD - текущий символ в PAD
XHND - адрес кадра исключения (для CATCH THROW)
INPUT - идентификатор устройства ввода
OUTPUT - идентификатор устройства ввода
BUF - адрес начала входного буфера
$BUF - размер входного буфера
#BUF - количество считанных байтов
>IN - текущее смещение от начала входного буфера
--- СТРУКТУРЫ ---
--- ПОИСК СЛОВ ---
(CONTEXT) => ORDER(остальной список) => CURRENT => FORTH
--- ИСПОЛНЕНИЕ ---
--- ИНТЕРПРЕТАЦИЯ ---
--- ОПРЕДЕЛЕНИЕ НОВЫХ СЛОВ ---
--- ПРИМИТИВЫ ---
--- ОТЛИЧИЯ ОТ СТАНДАРТОВ ---
* Некторые названия слов изменены (XHND)
* Ввод/вывод стал только через буфера (исчез TIB), также изменены сами слова
(хочу C<< C>> W<< W>> D<< D>> ..., при этом, возможно добавлю в/в через порты)
* Сокращения в обазначениях
* Порядок поиска
P.s. Думаю над в/в.
P.p.s. Я не думаю, что надо всё всегда упращать до одного слова СИМВОЛ.
_KROL- Сообщения : 93
Дата регистрации : 2017-07-28
Возраст : 24
Откуда : Беларусь
Re: [__My 4tH__]
Сразу прошу прощения за избыточное цитирование себя любимого...
Начну, правда, с Мура: ТЕМА #30, АБЗАЦ #228. Можно заметить, что Мур первым делом организует цикл, пусть даже и пустой. И это не просто "ФВМ", а полный цикл разработки FORTH-системы, все остальное делается уже внутри этого цикла, не выходя наружу (в ОС).
По мере узаконивания FORTH цикл стал более "цивилизованным": ТЕМА #12, АБЗАЦ #757. Но смысл остается прежним: фортер делает все внутри него, "не выходя наружу".
Именно этим я бы и посоветовал Вам заняться, а не вылизывать отдельные места, находясь снаружи. Между прочим, я и ввел когда-то эти этапы разработки - ТЕМА #30, АБЗАЦ #225 - именно для ускорения замыкания цикла (в условиях более современных IDE, чем были во времена Мура).
Замыкание цикла не только позволит насладится FORTH-программированием практически сразу, но и заставит Вас решить, наконец, повисшую в воздухе проблему - взаимоотношения FORTH и ОС, FORTH и инструментария его написания, FORTH и его рабочего окружения.
Можно заметить, что для своего первого FOBOS я быстро замкнул и второй цикл - ТЕМА #71, АБЗАЦ #768 - внутри самого FORTH (с редактированием СЛОВАРЕЙ/БЛОКОВ), и снаружи (путем правки его исходников).
А с СИМВОЛОМ все просто: либо Вы понимаете, какое место он занимает в Вашем цикле, где начинается и где... либо у Вас будет эрзац-FORTH, с которым Вы не сможете вдоволь поиграть ввиду непонимания...
Начну, правда, с Мура: ТЕМА #30, АБЗАЦ #228. Можно заметить, что Мур первым делом организует цикл, пусть даже и пустой. И это не просто "ФВМ", а полный цикл разработки FORTH-системы, все остальное делается уже внутри этого цикла, не выходя наружу (в ОС).
По мере узаконивания FORTH цикл стал более "цивилизованным": ТЕМА #12, АБЗАЦ #757. Но смысл остается прежним: фортер делает все внутри него, "не выходя наружу".
Именно этим я бы и посоветовал Вам заняться, а не вылизывать отдельные места, находясь снаружи. Между прочим, я и ввел когда-то эти этапы разработки - ТЕМА #30, АБЗАЦ #225 - именно для ускорения замыкания цикла (в условиях более современных IDE, чем были во времена Мура).
Замыкание цикла не только позволит насладится FORTH-программированием практически сразу, но и заставит Вас решить, наконец, повисшую в воздухе проблему - взаимоотношения FORTH и ОС, FORTH и инструментария его написания, FORTH и его рабочего окружения.
Можно заметить, что для своего первого FOBOS я быстро замкнул и второй цикл - ТЕМА #71, АБЗАЦ #768 - внутри самого FORTH (с редактированием СЛОВАРЕЙ/БЛОКОВ), и снаружи (путем правки его исходников).
А с СИМВОЛОМ все просто: либо Вы понимаете, какое место он занимает в Вашем цикле, где начинается и где... либо у Вас будет эрзац-FORTH, с которым Вы не сможете вдоволь поиграть ввиду непонимания...
Gudleifr- Admin
- Сообщения : 3244
Дата регистрации : 2017-03-29
Re: [__My 4tH__]
А Вы делали это без FORTH? Или Вы думаете, что оно заработает только потому, что FORTH "уже почти работает"?_KROL пишет:А может так и сделать? Тогда блочный диск (или файл) получается как pagefile, да и использовать его можно как канал между процессами.
Gudleifr- Admin
- Сообщения : 3244
Дата регистрации : 2017-03-29
Страница 2 из 2 • 1, 2
Страница 2 из 2
Права доступа к этому форуму:
Вы не можете отвечать на сообщения
|
|