Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Чт сен 23, 2021 19:05

...
Google Search
Forth-FAQ Spy Grafic

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




Начать новую тему Ответить на тему  [ Сообщений: 74 ]  На страницу Пред.  1, 2, 3, 4, 5
Автор Сообщение
 Заголовок сообщения: Re: Блог программиста любителя
СообщениеДобавлено: Вт май 25, 2021 16:53 
Не в сети

Зарегистрирован: Чт янв 07, 2016 19:14
Сообщения: 1134
Благодарил (а): 2 раз.
Поблагодарили: 11 раз.
vikt писал(а):
можно обратиться, зная только имя переменной "someInt"
Это дает универсальный способ обмена данными виртуальной форт машины
с внешней средой. Возможно отпадет необходимость использования в этой
реализации громоздкого механизма портов.

Порты это в смысле передача по сокетам?
А вариант скармливать строки форт-приложению?

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


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

Зарегистрирован: Вт авг 12, 2008 03:18
Сообщения: 279
Откуда: Москва
Благодарил (а): 35 раз.
Поблагодарили: 4 раз.
Цитата:
Какой у тебя смарт для тестирования?


Древний htc wildfire 512mb android 2.3.5 для тестирования на старых устройствах.

Samsung Galaxy s7 android 8

Цитата:
А вариант скармливать строки форт-приложению?

Тут так и делается
примерно
Код:
//  as -- class форт ассемблера, включает стек и вирт. машину
                     as._IN = 0;
                                as.TIB=" any forth  text ";
                try {
                                        as.interpret();
               if (as.error!=0) text0.setText( as.ErrorString );
               }
                   catch(Exception e)  {text0.setText("Крах системы " );}


Цитата:
Порты это в смысле передача по сокетам?

Нет. Тут порты это некоторая условность, зависит от приложения и
программируется пользователям. Это механизм для взаимодействия с ява объектами.

опкод виртуальной машины out вызывает ф-цию callServices и в качестве
параметров передает ей два верхних элемента стека. Тут, вершина = 0, используется
самой форт машиной, 1 - для строкового буфера (слова . s" итп выводят туда данные,
там можно осуществлять всякую конкатенацию.)
2 для gui.
Остальное пользователь может использовать как душе угодно

reflections api может избавить и от таких сложностей, достаточно
построить механизм привязки текстовых названий ява переменных
и процедур к реальным переменным и процедурам, и можно
будет из форт текстов к ним обращаться.

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


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

Зарегистрирован: Вт авг 12, 2008 03:18
Сообщения: 279
Откуда: Москва
Благодарил (а): 35 раз.
Поблагодарили: 4 раз.
Выкладываю промежуточные итоги.

Проект на гитхаб
https://github.com/vikt144/less0/tree/tmp0

Исходники и apk
https://www106.zippyshare.com/v/gSp76YBE/file.html

Сюда добавил старый проект simpleedit ( на гитхаб не выложил)
По задумке должен был бы быть редактором, а получился примитивный файл менеджер,
вызываемый через Intent, поэтому крайне полезный.
Сюда его выложил для иллюстрации.

В новый проект less0 включил menu, Intent, Handler, SharedPreferences

Меню здесь реализовано простейшее, полностью реализовано в конце программы mainAcnivity.java
Тут все элементарно, можно почитать здесь
https://startandroid.ru/ru/uroki/vse-uroki-spiskom/45-urok-13-sozdanie-prostogo-menju.html
идеально подходит для работы с фортом.

Более сложные виды меню можно получить
https://startandroid.ru/ru/uroki/vse-uroki-spiskom/46-urok-14-menju-gruppy-porjadok.html
и
https://startandroid.ru/ru/uroki/vse-uroki-spiskom/47-urok-15-kontekstnoe-menju.html

Обработчик меню, используя intent, вызывает различные системные приложения, браузер, карты, экраны настроек...
Так же, при нажатии на кнопку bt5 с помощью intent вызывается другое окно, где демонстрируется
прыгающая кнопка и вызывается примитивный файл менеджер.
Handler тут используется, что бы форт программа могла обращаться к
элементам gui. Еще Handler необходимо использовать например, при запросе
данных через интернет - это делается в ассинхронном режиме, после окончания загрузки handler выполнет процедуры,
которые запрограммированы пользователем.
SharedPreferences - читает/записывает данные в виде "key" "values", не связывая себя
с файловой системой. Здесь используется для указания начального положения каталога forth,
откуда программа считывает forth тексты.
В общем, эту часть работы надо только привести в порядок и отдокументировать.
Именно этим буду заниматься, отдавая приоритет вопросам в комментариях к этой работе,
если таковые конечно будут.
Паралельно буду реализовывать канвас, что бы можно было бы выводить
всякие изображения и графики, и добавлю еще каких-нибудь плюшек -
проигрывания звуков, удержание экрана, что бы не гас, работа с датчиками
и гироскопами.

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


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

