Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Вт мар 19, 2024 06:14

...
Google Search
Forth-FAQ Spy Grafic

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




Начать новую тему Ответить на тему  [ Сообщений: 120 ]  На страницу Пред.  1 ... 3, 4, 5, 6, 7, 8  След.
Автор Сообщение
 Заголовок сообщения: Re: Блог программиста любителя
СообщениеДобавлено: Ср янв 12, 2022 03:06 
Не в сети
Аватара пользователя

Зарегистрирован: Вт авг 12, 2008 03:18
Сообщения: 327
Откуда: Москва
Благодарил (а): 36 раз.
Поблагодарили: 7 раз.
Собрался было опубликовать форт, как обещал выше, но черт попутал - решил переписать слово
." anyword " c явы на форт, с целью проверки форт-системы.
Код:
: compile_call  ( компилирует вызов процедуры  -> compile_call type  ) 
   r>   dup       ( сохранить  со стека возвратов значение, которое занесло туда вызов compilecall )   
   c@  here c!   ( прочитать и скомпилировать байт, который следует после compilecall, обычно call )

    1 + dup       ( увеличить адрес на единицу )
    @ ,             ( компиляция адреса процедуры после compile_call )
    4 +   >r        ( вернуть на стек возвратов новое значение пропустить адрес, который вызвали)
;


  : ."  34 word  0 ( на стеке 0 0, здесь это значит, строка в буфере, длинна строки определяется автоматически )
       state 0 =
       if  type  ( если режим исполнения - печатать )
        else 
          spick  ( здесь, на стеке адрес и длина, продублировать строку, если 0 0 - продублировать буфер, )
          swap  ( на стеке  длина и адрес новой cnоки )
          literal literal ( если режим компиляции, генерируется код, который )
                            ( во время исполнения положит на стек адр и длину новой строки )
          compile_call  ( компилирует вызов процедуры type, возможно в форте есть специальное слово, компилирущее вызовы )
       type   
      then
; immediate 
 
  : q ." qwertu "  ;  ( тестовая процедура )


В случае, если compile_call реализуется на java, все прекрасно работает,
а на форте нет. Расследование показало, что во время определения слова q
при запуске слова немедленного исполнения .", со стека возвратов
снимается почему то не адрес после compile_call, а адрес в слове q,
после ." qwertu ". Что это, оптимизация кода ява машиной, или моя какая-то ошибка -
черт знает.
Все это говорит о том, что задача создания грамотного руководства по построению
форт транслятора созрела и перезрела. Создание транслятора должно способствовать
пониманию работы форт-систем, а не борьбу со всякими мутностями на каждом шагу.

На этом я временно прекращаю разработку форт-систем, буду использовать то, что есть.
На первоначальное написания скриптов должно хватить. Тем более, это основная цель
данной работы. Успех этой работы, как я надеюсь, сделает работу с программами,
которые будут написаны с учетом возможности выполнять форт-скрипты, такой же
легкой и приятной, как написание скриптов для систем Unix.

Есть идеи, создать формальное описание стековой машины. Вроде должно облегчить
создание форт систем.

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

_________________
Линукс решает, винда глотает.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Блог программиста любителя
СообщениеДобавлено: Чт янв 13, 2022 14:28 
Не в сети

Зарегистрирован: Пн янв 07, 2013 22:40
Сообщения: 2141
Благодарил (а): 8 раз.
Поблагодарили: 74 раз.
vikt писал(а):
Собрался было опубликовать форт, как обещал выше, но черт попутал - решил переписать слово
." anyword " c явы на форт, с целью проверки форт-системы.

:)
А, такое слово из этого сообщения заработает (Аналог Atom в Лисп терминалогии)


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Блог программиста любителя
СообщениеДобавлено: Чт янв 13, 2022 22:59 
Не в сети
Аватара пользователя

Зарегистрирован: Ср июл 03, 2019 11:10
Сообщения: 460
Откуда: Москва
Благодарил (а): 57 раз.
Поблагодарили: 22 раз.
vikt писал(а):
Код:
  : ."  34 word  0 ( на стеке 0 0, здесь это значит, строка в буфере, длинна строки определяется автоматически )
       state 0 =
       if  type  ( если режим исполнения - печатать )
        else 
          spick  ( здесь, на стеке адрес и длина, продублировать строку, если 0 0 - продублировать буфер, )
          swap  ( на стеке  длина и адрес новой cnоки )
          literal literal ( если режим компиляции, генерируется код, который )
                            ( во время исполнения положит на стек адр и длину новой строки )
          compile_call  ( компилирует вызов процедуры type, возможно в форте есть специальное слово, компилирущее вызовы )
       type   
      then
