Forth http://fforum.winglion.ru/ |
|
Forth over Arduino http://fforum.winglion.ru/viewtopic.php?f=39&t=3306 |
Страница 4 из 5 |
Автор: | KPG [ Вс июл 04, 2021 14:50 ] |
Заголовок сообщения: | Re: Forth over Arduino |
Building a tiny FORTH for an Arduino UNO in one week Цитата: The result: a tiny, mini, micro Forth. In portable C++
It has... basic arithmetic star-slash (double-word accurate muldiv) literals constants variables string printing reseting comments nested DO/LOOP comparisons nested IF/ELSE/THEN ...and of course, functions (Forth words) |
Автор: | Total Vacuum [ Вт июл 06, 2021 12:20 ] |
Заголовок сообщения: | Re: Forth over Arduino |
nested IF умиляет... Кстати, Форт вполне может быть over что угодно, взять, например, тот же JavaScript, который в браузерах обитает. Главный вопрос тут в возможности и удобстве вызова и использования стандартных библиотечных функций и констант. |
Автор: | Hishnik [ Вт июл 06, 2021 18:36 ] |
Заголовок сообщения: | Re: Forth over Arduino |
Total Vacuum писал(а): nested IF умиляет... Ну, видимо control-flow stack был понят и отлажен Там еще "комментарии" миленько выглядят. Total Vacuum писал(а): Кстати, Форт вполне может быть over что угодно, взять, например, тот же JavaScript, который в браузерах обитает. Главный вопрос тут в возможности и удобстве вызова и использования стандартных библиотечных функций и констант. Для Javascript есть интересная линейка модулей Espruino. Ждут очереди. Да и Питон небезынтересен в качестве платформы. Общая идея в том, чтобы не Форт "выращивать и дотягивать" до библиотечных функций, а сделать его в таком виде, чтобы можно было подключать как библиотеку к существующему приложению, управляя его выполнением. Для Arduino это крайне удобно, потому что консоль обрабатывается мгновенно, а каждая смена параметра (задержка или размер массива для приема данных) вызывает повторную компиляцию и программирование. |
Автор: | Total Vacuum [ Ср июл 07, 2021 20:27 ] |
Заголовок сообщения: | Re: Forth over Arduino |
Небольшая проба пера, набросал на досуге пару примеров: http://totalvacuum.ru/3d.htm http://totalvacuum.ru/haiku.htm В первом варианте в лоб перевел какой-то исходник с Си на Форт, никаких оптимизаций не делал, но все и так работает. Можно побродить при помощи кнопок asdw, стрелок и мышки. Во втором просто показывает координаты мыши, код кнопки или количество кадров в секунду. У меня, правда, чуточку другой подход: программа на Форте сначала "компилируется" (в данном случае в htm с javascript на борту), а уж затем выполняется (в данном случае браузером). Но сути это не меняет: вариант с Фортом, который написан на голом браузерном javascript, точно так же будет работать. upd. http://totalvacuum.ru/3dfx.htm \ добавил парочку спецэффектов, чтобы было страшнее, работает заметно медленнее, нужно оптимизировать \ |
Автор: | Wlad [ Чт июл 08, 2021 05:38 ] |
Заголовок сообщения: | Re: Forth over Arduino |
Hishnik писал(а): ...В этом случае тащить в проект странную технологию - это заложить мощную мину замедленного действия, на которую потом будут кивать все окружающие при возникновении малейших проблем. Даже если программист будет делить на ноль и выходить за пределы массивов, претензии будут к форт-процессору - на всякий случай. сразу вспоминается история с применением Лиспа в НАСовских проектах, посвящённых написанию 'универсальной системы управления для космических аппаратов. За три года пара-тройка человек написала и отладила систему с функционалом, который потом так и не был достигнут и повторён (по объему, качеству, "охвату" и способности к расширению), коллективом из 15-20 человек в течение 16 лет на "более правильном и современном" Си++. Основные претензии были к Лиспу именно к его "неправильности, непривычности, необычности и нераспространённости"... ))В результате, никакого стандартного подхода и реализации так и не появилось, а всё свелось к тому, что каждый из подрядчиков поставляет свои КА с собственными реализациями стандартных задач навигации, коррекции, ориентации и управления. |
Автор: | Hishnik [ Чт июл 08, 2021 13:03 ] |
Заголовок сообщения: | Re: Forth over Arduino |
Wlad писал(а): За три года пара-тройка человек написала и отладила систему с функционалом, который потом так и не был достигнут и повторён (по объему, качеству, "охвату" и способности к расширению), коллективом из 15-20 человек в течение 16 лет на "более правильном и современном" Си++. Видимо, тут еще вопрос мотивации. Если пара-тройка - это заинтересованные и погруженные в задачу люди, то они просто на кураже могли написать такое, что было лень делать "нанятым по объявлению". |
Автор: | KPG [ Чт июл 08, 2021 18:43 ] |
Заголовок сообщения: | Re: Forth over Arduino |
Total Vacuum писал(а): nested IF умиляет... Кстати, Форт вполне может быть over что угодно, взять, например, тот же JavaScript, который в браузерах обитает. Главный вопрос тут в возможности и удобстве вызова и использования стандартных библиотечных функций и констант. Да, конечно можно, но вопрос в том кто это будет использовать и когда при незначительной базе пользователей и интереса к Форт. P.S. И, да Forth на JS в разных вариантах есть в разных исполнениях. |
Автор: | Hishnik [ Чт июл 08, 2021 19:44 ] |
Заголовок сообщения: | Re: Forth over Arduino |
Если рассматривать Форт как полуфабрикат - да, сразу проблема "нет последователей и учеников". Только надо самому писать конечные проекты, а не захламлять и дальше полуфабрикатами помойку opensource. Форт как модуль проекта вполне смотрится. |
Автор: | Total Vacuum [ Ср июл 28, 2021 00:43 ] |
Заголовок сообщения: | 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;'); Это позволяет организовать трансляцию слов прямо в подпрограммный шитый код, только в качестве примитивных машинных инструкций здесь будут использоваться вызовы функций и высоуровневые управляющие конструкции if/while/и т.д.;let x = mul (3,4); // x = 12 - в js имеется возможность доступа к элементам массива не только по индексу, но и по имени. Это дает возможность практически даром организовать словарь: Код: execute['mul'] = new Function ('', '...'); ..., а затем использовать слова из словаря execute['div'] = new Function ('', '...'); Код: execute['mul'](); Т.е. тут можно обойтись без списков, поиска и прочих прелестей, характерных для работы со словарямиexecute['div'](); - еще узнал, что в js, оказывается, можно делить на 0, если очень хочется. В результате получается Infinity, но пока это не пригодилось... На данный момент имеется - ячейки стека/области данных неопределенной разрядности; - нестандартные управляющие конструкции и уже традиционно нетрадиционные строки вида "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 с такими же безразмерными ячейками стека, но это не вопрос ближайшего будущего... |
Автор: | Hishnik [ Ср июл 28, 2021 01:20 ] |
Заголовок сообщения: | Re: Forth over Arduino |
Отличная новость! У меня тут лежит парочка плат платформы Espruino (которые с JavaScript). У них есть еще вполне красивые смарт-часы bangle.js (но мне пока интереснее "таблетка" puck.js). Форт внутри как способ оперативно управлять всей набортной периферией - идеально. Для самих Ардуино это уже совершенно наглядно - любое изменение константы или цепочка действий заставляет пересобирать проект и заново программировать все (с сопутствующим закрыть-открыть терминал, чтобы не мешал загрузке). Неудобно. Посылать строки Форта в запущенный интерпретатор - гораздо лучше. |
Автор: | Victor__v [ Ср июл 28, 2021 14:18 ] |
Заголовок сообщения: | Re: Forth over Arduino |
Total Vacuum писал(а): Еще загорелся идеей создания forth для x86 с такими же безразмерными ячейками стека, но это не вопрос ближайшего будущего... Тут ООП или его подобие пилить придётся. А ещё сборку мусора) |
Автор: | zma [ Ср июл 28, 2021 15:38 ] |
Заголовок сообщения: | Re: Forth over Arduino |
Victor__v писал(а): Total Vacuum писал(а): Еще загорелся идеей создания forth для x86 с такими же безразмерными ячейками стека, но это не вопрос ближайшего будущего... Тут ООП или его подобие пилить придётся. А ещё сборку мусора) Сборку мусора - не так уж и сложно, как показала практика. Есть рабочий прототип с динамической типизацией значений на стеке; если интересно, выложу на форуме |
Автор: | Victor__v [ Ср июл 28, 2021 16:03 ] |
Заголовок сообщения: | Re: Forth over Arduino |
Выкладывайте, посмотрим. |
Автор: | Total Vacuum [ Ср окт 06, 2021 16:03 ] |
Заголовок сообщения: | Re: Forth over Arduino |
Починил-таки does>, добавил edit и кнопку run... Теперь Код: : 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... Всё управление "персонажем" при помощи мыши... upd. Тут почти то же самое, но персонаж бегает по полю сам, при каждом ударе о стену направление движения и другие параметры меняются случайным образом: http://totalvacuum.ru/sky3d.htm Остановить самоубийство о стену можно нажав мышекнопку... Возобновить бессмысленное и беспощадное блуждание по полю можно при помощи команды Код: 1 forward ! В смартфоне событие onmousedown не срабатывает (в отличие от onmouseup), но вместо него вроде как можно использовать что-то типаКод: : "ontouchstart" 1 forward ! ; А вот еще небольшой пример: http://totalvacuum.ru/fft.htm Переделал стек и область данных под комплексные числа, добавил слово i, которое кладет в стек мнимую единицу, сделал пока еще корявый литературный перевод си-шной реализации быстрого преобразования Фурье, нагло сворованной с rosetta code... А дальше замешиваем 2 синуса, берем косинус в качестве оконной функции и рисуем спектр этого безобразия: http://totalvacuum.ru/spectrum.htm : "ontouchend" 0 forward ! ; Вообще, удобный онлайн-полигон для обкатки идей и алгоритмов получается... |
Автор: | KPG [ Вс дек 12, 2021 03:30 ] |
Заголовок сообщения: | Re: Forth over Arduino |
https://arduino-forth.com/#menu-idExemples - раздел примеров сайта P.S. Сообщения от Chu на форуме roboforum по amforth |
Страница 4 из 5 | Часовой пояс: UTC + 3 часа [ Летнее время ] |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |