индустрия 4.1 - роботовладение
microwallet-faucets
Forth in KolibliOS kernel
Debug by edit for SPF4
тетрис
serial-port
Life
Форт для
Колибри и
в виде драйвера
образ диска с Колибри и Фортпримерами
SPF
под Linux
Компиляция СПФ в ассемблер(MASM)
Форт для 8051
Форт для MSP
инфиксная запись в СПФ
текстовый редактор для ФортОС работает под SPF
Коммерческая противоугонная GPS поисковая система с использованием форт-технологии
Мои недошедшие в fido7.su.forth послания.
Hi Dmitry
"Dmitry Groshev" сообщил/сообщила в новостях
следующее: news:c81ssi$t8$11735@www.fido-online.com...
> >> Да неужто? И чего же тогда Форты кэшируют в регистре максимум один
только
> >> верхний элемент? ;-)
> AC> Разные форты бывают :) В SPF4 и других современных фортах
оптимизатор
> AC> делает намного больше. Поэтому вычисления в SPF4 быстрее чем в SPF3 в
40
> AC> раз.
>
> Названный оптимизатор не делает ничего кроме банальной
peephole-оптимизации.
Что-за peephole-оптимизация?
> Может я чего-нибудь не понял, но ничего похожего на распределение
регистров
> лично я там не увидел.
Часто оптимизация заключается в замене: хранения промежуточных значений
на стеке на хранение в регистрах. Результат работы оптимизатора можно
посмотреть
применив: ~mak\listing2.f . Заменив INCLUDED на INCLUDED_L получаешь
листинг.
Работу оптимизатора можно отследить: http://wiki.forth.org.ru/optimizer
Михаил
Hi Dmitry,
"Dmitry Groshev" сообщил/сообщила в новостях
следующее: news:c7pv3q$77f$9639@www.fido-online.com...
>Со
> времен Мура уже успело возникнуть и приобрести популярность множество
языков -
> взять хотя бы Java, Python, Ruby, Lua - а Форт как был увлечением
немногих,
> так им и остался.
Непривильно сравнивать Форт с языками программирования это разные
категории.
Правильнее Форт рассмотреть как ОС и сравнить его с другими ОС.
То-что Форт воспринимют только как язык и является одной из причин низкой
его
популярности. Вопрос следует ставить так: почему Java, Python, Ruby, Lua и
др.
вне рамок Форт-системы? Из которого вытекает вопрос: что дает Форт окружение
для языков программирования?
При том, что Форт окружение ничем не мешает работе языков он дает
следующие преимущества.
1. рамках Форта, языки легче создавать, поскольку они могут пользоватся
средствами самой Форт-системы. К тому-же Форт можно расширить в этом
направлении
2. Они могут наследовать свойства Форта: быть сразу компиляторами и
интерпретаторами
в зависимости от состояния, участвовать в управлении компиляцией.
3. Программа может быть написана на смеси всех языков, которые понятны
Форту.
4. Языки могут быть представлены в виде библиотек Форта и загружены по
необходимости.
Причины низкой популярности Форта делятся на 3и части.
Исторические, психологические, экономические.
Истрорические это те, что вего мало: мало фортеров, мало наработок, мало
документации.
Вообще, с Форта надо было начинать.
Истрорические это те, что Психологические это те, что Форт неправильно
воспринимают, исходя из сложившихся
стереотипов.
Но главное экономические: Производители коммерческого ПО не заинтересованы в
том,
чтобы их пользователи могли сами о себе пазаботится. Форт-система с защитой
от
плагиата очень много теряет.
Решение экономической проблемы: http://mak.chat.ru/ee.txt
Hi Dmitry,
"Dmitry Ponyatov"
> самая свежая версия: http://hippo.ru/~forth/book.rar
Мне понравилось, что ты в качестве идентификатора
регистров используешь текущее значение кодофайла при
их определении в http://hippo.ru/~forth/book.rar/8086.spf
Однако, разместив идентификатор в одном байте,
можно состояние всех операндов разместить в одном слове.
\ 8086 ФОРТ-ассемблер
REQUIRE [UNDEFINED] lib\include\tools.f
[UNDEFINED] BREAK
[IF] : BREAK POSTPONE EXIT POSTPONE THEN ; IMMEDIATE
[THEN]
[UNDEFINED]
[IF] : B, C, ;
[THEN]
MODULE: ASM8086
HEX
CREATE dst 0 , 0 ,
dst 1+ CONSTANT src
dst 2 + CONSTANT num
: reg_src ( n -- ) CREATE , DOES> @ src !
\ имменно ! для обнуления старших байтов
;
: reg_dst ( n -- ) CREATE , DOES> @ dst !
;
: regs ( n -- n+1 )
DUP reg_src DUP reg_dst 1+ ;
1
regs AH, AH regs AL, AL regs BH, BH regs BL, BL
regs CH, CH regs CL, CL regs DH, DH regs DL, DL
regs AX, AX regs BX, BX regs CX, CX regs DX, DX
regs SI, SI regs DI, DI regs BP, BP regs SP, SP
regs CS, CS regs DS, DS regs SS, SS regs ES, ES
DROP
: # 1 num ! ;
: [] 2 num ! ;
: ?OP dst @ = ;
: %OP:
: dst @ LIT, POSTPONE ?OP POSTPONE ;
;
AX, CS %OP: ax,cs
DX, AX %OP: dx,ax
SS, AX %OP: ss,ax
ES, AX %OP: es,ax
AX, # %OP: ax,#num
BX, # %OP: bx,#num
SP, # %OP: sp,#num
SI, # %OP: si,#num
AL, # %OP: al,#num
CL, # %OP: cl,#num
DL, # %OP: dl,#num
AH, # %OP: ah,#num
CH, # %OP: ch,#num
DH, # %OP: dh,#num
: MOV,
ax,cs IF 8C B, C8 B, BREAK \ mov ax,cs
dx,ax IF 8E B, D8 B, BREAK \ mov dx,ax
ss,ax IF 8E B, D0 B, BREAK \ mov ss,ax
es,ax IF 8E B, C0 B, BREAK \ mov es,ax
ax,#num IF B8 B, W, BREAK \ mov ax,#num
bx,#num IF BB B, W, BREAK \ mov bx,#num
sp,#num IF BC B, W, BREAK \ mov sp,#num
si,#num IF BE B, W, BREAK \ mov si,#num
al,#num IF B0 B, B, BREAK \ mov al,#num
cl,#num IF B1 B, B, BREAK \ mov cl,#num
dl,#num IF B2 B, B, BREAK \ mov dl,#num
ah,#num IF B4 B, B, BREAK \ mov ah,#num
ch,#num IF B5 B, B, BREAK \ mov ch,#num
dh,#num IF B6 B, B, BREAK \ mov dh,#num
-333 THROW
;
: ASM_END
PREVIOUS
;
EXPORT
: ASM8086_BIG
ALSO ASM8086
;
;MODULE
\EOF TEST
HERE
ASM8086_BIG
AX, CS MOV,
ASM_END
20 DUMP