; immediate
А state - это переменная? Тогда надо state @ вместо state писать... Еще можно 0 = убрать перед if, поменяв местами блоки после if и else:
Код:
: ." 34 word 0 state @ if spick swap literal literal compile_call type else type then ; immediate
И, кстати, есть ли уверенность, что compile_call компилирует вызов процедуры type, а не открывающей комментарий ( компилирует ... ) левой скобочки?


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Блог программиста любителя
СообщениеДобавлено: Пт янв 14, 2022 20:19 
Не в сети
Аватара пользователя

Зарегистрирован: Вт авг 12, 2008 03:18
Сообщения: 327
Откуда: Москва
Благодарил (а): 36 раз.
Поблагодарили: 7 раз.
KPG писал(а):
А, такое слово из этого сообщения заработает (Аналог Atom в Лисп терминалогии)

Вряд ли. У меня >name указывает на поле имени, которое состоит из
byte flag 1-байт
int len 4-байта
int ind 4-байта
Чтобы получить текстовое представление, надо написать >name 5 +
Так же не реализованы cell и postrone

Впрочем это предварительная версия форт, для того, что бы как можно
быстрее начать писать скрипты.


Total Vacuum писал(а):

А state - это переменная? Тогда надо state @ вместо state писать... Еще можно 0 = убрать перед if, поменяв местами блоки после if и else:
Здесь это процедура. Будет время, перепишу.

Total Vacuum писал(а):
Код:
: ." 34 word 0 state @ if spick swap literal literal compile_call type else type then ; immediate
И, кстати, есть ли уверенность, что compile_call компилирует вызов процедуры type, а не открывающей комментарий ( компилирует ... ) левой скобочки?

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

_________________
Линукс решает, винда глотает.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Блог программиста любителя
СообщениеДобавлено: Пн янв 17, 2022 15:12 
Не в сети
Аватара пользователя

Зарегистрирован: Вт авг 12, 2008 03:18
Сообщения: 327
Откуда: Москва
Благодарил (а): 36 раз.
Поблагодарили: 7 раз.
Переименовал state в state@ .
Это по прежнему процедура, но теперь ее проще найти поиском,
когда буду переписывать. Сразу делать ее переменной не стал,
в многозадачной среде она может иметь разные значения для
каждой задачи и опять пришлось бы переделывать.

План работ.
Перепроверить и опубликовать текущую реализацию форта. (возможно сегодня)

Переработать реализацию простейшей программы для android c фортом на борту.
Основные изменения: Элементы gui теперь будут уложены в массивы.
Это позволит к ним обращаться через индекс массива, а не к каждому элементу
отдельно. Это позволит избавится от излишне громоздкой реализации Handler
для обращения к этим элементам.

Работа с Intent. Это наиболее вкусные применения скриптового языка, возможность
вызывать и передавать параметры окнам своих и чужих приложений и получать от них
сообщения.

Создание viewers элементов, рисование на экране, canvas.

Навигационная программа со скриптовым языком на борту.

_________________
Линукс решает, винда глотает.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Блог программиста любителя
СообщениеДобавлено: Ср янв 19, 2022 01:18 
Не в сети
Аватара пользователя

Зарегистрирован: Вт авг 12, 2008 03:18
Сообщения: 327
Откуда: Москва
Благодарил (а): 36 раз.
Поблагодарили: 7 раз.
Выкладываю промежуточные результаты.
https://github.com/vikt144/Forth/tree/main
Новый форт имеет простейшую реализацию словарей,
операции с плавающей точкой и другие новшества.

Список слов
NOP LIT dup drop swap >R R> CALL branch ;
0> 0< 0= ?branch
@ !
+ - * /MOD
AND OR XOR SHL SHR
ZERO_EXIT 1+ 1-
IN OUT WAIT LIT8 c@ c!
EXIT .