Зарегистрирован: Вт авг 12, 2008 03:18
Сообщения: 279
Откуда: Москва
Благодарил (а): 35 раз.
Поблагодарили: 4 раз.
После загрузки и установки apk на устройство, программу необходимо настроить.
Сложности вызваны тем, что начиная с версии android Kit Kat,
google ограничил возможность приложениям,
кроме подписанных особым кодом, (который естественно никому не сообщается),
записывать в произвольную область файловой системы.
см
https://www.drive2.ru/b/1179559/
и
https://2keep.net/android-4-4-problems-writing-to-microsd/
Для решения проблемы на более современных телефонах делаем следущее.
C помощью файлового менеджера, которому разрешено создавать
каталоги в любом месте файловой системы,
на sd карте находим каталог android/data
обычно путь выглядит так
/storage/1234-abcd/android/data
В этом каталоге создаем свой каталог
com.virf.less (между словами точки, а не / )
Ставим сюда закладку, в android/data много других каталогов.
В новом каталоге создаем каталог forth и копируем туда текстовый файл
с именем 0 (ноль), поставляется в архиве.
Запоминаем путь
/storage/1234-abcd/Android/data/com.virf.less/forth
(не копируйте эту строку, копируйте то, что получилось у вас)

Запускаем less0, вводим в строку редактирования наш путь,
дважды давим на кнопку setp. Путь сохранился в SharedPreferences
Выйти из программы и зайти опять. Если все сделано правильно,
вторая кнопка переименуется в Load

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


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

Зарегистрирован: Вт авг 12, 2008 03:18
Сообщения: 279
Откуда: Москва
Благодарил (а): 35 раз.
Поблагодарили: 4 раз.
Это заготовка системы, предполагается, что программист любитель
может надергать кода для своего приложения.

При старте система автоматически начинает свою работу со считывания файла 0.
Там находятся форт тексты, которые интерпретируются.
Кнопка load забирает из строки редактирования имя файла,
который находится в созданном в предыдущем посте каталоге forth,
и заменяют содержимое строки редактирования содержимым файла.
Кнопка intrprt интерпретирует содержимое стр. редактирования.
кнопка bt5 вызывает другое окно. Остальные кнопки ничего не делают.
Файлы в каталоге forth редактируются редакторами, которые
установлены в этом устройстве, или загружаются откуда-нибудь.
Для работы со всем этим удобен total commander.
https://play.google.com/store/apps/details?id=com.ghisler.android.TotalCommander&hl=ru&gl=US

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


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

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

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


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

Зарегистрирован: Вт авг 12, 2008 03:18
Сообщения: 279
Откуда: Москва
Благодарил (а): 35 раз.
Поблагодарили: 4 раз.
Сборка программ из исходников.
Есть оффициальные sdk,
android studio и Android command line tools.

android studio требует очень мощного компьютера.
Раньше она запускалась на одном гигабайте памяти, теперь
требует 8 минимум. Но если ее удасться установить и настроить,
то можно получить подсветку синтаксиса и наверно другие приятности.
У меня не получилось.
Command Line накачает тот же самый хлам в полтора гига,
и может не компилировать, потому что ява не та.
Единственно приемлимая альтернатива для программиста любителя,
это aide, компилировать программу прямо на android устройстве.
https://play.google.com/store/apps/details?id=com.aide.ui&hl=ru
В бесплатной версии поддерживаются только 5 java файлов.
Платная стоит около 800 руб.
После установки создает каталог AppProjects в который надо заливать
свои исходники. Можно создавать и редактироваь проект прямо на устройстве.
Запускаем aide в меню view/files , заходим в наши исходники.
Переходим в src/main и aide нарисует каталог с именем
"Open this Android App Project" .
Заходим в него. Aide добавит необходимые файлы и каталоги
в проект. Теперь в меню view/errors убеждаемся, что нет ошибок.
Если есть, исправляем. Когда все в порядке, нажимаем треугольничек вверху,
устанавливаем, запускаем. Если что-то не получается, заходим в
настройки, и разрешаем устанавливать приложение не из надежных
источников. ( google считает ненадежными источниками все, кроме google play)

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



