• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

ESP8266Forth

tretyakov_sa

Moderator
Команда форума
Есть любитель всяческой экзотики - я. Попробую.
Здорово!
Сразу нашел ошибку в описании слова spaces
В словаре код должен быть таким:

Код:
const PROGMEM char spaces_str[] = "spaces";
// ( n -- )
// if n is greater than zero, display n space
static void _spaces(void) {
  char n = (char) pop();
  while (n > 0) {
    print_P(sp_str);
    n--;
  }
}
 

Юрий Ботов

Moderator
Команда форума
Первые впечатления неоднозначные. Во первых я долго маялся с дисплейчиком, но тут проблема не форта а дисплейчика. Ну кто мог подумать что при наличии у него входа MISO на самом деле надо подключить соответствующий выход проца к входу SDA? Ну да бог с ними... заработало. Вторая особенность в том что указано подключить подсветку дисплея к одной из ног проца, чтобы ее включать/выключать. Но проц явно не осиливает питания подсветки. По уму тут надо чтото промежуточное - твердотельное реле или хотя-бы эмитерный повторитель.
Что криво в самом форте... Он занимает подозрительно много места, более 60 к, оставляет под расширение только около 20 к. Причем его словарь автор как бы прячет во флэш (зачем? если его оттуда все равно загрузят - это явный аттавизм ардуиновской версии). Работа с файлами ограничивается: прочитать содержимое корня флэшки и загрузить файл из флэшки. Правда есть полезная опция "autorun". Для выполнения при старте некого файла. Этого крайне мало. Хоть бы запись текущего словаря сделали. Ну или буфер в файл. Хоть какое то средство интерактивной разработки.
Так что поиграться - супер. Но в дело особо не пустишь. Особенно жалко выглядело подключение через wifi (там есть типа telnet (точнее raw) на 21 порту) - команда words (20 строк) выполняется снаружи почти минуту... Это форт? У меня голимый интерпретатор быстрее работает на telnet.

Впрочем есть идеи как это немного причесать. Будет время - развлекусь.
 

tretyakov_sa

Moderator
Команда форума
Посмотрел на реализации Forth на ESP8266 все это меня не порадовало.
Так, как давно интересуюсь этим языком, без конкретной задачи изучать его не интересно, решил написать свой Форт для ESP.
Возник вопрос, что если я, сделаю возможность использовать в определении нового слова, слово которое ещё не было определено? Обычно в любых Forth системах, это приводит к ошибки, так как компилятор не может создать правильный байт код. В моей реализации такой финт вполне возможен. С моей точки зрения это будет удобно, так как можно будет писать программу "сверху вниз".
Кто знает Форт, что вы думаете по этому поводу?
 

Сергей_Ф

Moderator
Команда форума
@tretyakov_sa вроде это явно запрещено стандартом. Во всяком случае ошибки будет отловить точно сложнее. А иногда и невозможно.
 

tretyakov_sa

Moderator
Команда форума
@tretyakov_sa вроде это явно запрещено стандартом. Во всяком случае ошибки будет отловить точно сложнее. А иногда и невозможно.
Так в чем сложность. Если попытаться выполнить слово которого нет в словаре, то будет сообщение "определите слово".
 

Сергей_Ф

Moderator
Команда форума
@tretyakov_sa ну, поскольку это все равно игрушка, делайте как считаете нужным. Сомневаюсь, что кто то будет пользоваться для реальной работы. Теперь это экзотика.
 

Юрий Ботов

Moderator
Команда форума
tretyakov_sa, помнится мне, в свое время в МГУ народ разрабатывал хитрый форт подобный язык DSSP одним из козырей которого как раз было "программирование сверху вниз" то есть возможность постепенной "детализации" слов. Это делалось добавлением "таблицы неопределенных ссылок", если не ошибаюсь это можно в подробностях почитать тут: trinarium/DSSP-C
 

Diskless

New member
Какая классная идея - использовать forth. Именно для таких модулей он будет нужен. В свое время в ЛГУ сделали forth для 580-го процессора. В 64Кб можно было сотворить даже тетрис. Причем их реализация была с сохранением ядра на дисках ЕС ЭВМ, поскольку работало все на ЕС 7970. Надо поискать - где то был код исходный. Если найду - выложу. Там даже обработка прерываний была.
 

nikolz

Well-known member
Какая классная идея - использовать forth. Именно для таких модулей он будет нужен. В свое время в ЛГУ сделали forth для 580-го процессора. В 64Кб можно было сотворить даже тетрис. Причем их реализация была с сохранением ядра на дисках ЕС ЭВМ, поскольку работало все на ЕС 7970. Надо поискать - где то был код исходный. Если найду - выложу. Там даже обработка прерываний была.
в свое время Попов сделал детекторный приемник.
 

tretyakov_sa

Moderator
Команда форума
Какая классная идея - использовать forth. Именно для таких модулей он будет нужен. В свое время в ЛГУ сделали forth для 580-го процессора. В 64Кб можно было сотворить даже тетрис. Причем их реализация была с сохранением ядра на дисках ЕС ЭВМ, поскольку работало все на ЕС 7970. Надо поискать - где то был код исходный. Если найду - выложу. Там даже обработка прерываний была.
Я думаю, что forth чрезвычайно хорошо подходит для реализации IoT устройств. Только подходить к его построению и тем более интерфейсу взаимодействия со старыми представлениями абсолютно не правильно.
Я попытался сделать первые шаги в этом направлении, но появились другие задачи и я пока отложил свои попытки.
Моя идея заключается в следующем. Хранить словарь прямо в файле файловой системы.
Попробовать, обойтись без байт кода. Так как словарное слово уже само по себе длинный байт код. Такой подход будет жрать больше памяти, но позволит обойтись без компиляции. На модуле сразу можно иметь Web терминал, без старинных попыток работать с помощью Serial и UDP терминалов. Куча места на файловой системе позволит сразу хранить все необходимые файлы программ. Включил модуль, открыл Web интерфейс и сразу пиши, что хочешь и сохраняй все на модуле. Esp гораздо мощнее, того компьютера на котором Чарльз Мур его придумал.
 

