Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Чт мар 28, 2024 18:49

...
Google Search
Forth-FAQ Spy Grafic

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




Ответить
Имя пользователя:
Заголовок:
Текст сообщения:
Введите текст вашего сообщения. Длина сообщения в символах не более: 60000

Размер шрифта:
Цвет шрифта
Настройки:
BBCode ВКЛЮЧЕН
[img] ВЫКЛЮЧЕН
[flash] ВЫКЛЮЧЕН
[url] ВКЛЮЧЕН
Смайлики ВЫКЛЮЧЕНЫ
Отключить в этом сообщении BBCode
Не преобразовывать адреса URL в ссылки
Вопрос
Теперь гостю придется вводить здесь пароль. Не от своей учетной записи, а ПАРОЛЬ ДЛЯ ГОСТЯ, получить который можно после регистрации на форуме через ЛС.:
Этот вопрос предназначен для выявления и предотвращения автоматических регистраций.
   

Обзор темы - Forth over Arduino
Автор Сообщение
  Заголовок сообщения:  Re: Forth over Arduino  Ответить с цитатой
Ну, в принципе, включение вывода как GPIO и должно отключать режимы специального назначения. Со скоростью еще определенный резерв в том, что вычисление digitalPinToPort(pin) каждый раз при выводе - это вынужденная дань подходу Arduino как таковому. Просто чтобы "вывод в pin 13" всегда был зажиганием светодиода. Соответственно, для разработчиков это определенная головная боль, чтобы по аргументу 13 понять, где на их плате соответствующий регистр IO в МК.

Я сейчас жду еще одну интересную платформу на ESP32: M5Stack Core2 ESP32 IoT Памяти тут побольше, поэтому и разместить всякого тоже можно. Кроме того, чем больше памяти задействовано, тем дольше грузится прошивка, что опять-таки происходит при каждой перекомпиляции исходных текстов, и избавиться от части этого можно как раз с интерпретатором, работающим внутри Arduino.
Сообщение Добавлено: Пн дек 25, 2023 03:31
  Заголовок сообщения:  Re: Forth over Arduino  Ответить с цитатой
Возможно, кому-нибудь будет полезно:

Обнаружил, что на ESP8266 ардуиновская digitalWrite перед собственно установкой уровня пина ещё отключает на нём ШИМ и генерацию импульсов (которые могли быть запущены функциями analogWrite и tone соответственно). При большом числе вызовов эти вспомогательные действия могут занимать заметное время.

Cоорудил макросы, которые просто устанавливают указанный уровень на пине и работают значительно быстрее:
Код:
#define pinHigh(pin)  (*portOutputRegister(digitalPinToPort(pin)) |= digitalPinToBitMask(pin))
#define pinLow(pin)   (*portOutputRegister(digitalPinToPort(pin)) &= ~digitalPinToBitMask(pin))


Скорее всего, будет работать и под ESP32, но пока не проверял.
Сообщение Добавлено: Пн дек 25, 2023 00:54
  Заголовок сообщения:  Re: Forth over Arduino  Ответить с цитатой
https://arduino-forth.com/#menu-idExemples - раздел примеров сайта

P.S. Сообщения от Chu на форуме roboforum по amforth
Сообщение Добавлено: Вс дек 12, 2021 03:30
  Заголовок сообщения:  Re: Forth over Arduino  Ответить с цитатой
Починил-таки does>, добавил edit и кнопку run... :D
Теперь
Код:
: abc create does> 0 + @ does> 1 + @ does> 2 + @ ;
abc c 'a' , 'b' , 'c' ,
c . c . c . c . c .
выводит
Код:
a b c c c
Форт-исходник 3D-бродилки теперь "зашит" не в текстовой переменной, а в edit-е... По кнопке run содержимое edit-а интерпретируется/компилируется, а сам edit очищается и готов к приему новых порций кода... Есть еще нижний edit, куда добавляется уже обработанный код... Лежит тут: http://totalvacuum.ru/online3d.htm
Т.е. фактически весь пример влез в 300 строк кода... Из них 50 строк - javascript-движок транслятора, еще 50 - объявления базовых слов ядра с "ассемблерными" вставками javascript-кода... Таким образом, получили компактный, но в то же время комфортный для работы набор примитивов, примерно 30-40 шт. (тут есть избыточность, но пусть будет), на базе которых можно строить все остальное:
Код:
( : ; immediate create does> allot , variable constant array if else then while repeat do loop dup swap pick drop + - * = < > & | ^ ! @ . putpixel redraw 123 "string" 'c' `javascript` )
Ну а дальше практически чистый форт-код 3D-бродилки... Причем сам форт-код не оптимизирован, т.е. это "дословный" перевод кода 3D-бродилки с Си на Форт... Когда появится время и желание, утрамбую, ну а пока весит 9K... :D Всё управление "персонажем" при помощи мыши... :D