: ; create allot does> , here
compile compile_call immediate >resolve <resolve >mark <mark
name> L>NAME link> >body state@
word find

( комментарий - пропускает текстовый блок до ')'
\ - комментарий не поддерживается

< > =
if then else
begin until while repeat

var const

over rot ?DUP R@ / mod
2+ 2- 2/
negate
ABS ( A --->абс A )

2dup 2drop 2var 2@ 2!

Тип float

Примеры чисел с
1.073741824E9 5.304989477E-315 10f 4.6
В общем все, что совместимо с типом данных для java double
здесь числа с точкой не являются числом двойной точности

flit
fdup fswap fdrop
f. f! f@ f+ f- f* f/ f> f< f= f<> f>= f<=
fsin fcos ftan fasin facos fatan fatan2
fln flog fsqrt fexp fabs floor d>f f>d

Строки
ascii -- ascii " вернет 34
s" -размещает строку
type
s+ ( s0 l0 s1 l1 - sn ln конкатенация строк )
spick - дублирование строки
s= сравнение строк

В файле с именем 0 (ноль), находятся расширения, написанные на форте

constant variable c, 2const
>name
voc-link - список словарей
адреса переменных в памяти виртуальной машины форта.
2 constant here_
6 constant latest
10 constant state
15 constant context
20 constant current
25 constant forthVoc

vocabulary DEFINITIONS forth

Компиляция
javac helloForth.java

Запуск
java helloForth 0

0-это файл с расширениями.
https://github.com/vikt144/Forth/blob/main/0

главный файл
https://github.com/vikt144/Forth/blob/main/forth/fas.java

Запускающий файл
https://github.com/vikt144/Forth/blob/main/helloForth.java

_________________
Линукс решает, винда глотает.



За это сообщение автора vikt поблагодарил: NLObP
Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Блог программиста любителя
СообщениеДобавлено: Ср янв 19, 2022 22:20 
Не в сети
Аватара пользователя

Зарегистрирован: Вт авг 12, 2008 03:18
Сообщения: 327
Откуда: Москва
Благодарил (а): 36 раз.
Поблагодарили: 7 раз.
Из форума Gudleifr
Цитата:
Рад, что не бросили.
Собираюсь довести работу до некоторого итога.
Цитата:
нельзя хоть немного литературнее?
Увы, в части литературности я крайне бездарен.
Но буду стараться.
Эта версия предварительная, она нужна, что бы иметь возможность работать над другими частями
системы. В частности, что бы побыстрее начать разрабатывать базовые форт-слова,
для последущего скриптинга. Что является ключевым в данной работе.

Понемногу буду документировать.
Структура словарной статьи в этой реализации.
Код:
link  int               0  - указатель на поле link предыдущей статьи 
flag  byte              4  - поле имени - флаги
size  int  -            5  - поле имени -   длинна строки
adr   int               9  - поле имени - - индекс на строку или адрес строки
cfa   int               13 - cfa

Скопипащу из предыдущих записей, как выполняется слово, в зависимости от значения cfa
Цитата:
cfa = 0
создает статью name, значение cfa должно интерпретироваться
1) в процессе интерпретации слова name, на стек кладется адрес поля параметров статьи name.
2) в процессе компиляции текста, где вызывается name, генерируется код, который кладет на стек
адрес поля параметров статьи name.
генерируется код виртуальной машины lit <адрес поля параметров name>

cfa=1 -- в этой реализации присваивается статьям,
которые являются обертками для опкодов виртуальной машины,
таких как dup + - ! @ итд.

поле параметров в этом случае состоит из двух слов и выглядит например для dup так,
opcode dup -- 2
opcode ret -- 9 - опкод для возврата из подпрограммы
(или -- 2 9 )
В процессе компиляции какой-нибудь словарной статьи, в случае ссылки на dup, просто скопирует 2 в поле параметров новой статьи.
В процессе интерпретации статьи dup, будет просто сделан вызов exec
<адрес поля параметров dup> , а ret вернет управление в интерпретатор.

Слова, определенные через : (двоеточия), это вообще процедура.
Здесь для таких слов cfa=2.
Если в процессе компиляции встретится ссылка на такое слово, то будет
сгенерирован код call <адрес поля параметров >

Слова, определенные через create does> в процессе выполнения оставляют на стеке
адрес поля параметров, и выполняют код, который расположен после does>.

