Forth

...
  • кгхм, м.б. фортран? ;) Но все равно, язык высокого уровня очень хорошо в любом случае (как и паскаль)
  • Да нет уж, именно Форт :-) Смотри http://forth.org.ru/
  • willow
    Насколько мне помниться, форт хорош тем, что относительно быстро работает даже в режиме интерпретации, и команды в нем занимают очень мало места (2 байта?), разумеется, не считая процедуры их определяющей.
  • Язык странный и коммунити странное. Пишут компиляторы десятками, но реально интересных программ, созданных на этом языке практически нет. Запомнилась только программа построения графика синусоиды и среда разработки, отдаленно напоминающая Strannik, ну и еще этот пресловутый сервер. Осенью листал книжку по Forth - один из "реальных примеров суперкрутости языка" демонстрировал разработку вируса под ДОС. Опять же, это язык для любителей обратной польской записи. Много здесь таких?
  • Mario79 wrote: относительно быстро работает даже в режиме интерпретации, и команды в нем занимают очень мало места (2 байта?)
    Он и есть интерпретирующий язык, а высокоуровневые команды занимают по 4 байта (у нас ведь 32-разрядная система)
    Wildwest
    Не спорю - язык нетривиальный, но лучшего интерпретатора и скриптора для Menuet пока не предвидится (я не слышал, чтобы кто-то занимался). Я же, со своей стороны, постараюсь добавить в язык поддержку системных функций и попробую написать на нем графическое приложение.
    Пишите, что нужно включать в поставку интерпретатора, чтобы он был реально полезен пользователям Колибри.
    Vivat assembler et KolibriOS!
  • Нужна графическая поддержка, т.е. рисование примитивов в окне, и основные математические функции - показательные, тригонометрические, логарифмические, логические.
  • willow
    Надо чтобы программы можно было запускать, с помощью 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
  • О том, как меФорт может запускать систему вместо 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 4 guests