upd. Тут почти то же самое, но персонаж бегает по полю сам, при каждом ударе о стену направление движения и другие параметры меняются случайным образом: http://totalvacuum.ru/sky3d.htm Остановить самоубийство о стену можно нажав мышекнопку... Возобновить бессмысленное и беспощадное блуждание по полю можно при помощи команды
Код:
1 forward !
В смартфоне событие onmousedown не срабатывает (в отличие от onmouseup), но вместо него вроде как можно использовать что-то типа
Код:
: "ontouchstart" 1 forward ! ;
: "ontouchend"   0 forward ! ;
А вот еще небольшой пример: http://totalvacuum.ru/fft.htm Переделал стек и область данных под комплексные числа, добавил слово i, которое кладет в стек мнимую единицу, сделал пока еще корявый литературный перевод си-шной реализации быстрого преобразования Фурье, нагло сворованной с rosetta code... А дальше замешиваем 2 синуса, берем косинус в качестве оконной функции и рисуем спектр этого безобразия: http://totalvacuum.ru/spectrum.htm :D

Вообще, удобный онлайн-полигон для обкатки идей и алгоритмов получается...
Сообщение Добавлено: Ср окт 06, 2021 16:03
  Заголовок сообщения:  Re: Forth over Arduino  Ответить с цитатой
Выкладывайте, посмотрим.
Сообщение Добавлено: Ср июл 28, 2021 16:03
  Заголовок сообщения:  Re: Forth over Arduino  Ответить с цитатой
Victor__v писал(а):
Total Vacuum писал(а):
Еще загорелся идеей создания forth для x86 с такими же безразмерными ячейками стека, но это не вопрос ближайшего будущего... :)


Тут ООП или его подобие пилить придётся.
А ещё сборку мусора)


Сборку мусора - не так уж и сложно, как показала практика. Есть рабочий прототип с динамической типизацией значений на стеке; если интересно, выложу на форуме
Сообщение Добавлено: Ср июл 28, 2021 15:38
  Заголовок сообщения:  Re: Forth over Arduino  Ответить с цитатой
Total Vacuum писал(а):
Еще загорелся идеей создания forth для x86 с такими же безразмерными ячейками стека, но это не вопрос ближайшего будущего... :)


Тут ООП или его подобие пилить придётся.
А ещё сборку мусора)
Сообщение Добавлено: Ср июл 28, 2021 14:18
  Заголовок сообщения:  Re: Forth over Arduino  Ответить с цитатой
Отличная новость! У меня тут лежит парочка плат платформы Espruino (которые с JavaScript). У них есть еще вполне красивые смарт-часы bangle.js (но мне пока интереснее "таблетка" puck.js). Форт внутри как способ оперативно управлять всей набортной периферией - идеально. Для самих Ардуино это уже совершенно наглядно - любое изменение константы или цепочка действий заставляет пересобирать проект и заново программировать все (с сопутствующим закрыть-открыть терминал, чтобы не мешал загрузке). Неудобно. Посылать строки Форта в запущенный интерпретатор - гораздо лучше.
Сообщение Добавлено: Ср июл 28, 2021 01:20
  Заголовок сообщения:  Re: Forth over Arduino  Ответить с цитатой
Поковырял свою поделку пару дней, в первом приближении видно, что Форт в javascript (и, соответственно, в браузер) вполне себе впихуем... :) Да, пока еще всё сырое, а некоторые вещи полностью отсутствуют или в зачаточном состоянии. Да и сам javascript я практически не знаю, да еще и забыл... :) Так что на данный момент вариант с компиляцией кода средствами javascript работает медленнее, чем для такой же программы, но скомпилированной "на берегу" при помощи портативного транслятора "forth=>javascript":
http://totalvacuum.ru/3d.htm versus http://totalvacuum.ru/jforth3d.htm \ можно бродить при помощи кнопок asdw или стрелок, удобнее зажать w или стрелку вверх, а направление движения менять при помощи мыши
или
http://totalvacuum.ru/haiku2.htm vs http://totalvacuum.ru/jforthh2.htm

