Forth http://fforum.winglion.ru/ |
|
Моя система(_KROL) http://fforum.winglion.ru/viewtopic.php?f=2&t=3127 |
Страница 10 из 36 |
Автор: | _KROL [ Чт июл 27, 2017 14:27 ] |
Заголовок сообщения: | Re: Моя система(_KROL) |
Код: Могу предложить начать писать Форт с ШК на Си или Паскале. Тишина пропадет. Я уже как-то писал для PABC(на стр. 7 есть файл), но у меня возникал вопрос: Как сделать нормальный словарь? Ведь способов много. К примеру немного байткода + доп. виртуальная память(массив), или как-нибудь через списки... Ладно, если будет настроение, сделаю снова(лучше) и выложу. P.s. А вообще мне жаль Pascal ABC. Почему они забросили проект и перешли только к NET? А ведь неплохая система. Только есть некоторые глюки и недокументированные возможности(кое-что нашёл в программах SAMLES). Есть вариант попробовать напиать совместно какой-нибудь язык на Форте(SP-FORTH?). Вот что я когда-то отыскал(помню мне эта книга помогла собрать мысли и сделать неплохой калькулятор на Pascal): http://www.kulichki.com/kit/crenshaw/crenshaw.html http://home.iae.nl/users/mhx/crenshaw/tiny.html (переложение на Форт) |
Автор: | KPG [ Чт июл 27, 2017 16:27 ] | ||
Заголовок сообщения: | Re: Моя система(_KROL) | ||
_KROL писал(а): Вот что я когда-то отыскал(помню мне эта книга помогла собрать мысли и сделать неплохой калькулятор на Pascal): По этим идеям и некоторым Форт принципам был сделан D2Lang P.S. Был интересен и проект Timbre Zone На Форт были и реализованны парсеры BNF от разных авторов (можно поискать по "сусекам")
|
Автор: | Victor__v [ Чт июл 27, 2017 19:46 ] |
Заголовок сообщения: | Re: Моя система(_KROL) |
Цитата: Есть вариант попробовать напиать совместно какой-нибудь язык Эм, зачем? Он будет работать в связке с фортом или без него? Какие задачи он будет эффективно решать? Вот полезный язык в рамках форта это стековые манипуляторы. См. соответствующую тему. Как успел заметить, хорошо, наглядно и компактно по записи справляется с обёртками под вин-функции, а также с ситуациями, когда приходится маневрировать двумя стеками одновременно. |
Автор: | gudleifr [ Чт июл 27, 2017 20:03 ] |
Заголовок сообщения: | Re: Моя система(_KROL) |
<Потерто по справедливому замечанию Victor__v> |
Автор: | Victor__v [ Чт июл 27, 2017 20:59 ] |
Заголовок сообщения: | Re: Моя система(_KROL) |
Цитата: Стековые манипуляторы, это язык, "отрицающий 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#) ; |
Автор: | gudleifr [ Чт июл 27, 2017 21:36 ] |
Заголовок сообщения: | Re: Моя система(_KROL) |
<Потерто по справедливому замечанию Victor__v> |
Автор: | _KROL [ Чт июл 27, 2017 22:05 ] |
Заголовок сообщения: | Re: Моя система(_KROL) |
Вялiкi дзякуй за гэта: D2Lang! Буду разбираться. Он (вроде) меньше даже чем PL/M и портативнее. |
Автор: | _KROL [ Чт июл 27, 2017 22:47 ] |
Заголовок сообщения: | Re: Моя система(_KROL) |
Вот к примеру Форт на 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 почти что "высокоуровневый Форт", но использует синтаксический разбор как и другие языки. Всё из-за шитого кода, конечно же |
Автор: | _KROL [ Пт июл 28, 2017 19:35 ] |
Заголовок сообщения: | Re: Моя система(_KROL) |
Цитата: Если заметили, добавил ?AGAIN. И всё-таки там AGAIN почти подходит. Однако... новая версия |
Автор: | _KROL [ Сб июл 29, 2017 12:31 ] | ||
Заголовок сообщения: | Re: Моя система(_KROL) | ||
Проект 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 странице!
|
Автор: | Ethereal [ Вс июл 30, 2017 01:52 ] |
Заголовок сообщения: | Re: Моя система(_KROL) |
Hishnik писал(а): Могу предложить начать писать Форт с ШК на Си или Паскале. Тишина пропадет. Их бин старый ассемблерщик. Такой идей оскорбляет мой чувств.
|
Автор: | Ethereal [ Вс июл 30, 2017 02:11 ] |
Заголовок сообщения: | Re: Моя система(_KROL) |
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 функции автоматом все лишнее со стека выкидывает. И в итоге я твою идею "творчески заимствовать" не стал. Но на ус намотал. |
Автор: | Hishnik [ Вс июл 30, 2017 02:30 ] |
Заголовок сообщения: | Re: Моя система(_KROL) |
Ethereal писал(а): Их бин старый ассемблерщик. Такой идей оскорбляет мой чувств. Каждый инструмент привносит свои интересные свойства. Как, например, мысль о переносимом между x86/ARM Форте с шитым кодом на Си? |
Автор: | Ethereal [ Вс июл 30, 2017 02:43 ] |
Заголовок сообщения: | Re: Моя система(_KROL) |
Hishnik писал(а): Каждый инструмент привносит свои интересные свойства. Как, например, мысль о переносимом между x86/ARM Форте с шитым кодом на Си? Да легко и просто безо всякого Си. Чистый ассемблер. Беру ассемблерный исходник для одной платформы, низкоуровневые определения переписываю для другой, а высокоуровневую логику не трогаю. То есть работаю кросс-компилятором. Главное ведь какого качества результат, а не то как он был получен.Но для этого надо владеть разными ассемблерами. Так-что мой подход никому не навязываю. Ясно ведь, что далеко не каждый владеет. Короче, сделать переносимое на Си легко. Но выбор инструмента породит тормоза. И рано или поздно эти тормоза станут досадны. И захочется чего-то без тормозов. Да и компилятор с тормозами на нижнем уровне больше игрушка и средство обучения, чем ... хотя программистам под Яву и .NET это уже не объяснить. И куды катится мир ? |
Автор: | Hishnik [ Вс июл 30, 2017 02:49 ] |
Заголовок сообщения: | Re: Моя система(_KROL) |
Ethereal писал(а): Да легко и просто безо всякого Си. Чистый ассемблер. Беру ассемблерный исходник для одной платформы, низкоуровневые определения переписываю для другой, а высокоуровневую логику не трогаю. То есть работаю кросс-компилятором. Главное ведь какого качества результат, а не как он был получен. Я так делал для примерно десятка архитектур, в основном МК. Но тогда и приоритеты в практическом программировании были другие. Начинать проектирование Форта (как и любого продукта) стоит с обоснования, зачем все это и какая цель поставлена. А сейчас глобально поменялся общий вектор развития, стараниями лидеров рынка IT. |
Страница 10 из 36 | Часовой пояс: UTC + 3 часа [ Летнее время ] |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |