Page 1 of 6

Forth

Posted: Wed Feb 01, 2006 7:17 pm
by willow
Помнится, еще на форуме Fastbb кто-то предлагал портировать Форт систему на MeOS. Все забыли, а я запал на Форт и все подумывал о порте. Неделю назад нашел простенький eForth16 с исходниками на асме... Сегодня уже практически готова 32-битная версия для Колибри. Осталось сделать некоторые усовершенствования в консоли.

Posted: Thu Feb 02, 2006 2:12 am
by camper
кгхм, м.б. фортран? ;) Но все равно, язык высокого уровня очень хорошо в любом случае (как и паскаль)

Posted: Thu Feb 02, 2006 11:05 am
by willow
Да нет уж, именно Форт :-) Смотри http://forth.org.ru/

Posted: Thu Feb 02, 2006 9:13 pm
by Mario79
willow
Насколько мне помниться, форт хорош тем, что относительно быстро работает даже в режиме интерпретации, и команды в нем занимают очень мало места (2 байта?), разумеется, не считая процедуры их определяющей.

Posted: Fri Feb 03, 2006 12:20 am
by Wildwest
Язык странный и коммунити странное. Пишут компиляторы десятками, но реально интересных программ, созданных на этом языке практически нет. Запомнилась только программа построения графика синусоиды и среда разработки, отдаленно напоминающая Strannik, ну и еще этот пресловутый сервер. Осенью листал книжку по Forth - один из "реальных примеров суперкрутости языка" демонстрировал разработку вируса под ДОС. Опять же, это язык для любителей обратной польской записи. Много здесь таких?

Posted: Fri Feb 03, 2006 11:20 am
by willow
Mario79 wrote: относительно быстро работает даже в режиме интерпретации, и команды в нем занимают очень мало места (2 байта?)
Он и есть интерпретирующий язык, а высокоуровневые команды занимают по 4 байта (у нас ведь 32-разрядная система)
Wildwest
Не спорю - язык нетривиальный, но лучшего интерпретатора и скриптора для Menuet пока не предвидится (я не слышал, чтобы кто-то занимался). Я же, со своей стороны, постараюсь добавить в язык поддержку системных функций и попробую написать на нем графическое приложение.
Пишите, что нужно включать в поставку интерпретатора, чтобы он был реально полезен пользователям Колибри.

Posted: Fri Feb 03, 2006 11:51 am
by camper
Нужна графическая поддержка, т.е. рисование примитивов в окне, и основные математические функции - показательные, тригонометрические, логарифмические, логические.

Posted: Sat Feb 04, 2006 5:16 pm
by Mario79
willow
Надо чтобы программы можно было запускать, с помощью SYSXTREE, то есть, чтобы интерпретатор поддерживал запуск с параметром. Чтобы запуск приложений был прозрачен и почти неотличим для пользователей. А так хорошая идея для реализации игрушек, например.

Posted: Fri Feb 10, 2006 3:19 pm
by willow
Это аналог 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 ;

Posted: Fri Feb 10, 2006 5:58 pm
by Hex
Да, примерчик довольно непонятный... :)

Posted: Fri Feb 10, 2006 7:21 pm
by Mario79
willow
Все оценили твою шутку, особенно те, кто форт не знает. ;-)
Придется тебе написать заодно и доку к своему интерпретатору, а так текст программы довольно короткий и если ввести в сам интерпретатор побольше стандартных команд, то думаю, его можно будет сделать еще короче и тогда написание программ будет вообще простым.

Posted: Mon Feb 13, 2006 11:03 am
by willow
Да, конечно, без документации никуда!

Posted: Mon Feb 13, 2006 2:11 pm
by willow
А вот что линуксоиды говорили недавно:
http://www.linux.org.ru/view-message.jsp?msgid=1258482

Posted: Thu Feb 16, 2006 6:55 pm
by willow
О том, как меФорт может запускать систему вместо 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

Posted: Sun Feb 19, 2006 5:07 pm
by ipr
А когда C/C++ портируем? =)