Здесь cfa=-<адрес кода после does> , отрицательное значение используется,
что бы различить от других случаев.
В процессе компиляции генерируется код
lit <адрес поля параметров> call <abs(cfa)>

Процедура exec в файле fas.java (форт ассемблер) выполняет слово,
а comp - компилирует.
exec заносит в стек возвратов адрес процедуры exit,
которая потом остановит виртуальную машину и вернет управление interpret.
Затем exec выполнит слово, в соответствии со значением cfa

_________________
Линукс решает, винда глотает.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Блог программиста любителя
СообщениеДобавлено: Сб янв 22, 2022 02:21 
Не в сети
Аватара пользователя

Зарегистрирован: Вт авг 12, 2008 03:18
Сообщения: 327
Откуда: Москва
Благодарил (а): 36 раз.
Поблагодарили: 7 раз.
Набросал простейшую андроид-прграммку, которая просто читает из editbox и
переименовывает кнопочку.
Туда буду внедрять свой новый форт.

Исходники
https://github.com/vikt144/less1

О программе aide, для компиляции проектов на телефоне.
http://fforum.winglion.ru/viewtopic.php?p=48738#p48738

apk - файл, если нужен.
https://anonfiles.com/Hcn3IdCdx6/les_7z

Затем решу трудности с реализацией слова expect,
которые возникают из за того, что запущенные из обработчиков android gui
процессы невозможно приостановить и возобновить снова. Его можно только
завершить. Затем Intent, меню , вывод и рисование изображений.

_________________
Линукс решает, винда глотает.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Блог программиста любителя
СообщениеДобавлено: Пн янв 24, 2022 11:45 
Не в сети
Аватара пользователя

Зарегистрирован: Ср июл 03, 2019 11:10
Сообщения: 460
Откуда: Москва
Благодарил (а): 57 раз.
Поблагодарили: 22 раз.
Что-то не качается apk


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Блог программиста любителя
СообщениеДобавлено: Пн янв 24, 2022 12:42 
Не в сети
Аватара пользователя

Зарегистрирован: Вт авг 12, 2008 03:18
Сообщения: 327
Откуда: Москва
Благодарил (а): 36 раз.
Поблагодарили: 7 раз.
Total Vacuum писал(а):
Что-то не качается apk

Не знаю, может местный провайдер блокирует anonfiles.
Но это не важно, постараюсь сегодня присоединить новый форт этой
андроид программе и разместить на новом файл-обменнике

_________________
Линукс решает, винда глотает.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Блог программиста любителя
СообщениеДобавлено: Пн фев 14, 2022 04:18 
Не в сети
Аватара пользователя

Зарегистрирован: Вт авг 12, 2008 03:18
Сообщения: 327
Откуда: Москва
Благодарил (а): 36 раз.
Поблагодарили: 7 раз.
Прошу прощения с задержкой на пол месяца, но
проект после переноса на андроид вылетал после запуска, хотя видимых ошибок
не было. Просто наваждение какое-то. Потом разобрался, позже переделаю
инициализацию форт машины в отдельную процедуру, что бы избежать
подобных неожиданностей в будущем.

Тоже предварительная версия.
Программы на форте могут изменять содержимое текстовых полей и
названия кнопок, а также записывать и читать текст в каналы и из каналов.
Это необходимо для реализации скриптовых возможностей форт системы
в андроид приложении. В данный момент это находится в зачаточном состоянии.
После установки программы необходимо настроить путь к каталогу форт-програм.
Это немного хлопотно, но это выходка гугол, после версии android 4.4б
программа, которая не поставляется вместе с прибором и специальным образом
не подписана, не может записывать данные куда угодно.
Как создать каталог для записи, описано здесь.
только вместо com.virf.less надо писать
com.less
http://fforum.winglion.ru/viewtopic.php?p=48787#p48787

В этот каталог надо положить файл с именем 0 (ноль).
Там находятся форт тексты, которые автоматически
загрузятся и исполнятся.
https://github.com/vikt144/less1/blob/WithForth/0
Проект
https://github.com/vikt144/less1/tree/WithForth

Изображение

