KRIEGSSPIELE!
Вы хотите отреагировать на этот пост ? Создайте аккаунт всего в несколько кликов или войдите на форум.

Черновик: Версия II

Участников: 2

Страница 1 из 2 1, 2  Следующий

Перейти вниз

Черновик: Версия II Empty Черновик: Версия II

Сообщение автор vikt144 Вт Апр 27, 2021 9:43 pm

Предыдущий черновик был скорее быстрое введение в android программирование,
а не в форт. Тут буду делать все компактнее, удачные абзацы буду переносить со старого
черновика - сюда.

  Итак, задача первая, создать методичку по написанию форт-системы.
Задача созрела давно, везде же говорится, что надо писать свой форт,
и не предлагают ничего, кроме реализации на каких-то ассемблерах.
Это установка телеги впереди лошади. Любой школьник, вооружившись
справочником, закодирует алгоритм на ассемблере, но не каждый
захочет разбирать ассемблерный текст, что бы понять, как это
работает.
 Баранов и Ноздрунов тоже не годятся на сегодняшний день,
их книга расчитана на узких специалистов.

Буду делать, как получится, хотелось бы, что бы кто-нибудь сделал лучше.
Так же буду дублировать на  Winglion и если работа окажется удачной,
то и на другие форт ресурсы, если они конечно есть.
 
 Пока ссылка на предварительный форт

https://github.com/vikt144/Forth/blob/main/forth/fas.java   - основной файл
https://github.com/vikt144/Forth/blob/main/helloForth.java - запускающая часть

vikt144

Сообщения : 128
Дата регистрации : 2017-03-29

Вернуться к началу Перейти вниз

Черновик: Версия II Empty Re: Черновик: Версия II

Сообщение автор vikt144 Сб Май 01, 2021 1:51 am

Андроид приложение
https://github.com/vikt144/less0

Файл разметки
https://github.com/vikt144/less0/blob/main/app/src/main/res/layout/main.xml

java - файл
https://github.com/vikt144/less0/blob/main/app/src/main/java/com/virf/less/MainActivity.java

Тут скелет простейшей java программы, разметка xml
Так же тут
Присвоение текста текстовому полю (text0)
Присвоение текста кнопкам.
Взятие текста из поля редактирования
Завтра попробую присоединить к этому форт.

vikt144

Сообщения : 128
Дата регистрации : 2017-03-29

Вернуться к началу Перейти вниз

Черновик: Версия II Empty Re: Черновик: Версия II

Сообщение автор vikt144 Ср Май 12, 2021 2:29 am

Прокомментирую сначала форт-систему.
Это черновая версия форта.
Память здесь представлена массивом 16 битных ячеек.

public short[] image;  
Стек 32битный
Слово !  записывает 2 смежные 16 битные ячейки
 с!  записывает одну ячейку.

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

Теперь, как реализован здесь create

   create name
 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)>

Слова

NOP LIT dup drop swap

   >R  со стека данных на адресный стек >R
   R>  обратно
   CALL     branch       ;
   0>       0<    0=    ?branch
   @   !
   +   -   *   /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

vikt144

Сообщения : 128
Дата регистрации : 2017-03-29

Вернуться к началу Перейти вниз

Черновик: Версия II Empty Re: Черновик: Версия II

Сообщение автор vikt144 Ср Май 12, 2021 2:52 am

Перепечатка из старого черновика
Организация рабочего места для программирования под android.
Сейчас официальное средство считается android studio.
У него недостаток - требует мощной машины.
Я не нашел способа просто скомпилировать apk файл,
обязательно требует эмуляцию самого androida,
причем на уровне процессора arm. У меня едва хватило терпения
дождаться загрузки заставки, после чего я плюнул и снес эту хрень
к черту. Тем более, что мелькнувший на форуме Winlion'а longer
подсказал чудесную альтернативу.
AIDE- IDE for Android Java
для компиляции программ прямо на android.
Создает сразу apk-файл, не требует наличия разных сред,
необходимых для запуска готового приложения
https://play.google.com/store/apps/details?id=com.aide.ui&hl=ru
Кроме нее я ничем другим не пользовался.

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

Лучше создавать новую программу на телефоне с помощью aide,
затем выгрузить полученный проект на компьютер.
Отредактированный на компьютере проект загрузить обратно на
телефон, компилировать запускать...
Для этого можно использовать популярный ES проводник,
ипользуя удаленный доступ. Es проводник сделает телефон ftp сервером.
Теперь на компьютере с телефоном можно работать с помощью ftp клиента.
Внимание, es проводник не вполне безопасен, отправил без спроса
мои фотографии в облако, что с учетом того, что многие не выносят фотографироваться...
Можно использовать другие, более простые файл менеджеры для
телефона, MIX например, они тоже могут делать из android ftp сервер.


