Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Сб авг 15, 2026 19:43

...
Google Search
Forth-FAQ Spy Grafic

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




Начать новую тему Ответить на тему  [ Сообщений: 11 ] 
Автор Сообщение
 Заголовок сообщения: Переносимый Форт на Си для embedded
СообщениеДобавлено: Вс май 10, 2026 21:07 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 8186
Благодарил (а): 29 раз.
Поблагодарили: 148 раз.
Собственно, вот такая тема. Задача - для набора платформ Arduino/ARM/.. иметь возможность подключить один модуль в виде #include "forth.h", и добавить к форт-машине функции основного проекта (по умолчанию void(), которые могут работать со стеком функциями Push/Pop).

Нет, xxxforth не подойдет при любом xxx. Задача не в том, чтобы заменить весь софт на Форт, а чтобы к существующему софту организовать интерпретатор и JIT-компилятор с целью сокращения времени на итерацию разработки.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Переносимый Форт на Си для embedded
СообщениеДобавлено: Пн май 11, 2026 01:25 
Не в сети

Зарегистрирован: Пн янв 07, 2013 22:40
Сообщения: 2218
Благодарил (а): 9 раз.
Поблагодарили: 76 раз.
Hishnik писал(а):
Нет, xxxforth не подойдет при любом xxx. Задача не в том, чтобы заменить весь софт на Форт, а чтобы к существующему софту организовать интерпретатор и JIT-компилятор с целью сокращения времени на итерацию разработки.

Не вижу противоречий и для использования xxxforth на С/С++ для обозначенной в постановке задачи.

P.S. Ну, разве что, можно подумать как и какой "прикрутитить" JIT-компилятор при этом. (а может. AOT)


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Переносимый Форт на Си для embedded
СообщениеДобавлено: Пн май 11, 2026 02:09 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 8186
Благодарил (а): 29 раз.
Поблагодарили: 148 раз.
Я вижу принципиальные противоречия, которые потом обязательно проявятся. Программное обеспечение сначала проектируется, и у него есть своя архитектура, правила взаимодействия между частями и приоритеты по характеристикам. Вопрос не в том, чтобы скорее-скорее показать использование Форта, а чтобы "играть в долгую" и сделать решение, которое встраивается как компонент в целый класс проектов. Тут и проекты как раз подъехали, интерпретатор там нужен, но в составе ПО, которое там неизбежно будет. Говорить "а давайте вот это все выкинем и перепишем" - зачем? Оно работает. Command Line Interface и скрипты, где слова Форта - обертки над готовыми функциями - да, надо. Какой xxxforth на такое способен - это дольше выяснять, чем написать требуемое.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Переносимый Форт на Си для embedded
СообщениеДобавлено: Ср май 13, 2026 12:21 
Не в сети

Зарегистрирован: Чт янв 07, 2016 19:14
Сообщения: 1371
Благодарил (а): 4 раз.
Поблагодарили: 20 раз.
Эээ... так вроде у вас же это и было где-то

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Переносимый Форт на Си для embedded
СообщениеДобавлено: Ср май 13, 2026 18:22 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 8186
Благодарил (а): 29 раз.
Поблагодарили: 148 раз.
Да, уже не первый раз такое вылезает. Надо уже добить. Хочется, чтобы оно без лишних настроек подключалось к проекту через единственный include, а дальше можно было бы оформить обертки над функциями проекта чем-то вроде AddWord("Nameifword", addrofvoidfunction).


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Переносимый Форт на Си для embedded
СообщениеДобавлено: Пн авг 10, 2026 06:56 
Не в сети

Зарегистрирован: Ср авг 05, 2026 06:46
Сообщения: 3
Откуда: Новосибирск
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
У меня была идея сделать некий консольный интерфейс для вызова СИшных функций на микроконтроллерах с околонулевой необходимостью к портированию с возможностью к построению скриптов. Получился Forth.
Нюансы:
    В целом, реализация железонезависимая, однако форма хранения системных слов требует одного адресного пространства => контроллеры с гарвардской архитектурой (avr, pic) не поддерживаются
    Подключается два .с и два .h файла минимум
    Реализация железозависимых функций предлагается к реализации в отдельных словарях, которые подключаются динамически (однако, функции по прежнему могут лежать во flash. Нужно только 1 переходное слово в ram)
    Слова можно добавлять и динамически через функцию forth_add_function(). Из Сишной функции можно делать все, что угодно, т.к. в нее передается указатель на vm. Флаг немедленного исполнения также будет работать.
    Экземпляров виртуалок может быть сколько угодно, стеки хранятся отдельно от основной памяти => при большом желании можно и мультизадачность организовать
    nostdlib
    библиотека занимает примерно 10кб flash (arm-none-eabi, -Os). Глобальных переменных нет, forth_t = примерно 100 байт. Остальное (размер стеков, памяти) решает юзер
    Есть тесты, примеры (под Linux)
