Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Пн сен 24, 2018 15:45

...
Google Search
Forth-FAQ Spy Grafic

Часовой пояс: UTC + 3 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 512 ]  На страницу Пред.  1 ... 7, 8, 9, 10, 11, 12, 13 ... 35  След.
Автор Сообщение
 Заголовок сообщения: Re: Моя система(_KROL)
СообщениеДобавлено: Чт июл 27, 2017 14:27 
Не в сети

Зарегистрирован: Пт янв 06, 2017 14:57
Сообщения: 344
Благодарил (а): 15 раз.
Поблагодарили: 1 раз.
Код:
Могу предложить начать писать Форт с ШК на Си или Паскале. Тишина пропадет.

Я уже как-то писал для PABC(на стр. 7 есть файл), но у меня возникал вопрос: Как сделать нормальный словарь? Ведь способов много. К примеру немного байткода + доп. виртуальная память(массив), или как-нибудь через списки...
Ладно, если будет настроение, сделаю снова(лучше) и выложу.
P.s. А вообще мне жаль Pascal ABC. Почему они забросили проект и перешли только к NET? А ведь неплохая система. Только есть некоторые глюки и недокументированные возможности(кое-что нашёл в программах SAMLES).

:idea: Есть вариант попробовать напиать совместно какой-нибудь язык на Форте(SP-FORTH?).
Вот что я когда-то отыскал(помню мне эта книга помогла собрать мысли и сделать неплохой калькулятор на Pascal):
http://www.kulichki.com/kit/crenshaw/crenshaw.html
http://home.iae.nl/users/mhx/crenshaw/tiny.html (переложение на Форт)


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Моя система(_KROL)
СообщениеДобавлено: Чт июл 27, 2017 16:27 
Не в сети

Зарегистрирован: Пн янв 07, 2013 22:40
Сообщения: 884
Благодарил (а): 3 раз.
Поблагодарили: 33 раз.
_KROL писал(а):
Вот что я когда-то отыскал(помню мне эта книга помогла собрать мысли и сделать неплохой калькулятор на Pascal):

По этим идеям и некоторым Форт принципам был сделан D2Lang :)

P.S. Был интересен и проект Timbre Zone
На Форт были и реализованны парсеры BNF от разных авторов (можно поискать по "сусекам") :)


Вложения:
Комментарий к файлу: BNF Parser (сайт с рзработками данного автора недоступен и основан на проекте парсера Gray4 из GForth)
BNF.rar [427.41 Кб]
Скачиваний: 43


Последний раз редактировалось KPG Чт июл 27, 2017 17:04, всего редактировалось 9 раз(а).
Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Моя система(_KROL)
СообщениеДобавлено: Чт июл 27, 2017 19:46 
Не в сети

Зарегистрирован: Чт янв 07, 2016 19:14
Сообщения: 621
Благодарил (а): 0 раз.
Поблагодарили: 4 раз.
Цитата:
Есть вариант попробовать напиать совместно какой-нибудь язык


Эм, зачем?
Он будет работать в связке с фортом или без него?
Какие задачи он будет эффективно решать?

Вот полезный язык в рамках форта это стековые манипуляторы. См. соответствующую тему.
Как успел заметить, хорошо, наглядно и компактно по записи справляется с обёртками под вин-функции, а также с ситуациями, когда приходится маневрировать двумя стеками одновременно.

_________________
Цель: сделать 64-битную Нову под Винду


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Моя система(_KROL)
СообщениеДобавлено: Чт июл 27, 2017 20:03 
<Потерто по справедливому замечанию Victor__v>


Последний раз редактировалось gudleifr Сб янв 27, 2018 14:36, всего редактировалось 1 раз.

Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Моя система(_KROL)
СообщениеДобавлено: Чт июл 27, 2017 20:59 
Не в сети

Зарегистрирован: Чт янв 07, 2016 19:14
Сообщения: 621
Благодарил (а): 0 раз.
Поблагодарили: 4 раз.
Цитата:
Стековые манипуляторы, это язык, "отрицающий FORTH".