Еще, в бесплатной версии aide , можно работать только
с пятью java файлами.
Что бы избавится от ограничений, можно заплатить 800 руб
или воспользоваться модифицированной версией
отсюда
https://4pda.ru/forum/index.php?showtopic=319369&st=7500
ничего из этого я не пробовал делать

Еще можно использовать commandline
https://habr.com/ru/post/335074/
но я не пробовал.


vikt144

Сообщения : 128
Дата регистрации : 2017-03-29

Вернуться к началу Перейти вниз

Черновик: Версия II Empty Re: Черновик: Версия II

Сообщение автор Gudleifr Ср Май 12, 2021 11:44 am

А если я хочу написать приложение для читалки PocketBook?
Gudleifr
Gudleifr
Admin

Сообщения : 3219
Дата регистрации : 2017-03-29

Вернуться к началу Перейти вниз

Черновик: Версия II Empty Re: Черновик: Версия II

Сообщение автор vikt144 Ср Май 12, 2021 4:06 pm

Если PocketBook работает на андроид и способен загружать apk файл,
думаю, что возможно.

vikt144

Сообщения : 128
Дата регистрации : 2017-03-29

Вернуться к началу Перейти вниз

Черновик: Версия II Empty Re: Черновик: Версия II

Сообщение автор Gudleifr Ср Май 12, 2021 4:20 pm

vikt144 пишет:Если PocketBook работает на андроид и способен загружать apk файл,
думаю, что возможно.
А где формат apk описан столь подробно, что его можно собрать подручными средствами?
Gudleifr
Gudleifr
Admin

Сообщения : 3219
Дата регистрации : 2017-03-29

Вернуться к началу Перейти вниз

Черновик: Версия II Empty Re: Черновик: Версия II

Сообщение автор vikt144 Ср Май 12, 2021 11:11 pm

Gudleifr пишет:
А где формат apk описан столь подробно, что его можно собрать подручными средствами?
Зачем?
apk файл собирает android studio или aide или commandline utils.
В принципе apk это zip архив, в нем файлы class можно собрать
с помощью компилятора java, но для некоторых платформозависимых файлов
все равно необходимо использовать android sdk.

vikt144

Сообщения : 128
Дата регистрации : 2017-03-29

Вернуться к началу Перейти вниз

Черновик: Версия II Empty Re: Черновик: Версия II

Сообщение автор Gudleifr Ср Май 12, 2021 11:25 pm

vikt144 пишет:Зачем?
Дык, единственный бонус от применения FORTH-метода, это сократить цикл разработки: АНАЛИЗ-ПРОЕКТИРОВАНИЕ-РЕАЛИЗАЦИЯ-ПРОВЕРКА. Если на каком-то этапе я врубаю studio и с ногами влезаю sdk, то зачем мне FORTH? Пока я буду разбираться с этими инструментами, уже и программа будет готова. Поэтому интересует ноу-хау, позволяющее по-быстрому что-то слепить из, может, и не идеальных, но работающих кусков.
Gudleifr
Gudleifr
Admin

Сообщения : 3219
Дата регистрации : 2017-03-29

Вернуться к началу Перейти вниз

Черновик: Версия II Empty Re: Черновик: Версия II

Сообщение автор vikt144 Чт Май 13, 2021 2:42 am

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

Исходники и apk-файл простейшей android программы с фортом на борту.
 
https://anonfile.com/1c9fr1b4o7/less0_7z

Добавлена программа на форте с именем 0 (ноль) которая представляет собой
обертку для ф-ции, меняющей название кнопок и текстовых полей.

 Перед использованием необходимо установить путь, откуда приложение
будет читать тексты, и быстро дважды нажать на кнопку stp.

Путь должен существовать, и устройство должно позволять читать
из этого каталога. Перезапишите туда файл 0, нажмите кнопку load и
в поле редактирования должен появится форт текст. Если текст не появился,
устройство не разрешает чтение из этого каталога посторонним программам.
Тогда спрашивайте, буду консультировать.

 Если текст появился, тогда добавьте к нему
например
0 s" change txt " txtout
 или