Проект активно развивается, т.ч. многие решения пересматриваются, API плавает :mrgreen:

Ссылка: Codeberg Github


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Переносимый Форт на Си для embedded
СообщениеДобавлено: Пн авг 10, 2026 15:51 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 8186
Благодарил (а): 29 раз.
Поблагодарили: 148 раз.
Интересно. А оно для каких плат предполагается? Если одно адресное пространство, то это что-то на уровне 64+ кб памяти и ARM, RISC-V и прочее.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Переносимый Форт на Си для embedded
СообщениеДобавлено: Пн авг 10, 2026 17:27 
Не в сети

Зарегистрирован: Ср авг 05, 2026 06:46
Сообщения: 3
Откуда: Новосибирск
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Hishnik писал(а):
Интересно. А оно для каких плат предполагается? Если одно адресное пространство, то это что-то на уровне 64+ кб памяти и ARM, RISC-V и прочее.


Единое адресное пространство характерно для arm, risc-v, x86, x86_64, pic32*, stm8*, msp430*, Xtensa. С теми, что со звездочкой, не работал, но по идее должно скомпилиться. По сути, только AVR и pic8 из популярных являются чисто гарвардскими, т.е. с разделенной памятью.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Переносимый Форт на Си для embedded
СообщениеДобавлено: Пн авг 10, 2026 19:40 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 8186
Благодарил (а): 29 раз.
Поблагодарили: 148 раз.
Вообще надо бы обсудить. Оно интересно так выглядит. Идея с отдельными экземплярами форт-машин в целом где-то в воздухе витала, но я не помню ее в таком явном виде. Сам принцип запуска нескольких машин параллельно, без аппаратной многозадачности - это для МК просто находка, тем более что как раз слабые МК перед таким редко сталкиваются, а когда ресурсов становится больше, то как раз и появляются независимые друг от друга процессы.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Переносимый Форт на Си для embedded
СообщениеДобавлено: Вт авг 11, 2026 00:36 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 8186
Благодарил (а): 29 раз.
Поблагодарили: 148 раз.
Я тут вижу два интересных момента (пока).
1. Управление объектами и выделение памяти.
Для МК это чуть более опасно, чем для ПК, потому что динамическое создание потоков Форта может загнать систему в критическую ошибку. Тут выбор между только compile-time с простой параметризацией (сколько потоков и кому что дать), либо допускать динамическое создание потоков, что выглядит гибче и технически возможно. А вот соотношение рисков и возможностей - интересно...
2. Ограничения по словам.
Чтобы движок не застревал внутри слов, они не должны иметь циклов с проверкой условия выхода. Обрыв внешнего сигнала - и один поток остановил все. Или таймаут на каждом таком слове, или в принципе выносить проверки в примитивы и делать циклы только на уровне Форта. Тогда будет регулярная передача управления.

И в целом, конечно, любопытно, куда такое можно применить в современной ситуации. МК "среднего" типа уже достаточно мощные, чтобы не бороться за каждый такт, а для механики-гидравлики-нагрева их производительность на порядок больше, чем нужно для отслеживания процессов. Тут да, на первый план выходит удобство упаковки нескольких потоков вычислений внутрь одной системы.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Переносимый Форт на Си для embedded
СообщениеДобавлено: Вт авг 11, 2026 09:07 
Не в сети

Зарегистрирован: Ср авг 05, 2026 06:46
Сообщения: 3
Откуда: Новосибирск
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Смотря, какие задачи стоят перед внедрением языка Форт в проект.

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

А вот если требуется межпроцессное взаимодействие, то я бы предложил использовать готовые RTOS, написав слова-обертки на СИ для работы с потоками и механизм синхронизации при записи в общую память. FreeRTOS мне видится хорошим вариантом для такого рода задач. Места занимает мало, запускается на всех популярных архитектурах.

Hishnik писал(а):
И в целом, конечно, любопытно, куда такое можно применить в современной ситуации.


Мне видится потенциал такого решения в динамической подгрузке скриптов по сети или с внешней карты памяти. Раскатывания сишной программы, скомпилированной с -fPIC, по ОЗУ требует места для всей такой программы сразу, а размещение в одной области разных таких программ (т.н. оверлеи) требует постоянного считывания из постоянной памяти, что часто очень медленно. Со скриптовым языком мы можем считывать текст скрипта построчно, что и место в ОЗУ экономит, и на времени считывания из медленной памяти выигрывает.

Но суть моего проекта тут в том, чтобы переложить все hardware-dependent решения на разработчика. Мы даем ему переносимую основу - он ее развивает и прикручивает все необходимые ему функции самостоятельно. Мы же можем в этом ему только помочь, приложив какие-нибудь примеры реализации.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 11 ] 

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


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

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


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

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