Использовал такие интересные "фишки" javascript:
- т.к. js - язык с динамической типизацией, то одна и та же переменная может в какой-то момент времени содержать строку, а в полночь превратиться в тыкву массив, функцию и т.д. Поэтому у нас будет необычный стек с блэкджеком и плюшками. Ячейки не имеют какой-то фиксированной разрядности. Число, строка, замысловатое ругательство? Все, что не найдено в словаре, пихается в стек и занимает там ровно одну ячейку. Непривычно, но с другой стороны очень удобно: значения читаются/записываются целиком при помощи слов @/!, а для вывода используется одно-единственное слово .;
- js умеет "на лету" конструировать функции из строки:
Код:
let mul = new Function ('a,b','return a*b;');
let x = mul (3,4); // x = 12
Это позволяет организовать трансляцию слов прямо в подпрограммный шитый код, только в качестве примитивных машинных инструкций здесь будут использоваться вызовы функций и высоуровневые управляющие конструкции if/while/и т.д.;
- в js имеется возможность доступа к элементам массива не только по индексу, но и по имени. Это дает возможность практически даром организовать словарь:
Код:
execute['mul'] = new Function ('', '...');
execute['div'] = new Function ('', '...');
..., а затем использовать слова из словаря
Код:
execute['mul']();
execute['div']();
Т.е. тут можно обойтись без списков, поиска и прочих прелестей, характерных для работы со словарями
- еще узнал, что в js, оказывается, можно делить на 0, если очень хочется. В результате получается Infinity, но пока это не пригодилось... :)

На данный момент имеется сконструированное из говна и палок ядро Форт размером в пару-тройку килобайт (пример jforth3d.htm весит в районе 10K, но там больше половины занимает неоптимизированный исходник на Форте, т.к. переводил исходник с Си на Форт практически дословно), которое, тем не менее, в каком-то виде уже работает. Хотя, повторюсь, имеются определенные отличия от "классического" Форта:
- ячейки стека/области данных неопределенной разрядности;
- нестандартные управляющие конструкции и уже традиционно нетрадиционные строки вида "string";
- "для галочки" реализовал immediate и create does>, правда does> сейчас работает неправильно в ситуации с цепочками does> в одном определении
Код:
: abc ... does> ... does> ... does> ... ;,
но с простыми ситуациями типа
Код:
: constant create , does> @ ;
справляется. Пока лень разбираться... :)
-
Код:
: "onmousemove" ... ; \ объявление обработчика события onmousemove;
-
Код:
: 1000 ... ; \ объявление безымянного слова, которое будет запускаться по таймеру каждые 1000мс;
- и т.д. и т.п.

Так что, когда появится свободное время, буду доводить до ума. Словил себя на мысли, что forth-over-javascript - это едва ли не единственный способ получить форт-всегда-под-рукой, ведь браузеры есть и в компьютере, и в телефоне, а встроенный в них javascript работает везде примерно одинаково. А кроме того, этот вариант является одним из самых простых в реализации, т.к. многие вещи сильно упрощаются (работа со словарем, вещественная математика, графика, интернет и т.д.), а некоторые вовсе становятся ненужными. Похожие приемы сработают и в других скриптовых языках (php, python и д.р.) или в том же Лиспе, но все-таки javascript в этом плане удобнее.
Еще загорелся идеей создания forth для x86 с такими же безразмерными ячейками стека, но это не вопрос ближайшего будущего... :)
Сообщение Добавлено: Ср июл 28, 2021 00:43
  Заголовок сообщения:  Re: Forth over Arduino  Ответить с цитатой
Если рассматривать Форт как полуфабрикат - да, сразу проблема "нет последователей и учеников". Только надо самому писать конечные проекты, а не захламлять и дальше полуфабрикатами помойку opensource. Форт как модуль проекта вполне смотрится.
Сообщение Добавлено: Чт июл 08, 2021 19:44
  Заголовок сообщения:  Re: Forth over Arduino  Ответить с цитатой
Total Vacuum писал(а):
nested IF умиляет... :D