За это сообщение автора vikt поблагодарили - 2: Total Vacuum, Victor__v
Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Блог программиста любителя
СообщениеДобавлено: Ср июн 02, 2021 13:24 
Не в сети

Зарегистрирован: Чт янв 07, 2016 19:14
Сообщения: 1134
Благодарил (а): 2 раз.
Поблагодарили: 11 раз.
Тогда уж и можно ещё html-файл с js внутри превратить в apk
И форт соот-но написать на js
Я так делал один раз.
Исходник, к несчастью, не сохранился

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


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

Зарегистрирован: Вт авг 12, 2008 03:18
Сообщения: 279
Откуда: Москва
Благодарил (а): 35 раз.
Поблагодарили: 4 раз.
Victor__v писал(а):
Тогда уж и можно ещё html-файл с js внутри превратить в apk


Не знаю, не слышал о таком.
apk - это зип архивб c ресурсами и исполняемыми файлами.
Сперва java программа превращается в java class'ы,
как обычно в яве, затем в файлы с расширением dex, скорее всего
обычные исполняемые файлы. apk файл врядли можно получить,
не используя гугловских инструментов, которые написаны на java.
Судя по всему, aide их использует.
Кроме того, приложение должно быть специальным образом подписано.

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


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

Зарегистрирован: Вт авг 12, 2008 03:18
Сообщения: 279
Откуда: Москва
Благодарил (а): 35 раз.
Поблагодарили: 4 раз.
В выложенной мною несколькими постами ранее версии системы была досадная
ошибка в 164 строке
https://github.com/vikt144/less0/blob/tmp0/app/src/main/java/com/virf/less/MainActivity.java
Код:
if (as.error==0) text0.setText( as.ErrorString );

Получалось, что при отсутствии ошибок текстовому полю
присваивалось значение null. Таким образом затирался весь вывод
программы на форте.
Если кто - то разбирался с этой версией, приношу извинения.
Чуть позже выложу обновленную версию.
Сейчас другая проблема, из которой завис. Кажется android
забирает данные из поля editText в отдельном потоке, в результате
чего после вызова
Код:
et.getText()

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

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


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

Зарегистрирован: Вт авг 12, 2008 03:18
Сообщения: 279
Откуда: Москва
Благодарил (а): 35 раз.
Поблагодарили: 4 раз.
Теперь о форте.
Это примитивная версия форта, которая будет переписана.
Но вполне достаточна для того, что бы оттестировать на ней работу
с android api.

Слово world снимает со стека значение, но не проверяет его,
Словарей нет.

Память здесь представлена массивом 16 битных ячеек.
public short[] image;
Стек 32битный
Слова ! @ записывает/читает 2 смежные 16 битные ячейки
с! c@ записывает/читает одну ячейку.
, (запятая) -- запятая грузит 32 значение, которое занимает 2 ячейки
allot - выделяет память ячейками

таким образом,классическое определение будет выглядеть так.
: var create 2 allot ;
: const create , does> @ ;


Список слов
NOP LIT dup drop swap
>R со стека данных на адресный стек
R> обратно
CALL branch ;
0> 0< 0= ?branch
@ !
+ - * /MOD -- /mod оставляет на стеке результат и остаток
AND OR XOR SHL SHR
ZERO_EXIT 1+ 1- ----- zero exit остался от ретро форт, резерв
IN OUT WAIT -- работа с внешними объектами, здесь используется out
LIT32 c@ c!
EXIT .
: ; create
allot does> , here -- запятая грузит 32битное значение, которое занимает 2 ячейки
compile immediate >resolve <resolve
( ) коммент ,
ascii s" type ." s+ s= --- строки

0< 0= 0>

>mark <mark
if then else

begin until while repeat
var
over rot
?DUP
R@
/
2+ 2- 2/
negate
ABS ( A --->абс A )

2dup 2drop

Замечание по работе со строками.

Строка на стеке - на вершине длинна, под ней индекс элемента в массиве строк.

." - пока лучше не использовать.
s" string" - на стеке ind length -- ind индекс в массиве строк

s! s@ --запись/извлечение ind length строки в 32битную переменную
(
: s! dup rot swap c! 1+ c! ;
: s@ dup c@ swap 1+ c@ swap ;
)
пример
var str
s" string" str s!