nikolz

Well-known member
Я думаю, что forth чрезвычайно хорошо подходит для реализации IoT устройств. Только подходить к его построению и тем более интерфейсу взаимодействия со старыми представлениями абсолютно не правильно.
Я попытался сделать первые шаги в этом направлении, но появились другие задачи и я пока отложил свои попытки.
Моя идея заключается в следующем. Хранить словарь прямо в файле файловой системы.
Попробовать, обойтись без байт кода. Так как словарное слово уже само по себе длинный байт код. Такой подход будет жрать больше памяти, но позволит обойтись без компиляции. На модуле сразу можно иметь Web терминал, без старинных попыток работать с помощью Serial и UDP терминалов. Куча места на файловой системе позволит сразу хранить все необходимые файлы программ. Включил модуль, открыл Web интерфейс и сразу пиши, что хочешь и сохраняй все на модуле. Esp гораздо мощнее, того компьютера на котором Чарльз Мур его придумал.
Прежде чем изобретать известное, можно для начала изучить реализацию виртуальной машины LUA и применение хэш-функций.
возможно узнаете что-то новое.
 

tretyakov_sa

Moderator
Команда форума
Прежде чем изобретать известное, можно для начала изучить реализацию виртуальной машины LUA и применение хэш-функций.
возможно узнаете что-то новое.
Дайте пример нормальной реализации Forth для ESP.
Вот когда изучают известное, а потом делают новое - получают тоже самое в другом виде. Вспоминаю одного деятеля у нас в КБ. Он говорил: Здесь нет ничего нового, и вообще за границей так не делают...
Когда Вы уже научитесь отвечать по делу? Не знаю как для других, но для меня ваши реплики обычно бесполезны. Убедительная просьба, отвечайте по делу, если есть что сказать.
 

Diskless

New member
Я думаю, что forth чрезвычайно хорошо подходит для реализации IoT устройств. Только подходить к его построению и тем более интерфейсу взаимодействия со старыми представлениями абсолютно не правильно.
Я попытался сделать первые шаги в этом направлении, но появились другие задачи и я пока отложил свои попытки.
Моя идея заключается в следующем. Хранить словарь прямо в файле файловой системы.
Попробовать, обойтись без байт кода. Так как словарное слово уже само по себе длинный байт код. Такой подход будет жрать больше памяти, но позволит обойтись без компиляции. На модуле сразу можно иметь Web терминал, без старинных попыток работать с помощью Serial и UDP терминалов. Куча места на файловой системе позволит сразу хранить все необходимые файлы программ. Включил модуль, открыл Web интерфейс и сразу пиши, что хочешь и сохраняй все на модуле. Esp гораздо мощнее, того компьютера на котором Чарльз Мур его придумал.
Реализация того, что реализовали для ESP32 на 580-ом занимала 8кб. В ней был интерейс взаимодествия с mainframe. Загружать свой код можно было через load. Не надо выносить словарь в файл, поскольку места достаточно. И еще. Forth перестали использовать по двум причинам. 1 - появление dos. 2 - появилось достаточно памяти. Теперь можно чайник кипятить на компьютере.
Я уже говорил, что прерывания - главный камень преткновения в forth. Эту проблему я решил на asm. В контроллере это тоже можно реализовать через отдельную изолированную область памяти и набором указателей. Есть еще пара ошибок во всех реализациях forth - освобождение памяти при удалении слов из словаря. Выполнение библиотечных функций как раз можно сделать через занрузку из файла с параметрами выполнения. Можно сделать через выделение пямяти под выполняемый код. Набрать кусочками и сделать ссылки в словаре.
Интерефейс - telnet через tcp и Serial. Web морда - сомнительное достоинство контроллера, поскольку нет regex. Вся мощь в песок. А классический regex убьет контроллер.
P.S. Достоинство forth в том, что компилятор и интерпретатор всегда есть прямо в контроллере. После того, как написал - нашел ссылки.
Язык программирования Форт
Forth – Конкатенативный язык программирования / Хабр
Короче - forth для тех, кто понимает.
 

nikolz

Well-known member
Дайте пример нормальной реализации Forth для ESP.
Вот когда изучают известное, а потом делают новое - получают тоже самое в другом виде. Вспоминаю одного деятеля у нас в КБ. Он говорил: Здесь нет ничего нового, и вообще за границей так не делают...
Когда Вы уже научитесь отвечать по делу? Не знаю как для других, но для меня ваши реплики обычно бесполезны. Убедительная просьба, отвечайте по делу, если есть что сказать.
Вы ничего не поняли из того что я Вам написал.
более того Вы как это обычно бывает на этом форуме действуете по принципу "Я этого не изучал, но это плохо"
Но я не обижаюсь на подобные высказывания
Объясняю специально для Вас
Forth это по-существу стековая машина
Lua это тоже стековая машина
Но луа создан позже Forth и его создатели знали и Forth когда решали что и как
Почитайте хотя бы это
Эволюция языка расширений: история Lua
что же касается словарей которые вы собираетесь писать то я Вам предложил сначала изучить хэш функции
так как именно они позволяют быстро и компактно работать со словарями.
 

nikolz

Well-known member
Сверху Снизу