2 s" change butt " btnout
и жмите кнопку intprt

 Программа является исследовательской, ошибки не отлавливаются.

vikt144

Сообщения : 128
Дата регистрации : 2017-03-29

Вернуться к началу Перейти вниз

Черновик: Версия II Empty Re: Черновик: Версия II

Сообщение автор Gudleifr Чт Май 13, 2021 11:50 am

vikt144 пишет:Исходники и apk-файл...
Спасибо. Но ссылка дает 404.
Впрочем, посмотрел на диски PocketBook - там только файлы .app - обычные elf.
Gudleifr
Gudleifr
Admin

Сообщения : 3219
Дата регистрации : 2017-03-29

Вернуться к началу Перейти вниз

Черновик: Версия II Empty Re: Черновик: Версия II

Сообщение автор vikt144 Чт Май 13, 2021 9:56 pm

Не знаю, обменник работал всегда хорошо.
Другие

https://www40.zippyshare.com/v/0aLgyMvH/file.html

https://ru.files.fm/u/xfdkjhkc9

Кажется не ту ссылку запостил
https://anonfiles.com/T242Wev9u4/asrc_7z

vikt144

Сообщения : 128
Дата регистрации : 2017-03-29

Вернуться к началу Перейти вниз

Черновик: Версия II Empty Re: Черновик: Версия II

Сообщение автор Gudleifr Пт Май 14, 2021 12:33 am

vikt144 пишет:Другие
Спасибо, скачал. Разархивируется нормально. Только xml там какие-то странные...
Но, похоже, pocketBook недостаточно ведроид, чтобы java понимать. Для него рекомендуют gcc sdk.
Gudleifr
Gudleifr
Admin

Сообщения : 3219
Дата регистрации : 2017-03-29

Вернуться к началу Перейти вниз

Черновик: Версия II Empty Re: Черновик: Версия II

Сообщение автор vikt144 Пт Май 14, 2021 1:21 am

Только xml там какие-то странные... пишет:
Существенные здесь только res/layout/main.xml
Это файл разметки.
Остальные сгенерировала среда.

vikt144

Сообщения : 128
Дата регистрации : 2017-03-29

Вернуться к началу Перейти вниз

Черновик: Версия II Empty Re: Черновик: Версия II

Сообщение автор vikt144 Вт Май 25, 2021 2:56 am

Несколько задержался с работой над проектом.
Обнаружил в яве некоторые приятные штуки, которые надо оттестировать, reflections api
и Class ByteBuffer

ByteBuffer позволит создать полноценный байт код.
https://docs.oracle.com/javase/7/docs/api/java/nio/ByteBuffer.html
Тут есть методы, вроде
float  getFloat()
void  putFloat(float f)
getInt
putInt(int value) итд.
Они извлекают соответствующий параметр из массива байт и перемещают
указатель на число байт, который занимает этот параметр.
В отличие от imputStream и OutputStream тут есть метод
position(int newPosition), который переместит указатель
на нужное место в байтовом массиве.
 Таким образом, если это будет работать с нормальной скоростью,
необходимость в памяти, заданной как массив 16битных целых отпадет.
 Все это в будущем здорово упростит жизнь.

reflections api
https://vertex-academy.com/tutorials/ru/reflection-api-v-java-chast1/
 Коротко говоря, зная имена переменных и функций, есть возможность
вызвать их или задать новые значения используя и текстовые названия.
Например, к переменной, заданной как
  public int someInt ;
можно обратиться, зная только имя переменной  "someInt"
Это дает универсальный способ обмена данными виртуальной форт машины
с внешней средой. Возможно отпадет необходимость  использования в этой
реализации  громоздкого механизма портов.
Все это требует обдумывания  и тестирования.

Завтра постараюсь выложить ключевые вещи для форта в андроид программирование
Intent

vikt144

Сообщения : 128
Дата регистрации : 2017-03-29

Вернуться к началу Перейти вниз

Черновик: Версия II Empty Re: Черновик: Версия II

Сообщение автор vikt144 Вт Июн 01, 2021 1:32 am

Выкладываю промежуточные итоги.

 Проект на гитхаб
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 тексты.
 В общем, эту часть работы надо только привести в порядок и отдокументировать.
 Именно этим буду заниматься, отдавая приоритет вопросам в комментариях к этой работе,
если таковые конечно будут.
 Паралельно буду реализовывать канвас, что бы можно было бы выводить
всякие изображения и графики, и добавлю еще каких-нибудь плюшек -
проигрывания звуков, удержание экрана, что бы не гас, работа с датчиками
и гироскопами.

