Хищник писал(а):
Речь идет о "голубой мечте" - наборе систем, которые будут очень лояльными по отношению к прикладным программам. Так-то понятно, что от набора библиотек будет зависеть возможность доступа к той или иной аппаратуре.
См. Юникс-путь. Каждая программка - делает чтото одно, но хорошо. Если это программа закачаки сайтов, то это ПРОГРАММА ЗАКАЧКИ САЙТОВ (например wget). А если это "графическая морда" ПРОГРАММЫ ЗАКАЧКИ САЙТОВ - то это ГРАФИЧЕСКАЯ МОРДА.
При этом сам wget работает хоть где, а "графическая морда" - разумеется только там, где есть графика.
Помоему этот подход - не зависит от системы. И тем более языка.
Виндоыс-программы в том и проигрывают часто, что каждая из них стремиться стать СУПЕР-МЕГА-КОМБАЙНОМ. То есть - если это программа закачки файлов, то в ней и графморда и просмотрщик мультиков и стиральная машинка. Причём - все встроенное и неизменяемое. Такой подход - мало того, что плодит глюки, так их ещё и фиг отловишь.
Но ведь путь Forth - именно аналогичен присловутому ЮниксВэй. Каждое слово отдельная маленькая чётко определённая функция. И если ктото перемешал неразделимо в какомто мегаслове слова как закачки файлов, так и вывда какойто графики - то он сам себе злющий буратинА и сам пусть с этим мучается, а не требует, чтобы система на AVR, спрятанная в маленькой кладовке, понимала слова для работы мега-3Д-акселлератором.
Хищник писал(а):
В принципе, такое делается тэгами, которые заводятся параллельно стеку данных.
У меня это реализовано, просто ещё слова не прописал, возвращающие код типа данных.
Я сделал проще. На стеке - каждая запись хранится в виде пары 32битных слов. В этом же формате хранятся и команды виртуальной машины. Первое слово - определяен что хранится во втором- это может быть:
- команда виртуального кода (быстрая команда для условий и циколв) .
- константа.
- слово.
- признак конца виртуального кода.
Как оно хранится:
- целые, вещественные константы - хранятся прямо во втором слове.
- строки-константы - в виде адреса-указателя на строку.
- все слова (переменные, массивы, процедура) - хранятся в виде номера слова.
Так что надо просто посмотреть - что на стеке и выдать код типа (целое) на стек. И накаких параллельных тегов для основных типов
Вот прямо сегодня пропишу слова:
istype - снимает значение со стека и возвращает его тип
int-type real-type str-type array-type - возвращают константы - коды соответствующих типов.
тогда можно писать типозависимый код типа
( На стеке нечто хз-какого типа )
: type-test
istype
dup int-type =
if
"На стеке целое" . CR
endif
dup real-type =
if
"На стеке вещественное" . CR
endif
dup str-type =
if
"На стеке строка" . CR
endif
drop
;
Плюс вытащу в виде слова процедуру принудительногго приведения типа
typecastto.
Например:
int-type typecastto - приведёт вершину стека к целому (если строка - вылетим по ошибке)
Далее - надо процедуру проверки - имеется ли такое слово:
"dup" isword ( вернёт на стек 1 - слово dup имеется )
"rrrr" isword ( вернёт на стек 0 - слова rrr не имеется в словаре )
Ну и сделать процедуру удаления всех слов, начиная с указанного и определённых после него

Не сделал я ещё этого !!! Забыл.