В некотором смысле так и есть.
Особенность форта - всё должно побывать на стеке, здесь немножко изчезает.

Что ж, заява на примеры вполне обоснована.
Вот они

Код:
: READ-FILE(std) \ addr kv h -- size err|0
   2/(33x3^4R<)34120 ReadFile API-ERR
   R> SWAP

;


а вот не для апи


Код:

: INCLUDE-FILE \ ADDR U -- ?? -1|0
   MOVE->R \ addr u -- (p) 0 str |p D: addr1 u
   2DUP FILE-EXIST
   IF   TRANSLATE-FILE

   ELSE    S" DEVEL/"   
      1/(2#R0-)1R0
      0/(2^0^)0
      MOVE
      0/(3#30+2#1R<2^)013
      2DUP FILE-EXIST
      IF   3/10   TRANSLATE-FILE

      ELSE   2DROP
         1/(2#R1<2^)10
         S" SCRIPT/"
         1/(2#R0-)1R0
         0/(2^0^)0
         MOVE
         0/(3#30+2#1R<2^)013
         2DUP FILE-EXIST

         IF   3/10   TRANSLATE-FILE

         ELSE 2DROP 2DROP 0 0/(R#) EXIT
         THEN
      THEN
   THEN
   -1 0/(R#)

;



_________________
Цель: сделать 64-битную Нову под Винду


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Моя система(_KROL)
СообщениеДобавлено: Чт июл 27, 2017 21:36 
<Потерто по справедливому замечанию Victor__v>


Последний раз редактировалось gudleifr Сб янв 27, 2018 14:36, всего редактировалось 1 раз.

Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Моя система(_KROL)
СообщениеДобавлено: Чт июл 27, 2017 22:05 
Не в сети

Зарегистрирован: Пт янв 06, 2017 14:57
Сообщения: 344
Благодарил (а): 15 раз.
Поблагодарили: 1 раз.
Вялiкi дзякуй за гэта: D2Lang!
Буду разбираться. Он (вроде) меньше даже чем PL/M и портативнее.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Моя система(_KROL)
СообщениеДобавлено: Чт июл 27, 2017 22:47 
Не в сети

Зарегистрирован: Пт янв 06, 2017 14:57
Сообщения: 344
Благодарил (а): 15 раз.
Поблагодарили: 1 раз.
Вот к примеру Форт на D2:
Код:
{$D+,U-}

module forth;

use iostd, putnum, math;

{$U-}

var
  first_word;

sub ''
  inline(
    0x83, 0xC5, 0x0A  { add bp, 10 }     
)ret

sub TRUE 0xFFFF ret
sub FALSE 0x000 ret


sub BYE
  inline(
    0xCD, 0x20
)ret

sub NOT var x*;
  if x==0 then
    TRUE
  else
    FALSE
  fi
ret


sub GEA var A*;
  @A=A+5;
  while byte(A) do inc(@A) wend
  A+1
ret

sub WORDS var pt;
  @pt = first_word;
  while pt<>0 do
    puthex(word(pt));bl;
    putword(byte(pt+2));bl;
    putword(byte(pt+3));bl;
    putword(byte(pt+4));bl;
    putchar(34);putstring(pt+5);putchar(34);cr;
    @pt=word(pt)
  wend
ret

vect FIND var pos,name*,ofs*;
  @pos = first_word
  while pos<>0 do
    if strequal(name,pos+5) then
      ofs = pos
      exit
    fi     
    @pos = word(pos)
  wend
  ofs = 0
ret
     
var
  state<0>,
  tib[80],
  _tib<tib>,
  here,
  base<16>; 


sub STATE
  @state
ret

sub BASE
  @base
ret

sub HERE
  here
ret
 

sub EXECUTE
  inline(
    0x8B, 0xD8,    { mov bx, ax   }
    0x58,      { pop ax   }
    0xFF, 0xD3     { call bx   }
)ret


sub isBLANK var b;
  @b=byte(_tib);
  b == 32 | b==10 | b==13
ret

vect WORD
  while isBLANK do inc(@_tib) wend
  _tib;
  if byte(_tib) then
    while NOT(isBLANK) do inc(@_tib) wend
    _tib letb 0;
    inc(@_tib);
  fi
ret
 

sub '.'
  puthex;
  bl
ret

vect NUMBER var a*,w<0>,d;
  while byte(a) do
    @d=byte(a)-48
    if d<0 then FALSE exit fi
    if d>9 then
      @d=d-7
      if d>0xF | d<0xA | d>base-1 then FALSE exit fi
    fi
    @w=w*base+d;
    inc(@a)
  wend
  w;
  TRUE 
ret


sub ALLOT var len*;
  @here=here+len
ret

sub cbyte var b*;
  here letb b;
  ALLOT(1)
ret

sub cword var w*;
  cbyte(lo(w));
  cbyte(hi(w));
ret

vect CREATE var w,i;
  @w=WORD;
  cword(first_word);
  @first_word=here-2;
  cbyte(27);cbyte(0);cbyte(0);
  @w=w-1;
  repeat
    inc(@w);
    cbyte(byte(w));
  until byte(w)==0 loop
ret


sub IMMEDIATE var aw*;
  aw+3 letb 1
ret

vect INTERPRET var w, ofs, oldofs;
  do
    @w=WORD;
    FIND(w,@ofs);
    if ofs==0 then
      if NOT(NUMBER(w)) then
        putstring('??? ');
        putstring(w);
        cr
      elsif state then
        cbyte(0x50);
        cbyte(0xB8);
        cword;
      fi
    else
      @oldofs=ofs;
      @ofs=GEA(ofs)
      if state & byte(oldofs+3)<>1 then
        cbyte(0xE8);
        cword(ofs-here-2);
      else
        EXECUTE(ofs)
      fi
    fi 
    if strequal(w,'') then exit fi
  loop 
ret

sub ','
  cbyte
ret

sub main
  @first_word = @main - 10;
  @here = @main + 0xF0;
  do
    putstring('Forth-D2>');
    @_tib = @tib;
    getstring(_tib);
    INTERPRET
    if state then
      putstring('ERROR');
    else
      putstring('Ok')
    fi cr
  loop
ret

end


Т.е. D2 почти что "высокоуровневый Форт", но использует синтаксический разбор как и другие языки. Всё из-за шитого кода, конечно же :)


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Моя система(_KROL)
СообщениеДобавлено: Пт июл 28, 2017 19:35 
Не в сети

Зарегистрирован: Пт янв 06, 2017 14:57
Сообщения: 344
Благодарил (а): 15 раз.
Поблагодарили: 1 раз.
Цитата:
Если заметили, добавил ?AGAIN.

Прошу прощение. А зачем мне тогда UNTIL ? :roll:
И всё-таки там AGAIN почти подходит. Однако... новая версия


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Моя система(_KROL)
СообщениеДобавлено: Сб июл 29, 2017 12:31 
Не в сети

Зарегистрирован: Пт янв 06, 2017 14:57
Сообщения: 344
Благодарил (а): 15 раз.
Поблагодарили: 1 раз.
Проект OLD4tH
Сообщение будет редактироваться по мере развития проекта.

Итак, я опять взялся за старое, однако не совсем.
Отличия:
1. Самостоятельная система/DOS(можно выбрать опцией target)
2. Сборкой дискеты занимается FASM (только раскоментируйте в конце __toimg__).
3. Прямой шитый код с адресным интерпретатором
4. Свободный функционал(с головы(PASCAL повлиял?),со стадартов, SPF и др.) со всеми комментариями

P.S. Вы также можете тоже участвовать в проекте...
P.P.S. И не забывайте: "Вольному? Воля!" (C) WingLion, из RuF09WE
---
Обновления:
29.07.2017 Новая версия на новой странице! Воюю с циклами, но вроде сделал. Также EXPECT работает. А вот остальное буду в скором времени отлаживать.
31.07.2017 Всё-таки в словарях запутался! Постараюсь распутаться. (позже)
Система уже работает! Неправильно работает пока только вывод чисел... (+ добавлено WORDS, но из-за вывода общего числа слов(можно убрать) в конце глючит)
02.08.2017 Ошибок вроде нету, компиляции пока тоже. Исправил математические функции и слова в/в чисел.
04.08.2017 Компиляция есть, ео с <BUILDS DOES> сегодня не в состоянии разобраться.
06.08.2017 Сделал почти как в Ethereal Forth. Работает, только надо писать так : ... CREATE ... DOES> ... ; Остальные ошибки найду завтра (если будет время) [P.s. Можно пару моих тестов посмотреть в TESTS\T_060817.TXT]
07.08.2017 Нашёл и исправил пару несоответствий... Попробовал эмулировать дискету в QEMU - почему-то не работает.
12.08.2017 ..., сделал VECT. Также сделал небольшой гид по исходникам в "DOCS\SOURCES.TXT"
19.08.2017 Обновление доступно на 12 странице!


Вложения:
OLD40022.ZIP [47.36 Кб]
Скачиваний: 49


Последний раз редактировалось _KROL Сб авг 19, 2017 13:43, всего редактировалось 14 раз(а).
Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Моя система(_KROL)
СообщениеДобавлено: Вс июл 30, 2017 01:52 
Не в сети
Аватара пользователя

Зарегистрирован: Ср фев 23, 2011 20:42
Сообщения: 521
Откуда: Карелия
Благодарил (а): 3 раз.
Поблагодарили: 22 раз.
Hishnik писал(а):
Могу предложить начать писать Форт с ШК на Си или Паскале. Тишина пропадет. :)
Их бин старый ассемблерщик. Такой идей оскорбляет мой чувств.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Моя система(_KROL)
СообщениеДобавлено: Вс июл 30, 2017 02:11 
Не в сети
Аватара пользователя

Зарегистрирован: Ср фев 23, 2011 20:42
Сообщения: 521
Откуда: Карелия
Благодарил (а): 3 раз.
Поблагодарили: 22 раз.
gudleifr писал(а):
_KROL писал(а):
Что-то тихо на форуме.
Я тут как-то выложил готовое ядро с набором универсального доступа к Win32 API, и то, никто особо не отреагировал...
Почему ? Я например заценил там разбор сообщений оконной функцией каким-то совершенно изумительным образом.

Но потом мне стал любопытен такой вопрос - если сообщения в оконной функции разбирать стандартными Форт-срадствами - насколько коряво это выйдет ? Ведь на стеке 4 входных параметра. Потребуется ли постоянно вытаскивать их из глубины стека с помощью PEEK или реализовать и использовать расширение ядра локальными переменными ? И я одну требуемую мне программу (GUI-редактор прошивок для микроконтроллера) накатал на своем Fig-32. И удивительно, но на практике вышло все очень складно. А вышло оно так :
Код:
CALL: WndProc
  ( lParam wParam Msg hWnd -- ... n )
  OVER
  CASE
    WM_DESTROY OF 0 PostQuitMessage ( DROP ) 0 EXIT ENDOF
    WM_COMMAND OF
                 DROP DROP
                 CASE
                   ID_OPEN OF MENU-OPEN ENDOF
                   ID_SAVE OF MENU-SAVE ENDOF
                   ID_EXIT OF 0 PostQuitMessage ( DROP ) ENDOF
                   DUP 10 U<
                   IF
                     >R
                     0 0 BM_GETCHECK R hCheck @ SendMessageA
                     0= R GroupKey-ON/OFF
                     IF
                       0 >H R hGroup @ SetWindowTextA DROP
                       ZKEY R hKey   @ SetWindowTextA DROP
                     THEN
                     R>
                   THEN
                 ENDCASE
                 0 EXIT
               ENDOF
  ENDCASE
  DefWindowProcA
;
Вот такая вот оконная функция чисто по фортовски, да еще и косвенным шитым кодом.
Тут R это так в Фиг-е выглядит R@

Может быть если приложение будет значительно сложнее, то проблемы таки вылезут, но увы мне не приходится писать сложных приложений, ибо моя ниша на стыке программного и аппаратного. Я не есть чистый прикладной программист.

Выше в коде оконной функции есть фишка - из нее можно выходить по EXIT не убирая параметры, болтающиеся на стеке, (лишь бы на самой вершине стека лежал код возврата) ибо инструкция процессора leave, что у меня использована в обертке Форт-кода виндозной call-back функции автоматом все лишнее со стека выкидывает.

И в итоге я твою идею "творчески заимствовать" ;) не стал. Но на ус намотал.


Последний раз редактировалось Ethereal Вс июл 30, 2017 03:25, всего редактировалось 2 раз(а).

Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Моя система(_KROL)
СообщениеДобавлено: Вс июл 30, 2017 02:30 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 6410
Благодарил (а): 14 раз.
Поблагодарили: 100 раз.
Ethereal писал(а):
Их бин старый ассемблерщик. Такой идей оскорбляет мой чувств.

Каждый инструмент привносит свои интересные свойства. Как, например, мысль о переносимом между x86/ARM Форте с шитым кодом на Си?


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Моя система(_KROL)
СообщениеДобавлено: Вс июл 30, 2017 02:43 
Не в сети
Аватара пользователя

Зарегистрирован: Ср фев 23, 2011 20:42
Сообщения: 521
Откуда: Карелия
Благодарил (а): 3 раз.
Поблагодарили: 22 раз.
Hishnik писал(а):
Каждый инструмент привносит свои интересные свойства. Как, например, мысль о переносимом между x86/ARM Форте с шитым кодом на Си?
Да легко и просто безо всякого Си. Чистый ассемблер. Беру ассемблерный исходник для одной платформы, низкоуровневые определения переписываю для другой, а высокоуровневую логику не трогаю. То есть работаю кросс-компилятором. Главное ведь какого качества результат, а не то как он был получен.
Но для этого надо владеть разными ассемблерами. Так-что мой подход никому не навязываю. Ясно ведь, что далеко не каждый владеет.
Короче, сделать переносимое на Си легко. Но выбор инструмента породит тормоза. И рано или поздно эти тормоза станут досадны. И захочется чего-то без тормозов. Да и компилятор с тормозами на нижнем уровне больше игрушка и средство обучения, чем ... хотя программистам под Яву и .NET это уже не объяснить. И куды катится мир ?


Последний раз редактировалось Ethereal Вс июл 30, 2017 02:53, всего редактировалось 1 раз.

Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Моя система(_KROL)
СообщениеДобавлено: Вс июл 30, 2017 02:49 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 6410
Благодарил (а): 14 раз.
Поблагодарили: 100 раз.
Ethereal писал(а):
Да легко и просто безо всякого Си. Чистый ассемблер. Беру ассемблерный исходник для одной платформы, низкоуровневые определения переписываю для другой, а высокоуровневую логику не трогаю. То есть работаю кросс-компилятором. Главное ведь какого качества результат, а не как он был получен.

Я так делал для примерно десятка архитектур, в основном МК. Но тогда и приоритеты в практическом программировании были другие. Начинать проектирование Форта (как и любого продукта) стоит с обоснования, зачем все это и какая цель поставлена. А сейчас глобально поменялся общий вектор развития, стараниями лидеров рынка IT.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 512 ]  На страницу Пред.  1 ... 7, 8, 9, 10, 11, 12, 13 ... 35  След.

Часовой пояс: UTC + 3 часа [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: dmitri и гости: 3


Вы не можете начинать темы
Вы можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
phpBB сборка от FladeX // Русская поддержка phpBB