vikt144

Сообщения : 128
Дата регистрации : 2017-03-29

Вернуться к началу Перейти вниз

Черновик: Версия II Empty Re: Черновик: Версия II

Сообщение автор vikt144 Вт Июн 01, 2021 2:17 am

После загрузки и установки 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

vikt144

Сообщения : 128
Дата регистрации : 2017-03-29

Вернуться к началу Перейти вниз

Черновик: Версия II Empty Re: Черновик: Версия II

Сообщение автор vikt144 Вт Июн 01, 2021 2:49 am

Это заготовка системы, предполагается, что программист любитель
может надергать кода для своего приложения.

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

vikt144

Сообщения : 128
Дата регистрации : 2017-03-29

Вернуться к началу Перейти вниз

Черновик: Версия II Empty Re: Черновик: Версия II

Сообщение автор Gudleifr Вт Июн 01, 2021 11:02 am

Пока это слишком похоже на "обычный кошачий проект": что-то нужно подготовить, потом, при соблюдении некоторых условий эта штука запустится, заработает "как настоящий FORTH" и, даже выдаст некоторый небесполезный результат... Но нет главного - пока набор утилит, которые Вы натаскали на свой компьютер, более удобен в работе и позволяет сделать намного больше интересных штук, чем Ваш "зародыш". Его надо кормить и растить.
Gudleifr
Gudleifr
Admin

Сообщения : 3219
Дата регистрации : 2017-03-29

Вернуться к началу Перейти вниз

Черновик: Версия II Empty Re: Черновик: Версия II

Сообщение автор vikt144 Вт Июн 01, 2021 1:15 pm

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

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

vikt144

Сообщения : 128
Дата регистрации : 2017-03-29

Вернуться к началу Перейти вниз

Черновик: Версия II Empty Re: Черновик: Версия II

Сообщение автор vikt144 Ср Июн 02, 2021 3:28 am

Сборка программ из исходников.
Есть оффициальные sdk,
android studio и Android command line tools.

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

vikt144

Сообщения : 128
Дата регистрации : 2017-03-29

Вернуться к началу Перейти вниз

Черновик: Версия II Empty Re: Черновик: Версия II

Сообщение автор vikt144 Пт Июн 18, 2021 4:19 am

В выложенной мною  несколькими постами ранее версии системы была досадная
ошибка в 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()
код продолжает выполнятся, а данные из поля редактирования еще не
получены. Но возможно у меня замылился взгдяд, и я не могу обнаружить свою
ошибку. Позже вернусь к этой проблеме, а пока продолжу работать дальше.

vikt144

Сообщения : 128
Дата регистрации : 2017-03-29

Вернуться к началу Перейти вниз

Черновик: Версия II Empty Re: Черновик: Версия II

Сообщение автор vikt144 Пт Июн 18, 2021 4:24 am

Теперь о форте.
Это примитивная версия форта,  которая будет переписана.
Но вполне достаточна для того, что бы оттестировать на ней работу
с 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"
  точка в этом режиме выводит вершину стека без пробела)

vikt144

Сообщения : 128
Дата регистрации : 2017-03-29

Вернуться к началу Перейти вниз

Черновик: Версия II Empty Re: Черновик: Версия II

Сообщение автор vikt144 Чт Июл 29, 2021 9:25 pm

Форт и многозадачность.
 Надолго застряв в процессе реализации слова 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, минимально используя
 программирование и используя конвееры и подстановки типа > < | $() итд.

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

vikt144

Сообщения : 128
Дата регистрации : 2017-03-29

Вернуться к началу Перейти вниз

Черновик: Версия II Empty Re: Черновик: Версия II

Сообщение автор Gudleifr Сб Июл 31, 2021 1:47 pm

Что-то об этом было в конце Черновик: Версия II Leaf10ТЕМЫ #45Черновик: Версия II Leaf10, но потом я решил, в связи с введением понятия "вторичная машина", снять все ограничения на подобные решения.

А про конвейер данных я как раз сейчас собрался отписать в связи с невозможностью нормальной реализации в оконных системах "текстовых машин" из второго тома Заметок.
Gudleifr
Gudleifr
Admin

Сообщения : 3219
Дата регистрации : 2017-03-29

Вернуться к началу Перейти вниз

Страница 1 из 2 1, 2  Следующий

Вернуться к началу

- Похожие темы

 
Права доступа к этому форуму:
Вы не можете отвечать на сообщения