Кстати, Форт вполне может быть over что угодно, взять, например, тот же JavaScript, который в браузерах обитает. Главный вопрос тут в возможности и удобстве вызова и использования стандартных библиотечных функций и констант.

Да, конечно можно, но вопрос в том кто это будет использовать и когда при незначительной базе пользователей и интереса к Форт.

P.S. И, да Forth на JS в разных вариантах есть в разных исполнениях.
Сообщение Добавлено: Чт июл 08, 2021 18:43
  Заголовок сообщения:  Re: Forth over Arduino  Ответить с цитатой
Wlad писал(а):
За три года пара-тройка человек написала и отладила систему с функционалом, который потом так и не был достигнут и повторён (по объему, качеству, "охвату" и способности к расширению), коллективом из 15-20 человек в течение 16 лет на "более правильном и современном" Си++.

Видимо, тут еще вопрос мотивации. Если пара-тройка - это заинтересованные и погруженные в задачу люди, то они просто на кураже могли написать такое, что было лень делать "нанятым по объявлению".
Сообщение Добавлено: Чт июл 08, 2021 13:03
  Заголовок сообщения:  Re: Forth over Arduino  Ответить с цитатой
Hishnik писал(а):
...В этом случае тащить в проект странную технологию - это заложить мощную мину замедленного действия, на которую потом будут кивать все окружающие при возникновении малейших проблем. Даже если программист будет делить на ноль и выходить за пределы массивов, претензии будут к форт-процессору - на всякий случай.
сразу вспоминается история с применением Лиспа в НАСовских проектах, посвящённых написанию 'универсальной системы управления для космических аппаратов. За три года пара-тройка человек написала и отладила систему с функционалом, который потом так и не был достигнут и повторён (по объему, качеству, "охвату" и способности к расширению), коллективом из 15-20 человек в течение 16 лет на "более правильном и современном" Си++. Основные претензии были к Лиспу именно к его "неправильности, непривычности, необычности и нераспространённости"... :))))
В результате, никакого стандартного подхода и реализации так и не появилось, а всё свелось к тому, что каждый из подрядчиков поставляет свои КА с собственными реализациями стандартных задач навигации, коррекции, ориентации и управления.
Сообщение Добавлено: Чт июл 08, 2021 05:38
  Заголовок сообщения:  Re: Forth over Arduino  Ответить с цитатой
:D Небольшая проба пера, набросал на досуге пару примеров:
http://totalvacuum.ru/3d.htm
http://totalvacuum.ru/haiku.htm

В первом варианте в лоб перевел какой-то исходник с Си на Форт, никаких оптимизаций не делал, но все и так работает. Можно побродить при помощи кнопок asdw, стрелок и мышки. Во втором просто показывает координаты мыши, код кнопки или количество кадров в секунду.

У меня, правда, чуточку другой подход: программа на Форте сначала "компилируется" (в данном случае в htm с javascript на борту), а уж затем выполняется (в данном случае браузером). Но сути это не меняет: вариант с Фортом, который написан на голом браузерном javascript, точно так же будет работать.

upd. http://totalvacuum.ru/3dfx.htm \ добавил парочку спецэффектов, чтобы было страшнее, работает заметно медленнее, нужно оптимизировать \ :D
Сообщение Добавлено: Ср июл 07, 2021 20:27
  Заголовок сообщения:  Re: Forth over Arduino  Ответить с цитатой
Total Vacuum писал(а):
nested IF умиляет...

Ну, видимо control-flow stack был понят и отлажен :) Там еще "комментарии" миленько выглядят.

Total Vacuum писал(а):
Кстати, Форт вполне может быть over что угодно, взять, например, тот же JavaScript, который в браузерах обитает. Главный вопрос тут в возможности и удобстве вызова и использования стандартных библиотечных функций и констант.


Для Javascript есть интересная линейка модулей Espruino. Ждут очереди. Да и Питон небезынтересен в качестве платформы. Общая идея в том, чтобы не Форт "выращивать и дотягивать" до библиотечных функций, а сделать его в таком виде, чтобы можно было подключать как библиотеку к существующему приложению, управляя его выполнением. Для Arduino это крайне удобно, потому что консоль обрабатывается мгновенно, а каждая смена параметра (задержка или размер массива для приема данных) вызывает повторную компиляцию и программирование.
Сообщение Добавлено: Вт июл 06, 2021 18:36

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


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