Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Вт ноя 30, 2021 22:33

...
Google Search
Forth-FAQ Spy Grafic

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




Начать новую тему Ответить на тему  [ Сообщений: 59 ]  На страницу Пред.  1, 2, 3, 4
Автор Сообщение
 Заголовок сообщения: Re: Forth over Arduino
СообщениеДобавлено: Вс июл 04, 2021 14:50 
Не в сети

Зарегистрирован: Пн янв 07, 2013 22:40
Сообщения: 1523
Благодарил (а): 4 раз.
Поблагодарили: 55 раз.
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)


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

Зарегистрирован: Ср июл 03, 2019 11:10
Сообщения: 187
Откуда: Москва
Благодарил (а): 33 раз.
Поблагодарили: 6 раз.
nested IF умиляет... :D

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


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

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7320
Благодарил (а): 21 раз.
Поблагодарили: 126 раз.
Total Vacuum писал(а):
nested IF умиляет...

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

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


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


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

Зарегистрирован: Ср июл 03, 2019 11:10
Сообщения: 187
Откуда: Москва
Благодарил (а): 33 раз.
Поблагодарили: 6 раз.
:D Небольшая проба пера, набросал на досуге пару примеров:
http://totalvacuum.ru/3d.htm
http://totalvacuum.ru/haiku.htm

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

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

upd. http://totalvacuum.ru/3dfx.htm \ добавил парочку спецэффектов, чтобы было страшнее, работает заметно медленнее, нужно оптимизировать \ :D


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

Зарегистрирован: Чт апр 26, 2007 21:09
Сообщения: 303
Благодарил (а): 12 раз.
Поблагодарили: 10 раз.
Hishnik писал(а):
...В этом случае тащить в проект странную технологию - это заложить мощную мину замедленного действия, на которую потом будут кивать все окружающие при возникновении малейших проблем. Даже если программист будет делить на ноль и выходить за пределы массивов, претензии будут к форт-процессору - на всякий случай.
сразу вспоминается история с применением Лиспа в НАСовских проектах, посвящённых написанию 'универсальной системы управления для космических аппаратов. За три года пара-тройка человек написала и отладила систему с функционалом, который потом так и не был достигнут и повторён (по объему, качеству, "охвату" и способности к расширению), коллективом из 15-20 человек в течение 16 лет на "более правильном и современном" Си++. Основные претензии были к Лиспу именно к его "неправильности, непривычности, необычности и нераспространённости"... :))))
В результате, никакого стандартного подхода и реализации так и не появилось, а всё свелось к тому, что каждый из подрядчиков поставляет свои КА с собственными реализациями стандартных задач навигации, коррекции, ориентации и управления.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Forth over Arduino
СообщениеДобавлено: Чт июл 08, 2021 13:03 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7320
Благодарил (а): 21 раз.
Поблагодарили: 126 раз.
Wlad писал(а):
За три года пара-тройка человек написала и отладила систему с функционалом, который потом так и не был достигнут и повторён (по объему, качеству, "охвату" и способности к расширению), коллективом из 15-20 человек в течение 16 лет на "более правильном и современном" Си++.

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Forth over Arduino
СообщениеДобавлено: Чт июл 08, 2021 18:43 
Не в сети

Зарегистрирован: Пн янв 07, 2013 22:40
Сообщения: 1523
Благодарил (а): 4 раз.
Поблагодарили: 55 раз.
Total Vacuum писал(а):
nested IF умиляет... :D

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

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

P.S. И, да Forth на JS в разных вариантах есть в разных исполнениях.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Forth over Arduino
СообщениеДобавлено: Чт июл 08, 2021 19:44 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7320
Благодарил (а): 21 раз.
Поблагодарили: 126 раз.
Если рассматривать Форт как полуфабрикат - да, сразу проблема "нет последователей и учеников". Только надо самому писать конечные проекты, а не захламлять и дальше полуфабрикатами помойку opensource. Форт как модуль проекта вполне смотрится.


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

Зарегистрирован: Ср июл 03, 2019 11:10
Сообщения: 187
Откуда: Москва
Благодарил (а): 33 раз.
Поблагодарили: 6 раз.
Поковырял свою поделку пару дней, в первом приближении видно, что Форт в 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 с такими же безразмерными ячейками стека, но это не вопрос ближайшего будущего... :)



За это сообщение автора Total Vacuum поблагодарил: Hishnik
Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Forth over Arduino
СообщениеДобавлено: Ср июл 28, 2021 01:20 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7320
Благодарил (а): 21 раз.
Поблагодарили: 126 раз.
Отличная новость! У меня тут лежит парочка плат платформы Espruino (которые с JavaScript). У них есть еще вполне красивые смарт-часы bangle.js (но мне пока интереснее "таблетка" puck.js). Форт внутри как способ оперативно управлять всей набортной периферией - идеально. Для самих Ардуино это уже совершенно наглядно - любое изменение константы или цепочка действий заставляет пересобирать проект и заново программировать все (с сопутствующим закрыть-открыть терминал, чтобы не мешал загрузке). Неудобно. Посылать строки Форта в запущенный интерпретатор - гораздо лучше.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Forth over Arduino
СообщениеДобавлено: Ср июл 28, 2021 14:18 
Не в сети

Зарегистрирован: Чт янв 07, 2016 19:14
Сообщения: 1143
Благодарил (а): 2 раз.
Поблагодарили: 11 раз.
Total Vacuum писал(а):
Еще загорелся идеей создания forth для x86 с такими же безразмерными ячейками стека, но это не вопрос ближайшего будущего... :)


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

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Forth over Arduino
СообщениеДобавлено: Ср июл 28, 2021 15:38 
Не в сети

Зарегистрирован: Пн янв 28, 2019 03:10
Сообщения: 141
Благодарил (а): 15 раз.
Поблагодарили: 9 раз.
Victor__v писал(а):
Total Vacuum писал(а):
Еще загорелся идеей создания forth для x86 с такими же безразмерными ячейками стека, но это не вопрос ближайшего будущего... :)


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


Сборку мусора - не так уж и сложно, как показала практика. Есть рабочий прототип с динамической типизацией значений на стеке; если интересно, выложу на форуме


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Forth over Arduino
СообщениеДобавлено: Ср июл 28, 2021 16:03 
Не в сети

Зарегистрирован: Чт янв 07, 2016 19:14
Сообщения: 1143
Благодарил (а): 2 раз.
Поблагодарили: 11 раз.
Выкладывайте, посмотрим.

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Forth over Arduino
СообщениеДобавлено: Ср окт 06, 2021 16:03 
Не в сети
Аватара пользователя

Зарегистрирован: Ср июл 03, 2019 11:10
Сообщения: 187
Откуда: Москва
Благодарил (а): 33 раз.
Поблагодарили: 6 раз.
Починил-таки 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

Вообще, удобный онлайн-полигон для обкатки идей и алгоритмов получается...


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

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


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

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


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

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