От прошлогоднего проекта отличается тем, что элементы gui - интерфейса теперь собраны
в массивы, что делает реализацию Handler (средство доступа к интерфейсу gui из потока)
намного компактнее.
Добавлено меню, это очень простой интерфейс, реализация обработчиков
элементов меню тоже простая.

ф-ции gui
s" text " 1 -- txt.set текстовому полю N1 присвоит зачение 'text'
s" bttext " 3 btn.txt.set -- 3 кнопку назовет bttext
s" anytext " 0 ed.txt.set -- в 0 поле редактирования загрузит anytext
s" anytext " 0 ed.txt.hint -- в 0 поле редактирования загрузит подсказку
clr -- очищает поле редактирования

Запись в канал осуществляется обычными операциями
. f. type ."

7.8 fsin f. ( запись в канал )
0 readchan ( на стеке адрес и длина строки из канала 0, канал обнуляется)
0 txt.set ( полю с номером ноль присваивается результат )

Изображение

_________________
Линукс решает, винда глотает.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Блог программиста любителя
СообщениеДобавлено: Вт фев 15, 2022 00:30 
Не в сети
Аватара пользователя

Зарегистрирован: Вт авг 12, 2008 03:18
Сообщения: 327
Откуда: Москва
Благодарил (а): 36 раз.
Поблагодарили: 7 раз.
Кнопка load загружает файл, имя которого находится
в поле редактирования. Текст загруженного файла
замещает имя файла в окне редактирования.
Кнопка bt4 интерпретирует форт текст,
который находится в окне редактирования.

Собрать apk из исходников в среде aide очень легко,
для этого достаточно скопировать каталоги с исходником.
Потом открыть, используя файл-менеджер aide каталог,
где появится, помимо файлов, предложение, собрать проект
из этих исходников. Среда сама обвесит проект необходимыми
градлами и файлами. С удовольствием отвечу на возникшие вопросы.

Исходник + apk + 0-файл
https://www39.zippyshare.com/v/NRaxOJVk/file.html

Пока откоментирую меню.
В общем все описано тут
https://startandroid.ru/ru/uroki/vse-uroki-spiskom/45-urok-13-sozdanie-prostogo-menju.html
Я использовал простейшую реализацию меню.
Код находится внизу файла MainActivity.java
элемент clr исполняет фортслово clr, которое очищает поле ввода от текста.
Остальные вызывают c помощью Intent настройки, браузер и карту.
Intent - очень важная часть програмирования android, можно вызывать
с их помощью другие экраны и приложения и сервисы.
Так же можно возвратить результаты работы других приложений.
Теперь займусь проблемой expect.
Проблема очень мутная в графической среде, затем рисовалка(реализация своего view
компонента - очень вкусная тема)

_________________
Линукс решает, винда глотает.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Блог программиста любителя
СообщениеДобавлено: Ср фев 16, 2022 11:14 
Не в сети
Аватара пользователя

Зарегистрирован: Ср июл 03, 2019 11:10
Сообщения: 460
Откуда: Москва
Благодарил (а): 57 раз.
Поблагодарили: 22 раз.
Скачал
vikt писал(а):
Исходник + apk + 0-файл
https://www39.zippyshare.com/v/NRaxOJVk/file.html
, но архив запаролен...


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Блог программиста любителя
СообщениеДобавлено: Ср фев 16, 2022 11:20 
Не в сети
Аватара пользователя

Зарегистрирован: Вт авг 12, 2008 03:18
Сообщения: 327
Откуда: Москва
Благодарил (а): 36 раз.
Поблагодарили: 7 раз.
Простите забыл.
123
Поставил пароль на всякий случай, возможно, что файл хостинги удаляют
файлы с программами, тк подозревают нарушение прав или вирусы.

_________________
Линукс решает, винда глотает.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Блог программиста любителя
СообщениеДобавлено: Ср фев 16, 2022 12:14 
Не в сети

Зарегистрирован: Чт янв 07, 2016 19:14
Сообщения: 1285
Благодарил (а): 3 раз.
Поблагодарили: 18 раз.
Есть же яндекс.диск, гугл.диск, на мейле можно хранить.
Несколько гигов для форта за глаза хватит.

А люди до сих пор файлообменниками балуются. Неужели они так много платят за скачку ваших материалов?

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 120 ]  На страницу Пред.  1 ... 3, 4, 5, 6, 7, 8  След.

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


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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0


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

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