Автор |
Сообщение |
|
|
Заголовок сообщения: |
Re: Forth over Arduino |
|
|
Ну, в принципе, включение вывода как GPIO и должно отключать режимы специального назначения. Со скоростью еще определенный резерв в том, что вычисление digitalPinToPort(pin) каждый раз при выводе - это вынужденная дань подходу Arduino как таковому. Просто чтобы "вывод в pin 13" всегда был зажиганием светодиода. Соответственно, для разработчиков это определенная головная боль, чтобы по аргументу 13 понять, где на их плате соответствующий регистр IO в МК.
Я сейчас жду еще одну интересную платформу на ESP32: M5Stack Core2 ESP32 IoT Памяти тут побольше, поэтому и разместить всякого тоже можно. Кроме того, чем больше памяти задействовано, тем дольше грузится прошивка, что опять-таки происходит при каждой перекомпиляции исходных текстов, и избавиться от части этого можно как раз с интерпретатором, работающим внутри 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, но пока не проверял.
Возможно, кому-нибудь будет полезно:
Обнаружил, что на ESP8266 ардуиновская digitalWrite перед собственно установкой уровня пина ещё отключает на нём ШИМ и генерацию импульсов (которые могли быть запущены функциями analogWrite и tone соответственно). При большом числе вызовов эти вспомогательные действия могут занимать заметное время.
Cоорудил макросы, которые просто устанавливают указанный уровень на пине и работают значительно быстрее: [code]#define pinHigh(pin) (*portOutputRegister(digitalPinToPort(pin)) |= digitalPinToBitMask(pin)) #define pinLow(pin) (*portOutputRegister(digitalPinToPort(pin)) &= ~digitalPinToBitMask(pin))[/code]
Скорее всего, будет работать и под ESP32, но пока не проверял.
|
|
|
|
Добавлено: Пн дек 25, 2023 00:54 |
|
|
|
|
|
Заголовок сообщения: |
Re: Forth over Arduino |
|
|
[url=https://arduino-forth.com/#menu-idExemples]https://arduino-forth.com/#menu-idExemples - раздел примеров сайта[/url]
P.S. [url=http://roboforum.ru/forum58/topic4406-60.html]Сообщения от Chu на форуме roboforum по amforth[/url]
|
|
|
|
Добавлено: Вс дек 12, 2021 03:30 |
|
|
|
|
|
Заголовок сообщения: |
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 ! ; : "ontouchend" 0 forward ! ; А вот еще небольшой пример: http://totalvacuum.ru/fft.htm Переделал стек и область данных под комплексные числа, добавил слово i, которое кладет в стек мнимую единицу, сделал пока еще корявый литературный перевод си-шной реализации быстрого преобразования Фурье, нагло сворованной с rosetta code... А дальше замешиваем 2 синуса, берем косинус в качестве оконной функции и рисуем спектр этого безобразия: http://totalvacuum.ru/spectrum.htm Вообще, удобный онлайн-полигон для обкатки идей и алгоритмов получается...
Починил-таки does>, добавил edit и кнопку run... :D Теперь [code]: abc create does> 0 + @ does> 1 + @ does> 2 + @ ; abc c 'a' , 'b' , 'c' , c . c . c . c . c .[/code]выводит[code]a b c c c[/code]Форт-исходник 3D-бродилки теперь "зашит" не в текстовой переменной, а в edit-е... По кнопке run содержимое edit-а интерпретируется/компилируется, а сам edit очищается и готов к приему новых порций кода... Есть еще нижний edit, куда добавляется уже обработанный код... Лежит тут: [url]http://totalvacuum.ru/online3d.htm[/url] Т.е. фактически весь пример влез в 300 строк кода... Из них 50 строк - javascript-движок транслятора, еще 50 - объявления базовых слов ядра с "ассемблерными" вставками javascript-кода... Таким образом, получили компактный, но в то же время комфортный для работы набор примитивов, примерно 30-40 шт. (тут есть избыточность, но пусть будет), на базе которых можно строить все остальное:[code]( : ; immediate create does> allot , variable constant array if else then while repeat do loop dup swap pick drop + - * = < > & | ^ ! @ . putpixel redraw 123 "string" 'c' `javascript` )[/code]Ну а дальше практически чистый форт-код 3D-бродилки... Причем сам форт-код не оптимизирован, т.е. это "дословный" перевод кода 3D-бродилки с Си на Форт... Когда появится время и желание, утрамбую, ну а пока весит 9K... :D Всё управление "персонажем" при помощи мыши... :D
upd. Тут почти то же самое, но персонаж бегает по полю сам, при каждом ударе о стену направление движения и другие параметры меняются случайным образом: [url]http://totalvacuum.ru/sky3d.htm[/url] Остановить самоубийство о стену можно нажав мышекнопку... Возобновить бессмысленное и беспощадное блуждание по полю можно при помощи команды [code]1 forward ![/code]В смартфоне событие onmousedown не срабатывает (в отличие от onmouseup), но вместо него вроде как можно использовать что-то типа[code]: "ontouchstart" 1 forward ! ; : "ontouchend" 0 forward ! ;[/code]А вот еще небольшой пример: [url]http://totalvacuum.ru/fft.htm[/url] Переделал стек и область данных под комплексные числа, добавил слово i, которое кладет в стек мнимую единицу, сделал пока еще корявый литературный перевод си-шной реализации быстрого преобразования Фурье, нагло сворованной с [url=http://rosettacode.org/wiki/Fast_Fourier_transform#C]rosetta code[/url]... А дальше замешиваем 2 синуса, берем косинус в качестве оконной функции и рисуем спектр этого безобразия: [url]http://totalvacuum.ru/spectrum.htm[/url] :D
Вообще, удобный онлайн-полигон для обкатки идей и алгоритмов получается...
|
|
|
|
Добавлено: Ср окт 06, 2021 16:03 |
|
|
|
|
|
Заголовок сообщения: |
Re: Forth over Arduino |
|
|
Выкладывайте, посмотрим.
Выкладывайте, посмотрим.
|
|
|
|
Добавлено: Ср июл 28, 2021 16:03 |
|
|
|
|
|
Заголовок сообщения: |
Re: Forth over Arduino |
|
|
Victor__v писал(а): Total Vacuum писал(а): Еще загорелся идеей создания forth для x86 с такими же безразмерными ячейками стека, но это не вопрос ближайшего будущего... Тут ООП или его подобие пилить придётся. А ещё сборку мусора) Сборку мусора - не так уж и сложно, как показала практика. Есть рабочий прототип с динамической типизацией значений на стеке; если интересно, выложу на форуме
[quote="Victor__v"][quote="Total Vacuum"]Еще загорелся идеей создания forth для x86 с такими же безразмерными ячейками стека, но это не вопрос ближайшего будущего... :)[/quote]
Тут ООП или его подобие пилить придётся. А ещё сборку мусора)[/quote]
Сборку мусора - не так уж и сложно, как показала практика. Есть рабочий прототип с динамической типизацией значений на стеке; если интересно, выложу на форуме
|
|
|
|
Добавлено: Ср июл 28, 2021 15:38 |
|
|
|
|
|
Заголовок сообщения: |
Re: Forth over Arduino |
|
|
Total Vacuum писал(а): Еще загорелся идеей создания forth для x86 с такими же безразмерными ячейками стека, но это не вопрос ближайшего будущего... Тут ООП или его подобие пилить придётся. А ещё сборку мусора)
[quote="Total Vacuum"]Еще загорелся идеей создания forth для x86 с такими же безразмерными ячейками стека, но это не вопрос ближайшего будущего... :)[/quote]
Тут ООП или его подобие пилить придётся. А ещё сборку мусора)
|
|
|
|
Добавлено: Ср июл 28, 2021 14:18 |
|
|
|
|
|
Заголовок сообщения: |
Re: Forth over Arduino |
|
|
Отличная новость! У меня тут лежит парочка плат платформы Espruino (которые с JavaScript). У них есть еще вполне красивые смарт-часы bangle.js (но мне пока интереснее "таблетка" puck.js). Форт внутри как способ оперативно управлять всей набортной периферией - идеально. Для самих Ардуино это уже совершенно наглядно - любое изменение константы или цепочка действий заставляет пересобирать проект и заново программировать все (с сопутствующим закрыть-открыть терминал, чтобы не мешал загрузке). Неудобно. Посылать строки Форта в запущенный интерпретатор - гораздо лучше.
Отличная новость! У меня тут лежит парочка плат платформы 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 с такими же безразмерными ячейками стека, но это не вопрос ближайшего будущего...
Поковырял свою поделку пару дней, в первом приближении видно, что Форт в javascript (и, соответственно, в браузер) вполне себе впихуем... :) Да, пока еще всё сырое, а некоторые вещи полностью отсутствуют или в зачаточном состоянии. Да и сам javascript я практически не знаю, да еще и забыл... :) Так что на данный момент вариант с компиляцией кода средствами javascript работает медленнее, чем для такой же программы, но скомпилированной "на берегу" при помощи портативного транслятора "forth=>javascript": [url]http://totalvacuum.ru/3d.htm[/url] [b]versus[/b] [url]http://totalvacuum.ru/jforth3d.htm[/url] \ можно бродить при помощи кнопок asdw или стрелок, удобнее зажать w или стрелку вверх, а направление движения менять при помощи мыши или [url]http://totalvacuum.ru/haiku2.htm[/url] [b]vs[/b] [url]http://totalvacuum.ru/jforthh2.htm[/url]
Использовал такие интересные "фишки" javascript: - т.к. js - язык с динамической типизацией, то одна и та же переменная может в какой-то момент времени содержать строку, а в полночь превратиться в [s]тыкву[/s] массив, функцию и т.д. Поэтому у нас будет необычный стек с блэкджеком и плюшками. Ячейки не имеют какой-то фиксированной разрядности. Число, строка, замысловатое ругательство? Все, что не найдено в словаре, пихается в стек и занимает там ровно одну ячейку. Непривычно, но с другой стороны очень удобно: значения читаются/записываются целиком при помощи слов @/!, а для вывода используется одно-единственное слово .; - js умеет "на лету" конструировать функции из строки: [code]let mul = new Function ('a,b','return a*b;'); let x = mul (3,4); // x = 12 [/code]Это позволяет организовать трансляцию слов прямо в подпрограммный шитый код, только в качестве примитивных машинных инструкций здесь будут использоваться вызовы функций и высоуровневые управляющие конструкции if/while/и т.д.; - в js имеется возможность доступа к элементам массива не только по индексу, но и по имени. Это дает возможность практически даром организовать словарь: [code]execute['mul'] = new Function ('', '...'); execute['div'] = new Function ('', '...'); [/code]..., а затем использовать слова из словаря [code]execute['mul'](); execute['div'](); [/code]Т.е. тут можно обойтись без списков, поиска и прочих прелестей, характерных для работы со словарями - еще узнал, что в js, оказывается, можно делить на 0, если очень хочется. В результате получается Infinity, но пока это не пригодилось... :)
На данный момент имеется [s]сконструированное из говна и палок[/s] ядро Форт размером в пару-тройку килобайт (пример jforth3d.htm весит в районе 10K, но там больше половины занимает неоптимизированный исходник на Форте, т.к. переводил исходник с Си на Форт практически дословно), которое, тем не менее, в каком-то виде уже работает. Хотя, повторюсь, имеются определенные отличия от "классического" Форта: - ячейки стека/области данных неопределенной разрядности; - нестандартные управляющие конструкции и уже традиционно нетрадиционные строки вида "string"; - "для галочки" реализовал immediate и create does>, правда does> сейчас работает неправильно в ситуации с цепочками does> в одном определении [code]: abc ... does> ... does> ... does> ... ;, [/code]но с простыми ситуациями типа [code]: constant create , does> @ ; [/code]справляется. Пока лень разбираться... :) - [code]: "onmousemove" ... ; \ объявление обработчика события onmousemove;[/code]- [code]: 1000 ... ; \ объявление безымянного слова, которое будет запускаться по таймеру каждые 1000мс;[/code]- и т.д. и т.п.
Так что, когда появится свободное время, буду доводить до ума. Словил себя на мысли, что forth-over-javascript - это едва ли не единственный способ получить форт-всегда-под-рукой, ведь браузеры есть и в компьютере, и в телефоне, а встроенный в них javascript работает везде примерно одинаково. А кроме того, этот вариант является одним из самых простых в реализации, т.к. многие вещи сильно упрощаются (работа со словарем, вещественная математика, графика, интернет и т.д.), а некоторые вовсе становятся ненужными. Похожие приемы сработают и в других скриптовых языках (php, python и д.р.) или в том же Лиспе, но все-таки javascript в этом плане удобнее. Еще загорелся идеей создания forth для x86 с такими же безразмерными ячейками стека, но это не вопрос ближайшего будущего... :)
|
|
|
|
Добавлено: Ср июл 28, 2021 00:43 |
|
|
|
|
|
Заголовок сообщения: |
Re: Forth over Arduino |
|
|
Если рассматривать Форт как полуфабрикат - да, сразу проблема "нет последователей и учеников". Только надо самому писать конечные проекты, а не захламлять и дальше полуфабрикатами помойку opensource. Форт как модуль проекта вполне смотрится.
Если рассматривать Форт как полуфабрикат - да, сразу проблема "нет последователей и учеников". Только надо самому писать конечные проекты, а не захламлять и дальше полуфабрикатами помойку opensource. Форт как модуль проекта вполне смотрится.
|
|
|
|
Добавлено: Чт июл 08, 2021 19:44 |
|
|
|
|
|
Заголовок сообщения: |
Re: Forth over Arduino |
|
|
Total Vacuum писал(а): nested IF умиляет... Кстати, Форт вполне может быть over что угодно, взять, например, тот же JavaScript, который в браузерах обитает. Главный вопрос тут в возможности и удобстве вызова и использования стандартных библиотечных функций и констант. Да, конечно можно, но вопрос в том кто это будет использовать и когда при незначительной базе пользователей и интереса к Форт. P.S. И, да Forth на JS в разных вариантах есть в разных исполнениях.
[quote="Total Vacuum"]nested IF умиляет... :D
Кстати, Форт вполне может быть over что угодно, взять, например, тот же JavaScript, который в браузерах обитает. Главный вопрос тут в возможности и удобстве вызова и использования стандартных библиотечных функций и констант.[/quote] Да, конечно можно, но вопрос в том кто это будет использовать и когда при незначительной базе пользователей и интереса к Форт.
P.S. И, да Forth на JS в разных вариантах есть в разных исполнениях.
|
|
|
|
Добавлено: Чт июл 08, 2021 18:43 |
|
|
|
|
|
Заголовок сообщения: |
Re: Forth over Arduino |
|
|
Wlad писал(а): За три года пара-тройка человек написала и отладила систему с функционалом, который потом так и не был достигнут и повторён (по объему, качеству, "охвату" и способности к расширению), коллективом из 15-20 человек в течение 16 лет на "более правильном и современном" Си++. Видимо, тут еще вопрос мотивации. Если пара-тройка - это заинтересованные и погруженные в задачу люди, то они просто на кураже могли написать такое, что было лень делать "нанятым по объявлению".
[quote="Wlad"]За три года пара-тройка человек написала и отладила систему с функционалом, который потом так и не был достигнут и повторён (по объему, качеству, "охвату" и способности к расширению), коллективом из 15-20 человек в течение 16 лет на "более правильном и современном" Си++. [/quote] Видимо, тут еще вопрос мотивации. Если пара-тройка - это заинтересованные и погруженные в задачу люди, то они просто на кураже могли написать такое, что было лень делать "нанятым по объявлению".
|
|
|
|
Добавлено: Чт июл 08, 2021 13:03 |
|
|
|
|
|
Заголовок сообщения: |
Re: Forth over Arduino |
|
|
Hishnik писал(а): ...В этом случае тащить в проект странную технологию - это заложить мощную мину замедленного действия, на которую потом будут кивать все окружающие при возникновении малейших проблем. Даже если программист будет делить на ноль и выходить за пределы массивов, претензии будут к форт-процессору - на всякий случай. сразу вспоминается история с применением Лиспа в НАСовских проектах, посвящённых написанию 'универсальной системы управления для космических аппаратов. За три года пара-тройка человек написала и отладила систему с функционалом, который потом так и не был достигнут и повторён (по объему, качеству, "охвату" и способности к расширению), коллективом из 15-20 человек в течение 16 лет на "более правильном и современном" Си++. Основные претензии были к Лиспу именно к его "неправильности, непривычности, необычности и нераспространённости"... )) В результате, никакого стандартного подхода и реализации так и не появилось, а всё свелось к тому, что каждый из подрядчиков поставляет свои КА с собственными реализациями стандартных задач навигации, коррекции, ориентации и управления.
[quote="Hishnik"]...В этом случае тащить в проект странную технологию - это заложить мощную мину замедленного действия, на которую потом будут кивать все окружающие при возникновении малейших проблем. Даже если программист будет делить на ноль и выходить за пределы массивов, [b]претензии будут к форт-процессору - на всякий случай[/b].[/quote]сразу вспоминается история с применением Лиспа в НАСовских проектах, посвящённых написанию 'универсальной системы управления для космических аппаратов. За три года пара-тройка человек написала и отладила систему с функционалом, который потом так и не был достигнут и повторён (по объему, качеству, "охвату" и способности к расширению), коллективом из 15-20 человек в течение 16 лет на "более правильном и современном" Си++. Основные претензии были к Лиспу именно к его "неправильности, непривычности, необычности и нераспространённости"... :)))) В результате, никакого стандартного подхода и реализации так и не появилось, а всё свелось к тому, что каждый из подрядчиков поставляет свои КА с собственными реализациями стандартных задач навигации, коррекции, ориентации и управления.
|
|
|
|
Добавлено: Чт июл 08, 2021 05:38 |
|
|
|
|
|
Заголовок сообщения: |
Re: Forth over Arduino |
|
|
Небольшая проба пера, набросал на досуге пару примеров: http://totalvacuum.ru/3d.htmhttp://totalvacuum.ru/haiku.htmВ первом варианте в лоб перевел какой-то исходник с Си на Форт, никаких оптимизаций не делал, но все и так работает. Можно побродить при помощи кнопок asdw, стрелок и мышки. Во втором просто показывает координаты мыши, код кнопки или количество кадров в секунду. У меня, правда, чуточку другой подход: программа на Форте сначала "компилируется" (в данном случае в htm с javascript на борту), а уж затем выполняется (в данном случае браузером). Но сути это не меняет: вариант с Фортом, который написан на голом браузерном javascript, точно так же будет работать. upd. http://totalvacuum.ru/3dfx.htm \ добавил парочку спецэффектов, чтобы было страшнее, работает заметно медленнее, нужно оптимизировать \
:D Небольшая проба пера, набросал на досуге пару примеров: [url]http://totalvacuum.ru/3d.htm[/url] [url]http://totalvacuum.ru/haiku.htm[/url]
В первом варианте в лоб перевел какой-то исходник с Си на Форт, никаких оптимизаций не делал, но все и так работает. Можно побродить при помощи кнопок asdw, стрелок и мышки. Во втором просто показывает координаты мыши, код кнопки или количество кадров в секунду.
У меня, правда, чуточку другой подход: программа на Форте сначала "компилируется" (в данном случае в htm с javascript на борту), а уж затем выполняется (в данном случае браузером). Но сути это не меняет: вариант с Фортом, который написан на голом браузерном javascript, точно так же будет работать.
upd. [url]http://totalvacuum.ru/3dfx.htm[/url] \ добавил парочку спецэффектов, чтобы было страшнее, работает заметно медленнее, нужно оптимизировать \ :D
|
|
|
|
Добавлено: Ср июл 07, 2021 20:27 |
|
|
|
|
|
Заголовок сообщения: |
Re: Forth over Arduino |
|
|
Total Vacuum писал(а): nested IF умиляет... Ну, видимо control-flow stack был понят и отлажен Там еще "комментарии" миленько выглядят. Total Vacuum писал(а): Кстати, Форт вполне может быть over что угодно, взять, например, тот же JavaScript, который в браузерах обитает. Главный вопрос тут в возможности и удобстве вызова и использования стандартных библиотечных функций и констант. Для Javascript есть интересная линейка модулей Espruino. Ждут очереди. Да и Питон небезынтересен в качестве платформы. Общая идея в том, чтобы не Форт "выращивать и дотягивать" до библиотечных функций, а сделать его в таком виде, чтобы можно было подключать как библиотеку к существующему приложению, управляя его выполнением. Для Arduino это крайне удобно, потому что консоль обрабатывается мгновенно, а каждая смена параметра (задержка или размер массива для приема данных) вызывает повторную компиляцию и программирование.
[quote="Total Vacuum"]nested IF умиляет... [/quote] Ну, видимо control-flow stack был понят и отлажен :) Там еще "комментарии" миленько выглядят.
[quote="Total Vacuum"]Кстати, Форт вполне может быть over что угодно, взять, например, тот же JavaScript, который в браузерах обитает. Главный вопрос тут в возможности и удобстве вызова и использования стандартных библиотечных функций и констант.[/quote]
Для Javascript есть интересная линейка модулей Espruino. Ждут очереди. Да и Питон небезынтересен в качестве платформы. Общая идея в том, чтобы не Форт "выращивать и дотягивать" до библиотечных функций, а сделать его в таком виде, чтобы можно было подключать как библиотеку к существующему приложению, управляя его выполнением. Для Arduino это крайне удобно, потому что консоль обрабатывается мгновенно, а каждая смена параметра (задержка или размер массива для приема данных) вызывает повторную компиляцию и программирование.
|
|
|
|
Добавлено: Вт июл 06, 2021 18:36 |
|
|
|
|