s+ - конкатенация ( str s@ s" 2string" s+ = string2string
s= - сравнение на стеке 0 false -1 true

Работа с буфером
с буфером работают команды типа "." "type"
команда 0 1 out -- записывает 0 в порт под номером 1
Очищает буфер и комманды вывода пишут в консоль.
Содержимое консоли можно увидеть в logCat, вместе
с другим отладочным мусором.
команда 1 1 out -- записывает 1 в порт под номером 1
текущее содержимое буфера преобразуется в строку
на стеке оставляются ind и length этой строки
Затем буфер очищается и готов опять принять вывод.

пример
var fl
var jp
s" file" fl s!
s" .jpg" jp s!

1 1 out ( отправляем старое содержимое буфера)
25
fl s@ type
.
jp s@ type
1 1 out
( на стеке будет ind и len строки "file25.jpg"
точка в этом режиме выводит вершину стека без пробела)

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


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

Зарегистрирован: Вт авг 12, 2008 03:18
Сообщения: 279
Откуда: Москва
Благодарил (а): 35 раз.
Поблагодарили: 4 раз.
Форт и многозадачность.
Надолго застряв в процессе реализации слова expect и перебирая различные варианты
решения проблемы, обнаружил некоторые возможности языка форт. Воможно они обсуждались
где-нибудь, а я ничего не понял.
Ну все по порядку. Дело в том, что процесс в android, запущенный в gui,
не может быть приостановлен и возобновлен. Разве только реализовать
бесконечный цикл опроса, но это пошло. Мгновенно кончится батарея.
А как тогда ввести данные в процессе работы программы?
В принципе ничего сложного, запустить форт интерпретатор как в фоновый процесс,
который легко останвливать (wait) и возобновлять (notify)
Я поначалу и стал так делать, но потом в процессе обдумывания над решениями
других подобных задач решил от этого отказаться.
Идея в том, чтобы вывод данных одного форт слова,
могли бы использовать как входные данные другие форт слова, подобно
тому, как это делается в системах Unix. Там эта конвееризация
обеспечивает огромную мощность и гибкость, и как правило
строится довольно легко. Для реализации этого минимальная многозадачность
все же нужна.
например
Код:
  outputRedirection  ( некое слово, которое перенаправляет
                        текстовый вывод с консоли куда-нибудь еще)
  ." double a b c d ;  c = fstack ; b = fstack ; a = fstack ; "
  ." d = b * b - 4 * a * c ; "
  ( отправляем туда некий текст )
   someMath ( вызываем некое слово, которое способно извлечь этот
             текст, обработать его, и сгенерировать новый текст,
     который форт система сможет обработать обычным образом)
  c f! b f! a f!
  b f@ fdup *  4e a f@ f* c f@  f* f-  d f!


В этом конкретном случае, многозадачность не нужна.
Но бывает, что длинна входных данных неопределенна или
очень большая. Тогда необходимо постоянно переключаться
между процессом источником и процессом приемником,
что бы избежать образования больших буфферов для
накопления промежуточных данных.
Мне кажется, что тут выгоднее простая реализация многозадачности,
чем та, которая реализуется с помощью OS, с необходимостью
синхронизировать потоки.
Введя одну сущность(многозадачность) в ядро
форт системы, можно убить массу сущностей в будущем, решая задачи,
как уже пол века решаются задачи в мире Unix, минимально используя
программирование и используя конвееры и подстановки типа > < | $() итд.

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

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


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

Зарегистрирован: Чт янв 07, 2016 19:14
Сообщения: 1134
Благодарил (а): 2 раз.
Поблагодарили: 11 раз.
А семафоры и мьютексы с разделяемыми между потоками буферами?

Как с этим в андроиде?

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


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

Зарегистрирован: Вт авг 12, 2008 03:18
Сообщения: 279
Откуда: Москва
Благодарил (а): 35 раз.
Поблагодарили: 4 раз.
Цитата:
А семафоры и мьютексы с разделяемыми между потоками буферами?

Есть. Подробно про java - многозадачность.
https://javarush.ru/groups/posts/2047-threadom-java-ne-isportishjh--chastjh-i---potoki
Там куча вариантов. Голова лопнет, пока подберешь для себя подходящий.
А еще некоторые объявленны устаревшими.

android в основном совместим с явой.

Есть специфичный для android вариант организации многозадачности - asynctask
https://startandroid.ru/ru/uroki/vse-uroki-spiskom/149-urok-86-asynctask-znakomstvo-neslozhnyj-primer.html

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

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


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

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


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

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


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

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