Forth
-
Помнится, еще на форуме Fastbb кто-то предлагал портировать Форт систему на MeOS. Все забыли, а я запал на Форт и все подумывал о порте. Неделю назад нашел простенький eForth16 с исходниками на асме... Сегодня уже практически готова 32-битная версия для Колибри. Осталось сделать некоторые усовершенствования в консоли.Vivat assembler et KolibriOS!
кгхм, м.б. фортран? Но все равно, язык высокого уровня очень хорошо в любом случае (как и паскаль)
Да нет уж, именно Форт Смотри http://forth.org.ru/
willow
Насколько мне помниться, форт хорош тем, что относительно быстро работает даже в режиме интерпретации, и команды в нем занимают очень мало места (2 байта?), разумеется, не считая процедуры их определяющей.
Насколько мне помниться, форт хорош тем, что относительно быстро работает даже в режиме интерпретации, и команды в нем занимают очень мало места (2 байта?), разумеется, не считая процедуры их определяющей.
Язык странный и коммунити странное. Пишут компиляторы десятками, но реально интересных программ, созданных на этом языке практически нет. Запомнилась только программа построения графика синусоиды и среда разработки, отдаленно напоминающая Strannik, ну и еще этот пресловутый сервер. Осенью листал книжку по Forth - один из "реальных примеров суперкрутости языка" демонстрировал разработку вируса под ДОС. Опять же, это язык для любителей обратной польской записи. Много здесь таких?
Он и есть интерпретирующий язык, а высокоуровневые команды занимают по 4 байта (у нас ведь 32-разрядная система)Mario79 wrote: относительно быстро работает даже в режиме интерпретации, и команды в нем занимают очень мало места (2 байта?)
Wildwest
Не спорю - язык нетривиальный, но лучшего интерпретатора и скриптора для Menuet пока не предвидится (я не слышал, чтобы кто-то занимался). Я же, со своей стороны, постараюсь добавить в язык поддержку системных функций и попробую написать на нем графическое приложение.
Пишите, что нужно включать в поставку интерпретатора, чтобы он был реально полезен пользователям Колибри.
Vivat assembler et KolibriOS!
Нужна графическая поддержка, т.е. рисование примитивов в окне, и основные математические функции - показательные, тригонометрические, логарифмические, логические.
willow
Надо чтобы программы можно было запускать, с помощью SYSXTREE, то есть, чтобы интерпретатор поддерживал запуск с параметром. Чтобы запуск приложений был прозрачен и почти неотличим для пользователей. А так хорошая идея для реализации игрушек, например.
Надо чтобы программы можно было запускать, с помощью SYSXTREE, то есть, чтобы интерпретатор поддерживал запуск с параметром. Чтобы запуск приложений был прозрачен и почти неотличим для пользователей. А так хорошая идея для реализации игрушек, например.
Это аналог EXAMPLE.ASM на meForth, только сырой еще. Окно не простое, а с возможностью возвращаться в консоль нажатием 'Ё'. Зацените...
Code: Select all
: >regs
reg_struc ! ;
: new_reg
CREATE 6 CELLS ALLOT LAST @ NAME> 9 + >regs ;
: ax reg_struc @ ! ;
: bx reg_struc @ 1 CELLS + ! ;
: cx reg_struc @ 2 CELLS + ! ;
: dx reg_struc @ 3 CELLS + ! ;
: si reg_struc @ 4 CELLS + ! ;
: di reg_struc @ 5 CELLS + ! ;
: <<
SWAP 16 LSHIFT + ;
: sys_print ( color, stra, u, x, y -- )
<< >R SWAP ROT R> 4 sys5 DROP ;
: not_emit
emit_proc DUP @ NOT SWAP ! ;
new_reg wnd_size
CREATE Music $3090 , \ $90 C, $30 C, 0 C,
: my_wnd
12 ax 1 bx sysv DROP $805080D0 DUP $02AABBCC 200 50 << 200 DUP << 0
sys6 2 bx sysv 2DROP
$10DDEEFF $" ПРИМЕР ПРОГРАММЫ" COUNT 8 DUP sys_print
0 $" Нажмите любую клавишу" COUNT 8 30 sys_print
$6688DD 1 5 12 << 200 19 - 12 << 8 sys5 DROP ;
: my_wnd_resize
200 dx 50 si 67 ax -1 DUP bx cx sysv DROP ;
: my_key
2 sys1 8 RSHIFT DUP 96 = IF not_emit DROP ELSE Music DUP si 1+ C!
55 DUP ax bx sysv DROP THEN ;
: my_btn
17 sys1 8 RSHIFT ." Pressed button #" DUP . CR 1 = IF BYE THEN ;
CREATE handlers ' my_wnd , ' my_key , ' my_btn ,
VARIABLE hnd
: msg_loop ( subs -- )
CR DUP hnd ! @EXECUTE my_wnd_resize
0 emit_proc !
BEGIN
10 sys1 ?DUP
IF
1-
CELLS hnd @ + @EXECUTE
emit_proc @
IF
WINDOW KEY 96 =
IF
not_emit hnd @ @EXECUTE my_wnd_resize
ELSE
EXIT
THEN
THEN
THEN
AGAIN ;
: new_me ( new main loop)
handlers msg_loop ;
Vivat assembler et KolibriOS!
Да, примерчик довольно непонятный...
willow
Все оценили твою шутку, особенно те, кто форт не знает.
Придется тебе написать заодно и доку к своему интерпретатору, а так текст программы довольно короткий и если ввести в сам интерпретатор побольше стандартных команд, то думаю, его можно будет сделать еще короче и тогда написание программ будет вообще простым.
Все оценили твою шутку, особенно те, кто форт не знает.
Придется тебе написать заодно и доку к своему интерпретатору, а так текст программы довольно короткий и если ввести в сам интерпретатор побольше стандартных команд, то думаю, его можно будет сделать еще короче и тогда написание программ будет вообще простым.
Да, конечно, без документации никуда!
А вот что линуксоиды говорили недавно:
http://www.linux.org.ru/view-message.jsp?msgid=1258482
http://www.linux.org.ru/view-message.jsp?msgid=1258482
О том, как меФорт может запускать систему вместо LAUNCHER. Файл AUTOLOAD.F с комментариями:
Code: Select all
( добавляет 0 в конец строки)
: >asciiz ( адрес строки, длина -- )
+ 0 SWAP C! ;
( заполняет поле path в fileinfo)
: >path ( адрес пути файла, длина -- )
finfo @ 20 + \ смещение пути в структуре fileinfo
0 finfo @ 8 + ! \ обнуляем поле параметров
DUP >R SWAP DUP >R ( запоминаем приемник и длину в стеке возвратов)
CMOVE ( копируем строку пути)
R> R> SWAP ( восстанавливаем приемник и длину)
>asciiz ( добавляем 0 в конец)
;
( заполняет поле param в fileinfo)
: >param ( адрес строки параметров, длина -- )
OVER finfo @ 8 + !
>asciiz ( добавляем 0 в конец)
;
( запуск приложения с параметром и задержкой после запуска,
пути уже занесены в fileinfo)
: exec ( время задержки -- )
16 finfo @ ! \ подфункция 16
finfo @ 58 sys2 ." started, code=" . CR
( вызываем int 0x40 с двумя параметрами,
код возврата показываем)
5 sys2 DROP ; \ пауза
\ QUIT
( Стандартный AUTORUN.DAT выглядит так:
7 # <- Number of programs in the list
# Program Parameters Delay
/RD/1/GRSCREEN <NO> 99 # Set system colors & wallpaper
/RD/1/@RB <NO> 30 # Desktop right-click menu
/RD/1/@SS <NO> 30 # Screensaver from M. Lisovin
/RD/1/@PANEL <NO> 30 # Start panel
/RD/1/SETUP BOOT 30 # Load device settings
/RD/1/ICON2 BOOT 10 # Multithread icon from Mario79
/RD/1/board <NO> 50 # Start panel
### Total: 1.1 seconds ###
)
\ А это новый его текст:
\ формат:
\ S" /rd/1/tinypad" >path S" /rd/1/example.asm" >param 25 exec
S" /RD/1/GRSCREEN" >path 99 exec \ Set system colors & wallpaper
S" /RD/1/@RB" >path 30 exec \ Desktop right-click menu
S" /RD/1/@SS" >path 30 exec \ Screensaver from M. Lisovin
S" /RD/1/@PANEL" >path 30 exec \ Start panel
S" /RD/1/SETUP" >path S" BOOT" >param 30 exec \ Load device settings
S" /RD/1/ICON2" >path S" BOOT" >param 10 exec \ Multithread icon from Mario79
S" /RD/1/board" >path 25 exec \ Start panel
BYE \ и закрываем meForth
А когда C/C++ портируем? =)
Who is online
Users browsing this forum: No registered users and 3 guests