LINUX.ORG.RU

Есть тут Forth гуру?


0

4

Решил поиграться с Фортом. Надо - что-нибудь безгимморно работающее под linux для обучения. Затем реализацию чего-то под AVR, желательно не только под мегу но и под простейшие ATTiny Вообще на мелочи тех же АВР-ках, пиках и прочей лабуде насколько эффективно применение форта в сравнении с Си? И как потом с портированием? например с pic16 на ATtiny? Хвалятся все что программа минимальный обьем занимает, но нигде толком ничего найти не могу. Куча всяких вариантов, большая часть заброшенных.


Под линукс проще всего взять gforth. В gentoo он даже в portage есть. Если в твоем дистре его нет - можно собрать pforth, он легкий и без зависимостей. Но не очень удобный, имхо.

В ATTiny обычная форт-система не влезет, она и в мегу не всякую лезет. Для полноценного использования надо хотя бы 16Kb памяти, а лучше 32. Сравнивать форт с С некорректно - в форт-систему входит компилятор, библиотеки, интерактивный шелл по UART, а в С - только твой код и частично рантайм С. Естественно, С будет занимать меньше в разы.

Я пользуюсь AMforth на ATMega32. Удобно, что можно дорабатывать и запускать код интерактивно, прямо на работающем контроллере. Неудобно, что с кодом на С не совместим в принципе, и доков для полноценной работы маловато. Иногда приходится писать на асме и лезть в дебри даташитов за адресами хитрых регистров. Многие вещи работают странно, прерывания например.

В целом хорошо для прототипирования и экспериментов, если есть время и желание разбираться с этим. Реальную прошивку лучше писать на С, особенно если нужна скорость и/или непрожорливость. Готового кода опять же много.

Вроде еще бы есть проприетарные форты за $$$, которые компилят на хосте, а в контроллер заливают только асм. Ничего не знаю про них.

anonymous
()
Ответ на: комментарий от Virtuos86

Пришёл. Чисто поиграться — gforth, боюсь, без вариантов.

Если хочется что-то посерьёзнее, то нужно браться за SP-Forth, но он под Linux очень недоработан. Но, соответственно, можно руки приложить.

Про AVR ничего не скажу, под такие вещи чаще Форт-транслятор проще самому написать, чем чужой найти/освоить/принять :)

Вообще на мелочи тех же АВР-ках, пиках и прочей лабуде насколько эффективно применение форта в сравнении с Си?

Если памяти ОЧЕНЬ мало, то Форт может быть очень эффективен. Вплоть до гибридного байткода можно довести. Если памяти много, то Си уже наверняка эффективнее, оптимизаторы нынешние у Си круче. Форт хорош там, где нужна высокая интерактивность, но на однокристаллках это мало актуально.

И как потом с портированием? например с pic16 на ATtiny?

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

Хвалятся все что программа минимальный обьем занимает, но нигде толком ничего найти не могу.

У Форта компиляция может быть очень разной. Он может генерировать прямо нативный машинный код, хотя это и не классика Форта — например, SP-Forth так делает под x86.

Форт может генерировать прямой или косвенный шитый код — скажем, по два или четыре байта на вызов любой команды («слова» в терминах Форта). Такой код получается обычно компактнее, чем машинный, но неоднозначен в плане быстродействия. Скажем, качественный прямой шитый код на x86 при вызове низкоуровневых определений (слов, написанных на ассемблере) выполняется быстрее, чем серии call/ret на ассемблере. Но на высокоуровневых словах (написанных на Форте) начинается проигрыш.

В общем, всё сильно зависит от конкретных условий. В некоторых местах Форт очень хорошо вписывается в задачу, в некоторых — совершенно неуместен :)

KRoN73 ★★★★★
()
Ответ на: комментарий от KRoN73

Как я понял интерпретатор форта занимает что-то совсем малый объем и пусть по производительности несколько проигрывает сям, зато в итоге программа в целом так же сильно меньше получается, так?

unname
() автор топика
Ответ на: комментарий от unname

так?

В одном из возможных вариантов — так :)

KRoN73 ★★★★★
()

Вобщем, как сказал КРоН73, для микроконтроллера пишешь свой форт, пишешь форт-программу (она будет переносимая), отлаживаешь ее.

Для быстродействия, там где надо, переписываешь медленные слова на форт-ассемблере, эти слова не будут переносимыми, но их не должно быть много.

sdio ★★★★★
()
Ответ на: комментарий от sdio

как раз и поискал. Знаете, если для решения вашей проблемы есть куча мелких недоработанных заброшенных решений, значит что на самом деле нормального решения еще никто не нашел. А если находится 3-4 конкурирующих решения вот тут можно выбирать.

unname
() автор топика
Ответ на: комментарий от unname

Ты же понимаешь, что эти микроконтроллеры слишком специфичные, узкоспециализированные устройства, поддерживать форт для них для широкой публики никому не нужно, тут каждый разработчик (если ему нужен форт) пилит его под себя.

У тебя есть шанс.

sdio ★★★★★
()
Ответ на: комментарий от sdio

В общем не нашел интерпретатора готового мелкого для АВРок... Судя по всему придется знакомство с фортом начинать с написания интерпретатора иначе в 1 кб вместе с программой не влезть с тем что предлагается.

unname
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.