RodionGork 0 Posted April 16, 2009 · Report post Уважаемые товарищи! А какие нынче контроллеры есть со встроенным FORTH или же компилятором FORTH удачным? Вопрос отчасти абстрактный и растущий из желания поразвлечься... Просто грядет проектик который... Да пригрёл уже... Ну малотребовательный ко всему и программулина небольшая... В общем, скучноватый... ;-) А если нарисовать на FORTH - и душе забавно - и у заказчика глазки могут округлиться... Но вообще он добрый, стерпит... ;-))) Желательно услышать кого-нибудь, кому приходилось в достаточно недавнее время сталкиваться, работать... ;-) Возможность внутрисхемной отладки или симуляции по большому счету не требуется... Знаю, что если в гугле ввести AVR FORTH или 8051 FORTH - кое-что навыпадает... Но не хочется по неведению связаться с чем-нибудь совсем непрактичным. ;-) Кстати какие архитектуры более "удачно" для FORTH подходят? Проектик я собирался (учитывая отсутствие особых требований) на AVR делать, хотя конечно можно и более другое что-нибудь (главное, чтоб с прошивкой особых сложностей не возникло... и проц был не дороже 5 баксов желательно) извините если глупость... Родион Quote Ответить с цитированием Share this post Link to post Share on other sites
IgorKossak 0 Posted April 16, 2009 · Report post Работал в своё время с Forth и это к сожалению (или к счастью) совсем не баловство и уж точно не глупость. Это не только новый экзотический язык, это своего рода совсем иная философия программирования. Для начала надо почитать что-нибудь, хоть от Лео Броуди. amforth и PFAVR из бесплатных вроде не плохи на первый взгляд, но я с ними не работал. Для реализации форт-системы наиболее подходящими являются традиционно 16-битные архитектуры с развитым стеком, но и AVR тоже потянет. Результат может быть одно из двух: либо Вы разочаруетесь и навсегда забросите Форт, либо проникнетесь и забьёте на все остальные языки. Посмотрите ещё в сторону avrforth, достаточто минималистичный. Quote Ответить с цитированием Share this post Link to post Share on other sites
Kopa 0 Posted May 4, 2009 (edited) · Report post Кстати какие архитектуры более "удачно" для FORTH подходят? Проектик я собирался (учитывая отсутствие особых требований) на AVR делать, хотя конечно можно и более другое что-нибудь (главное, чтоб с прошивкой особых сложностей не возникло... и проц был не дороже 5 баксов желательно) извините если глупость... Родион Если в архитектуре есть команды с автоинкрементными ( декрементными) указателями данных ( хотя бы одного операнда команды ), то это уже большое подспорье в использовании Forth ( Форт ) языка.:) Железную поддержку поддержкустека данных можно реализовать в Плис, как наиболее гибкий и доступный вариант для исследований. P.S. Больше информации по плюсам и минусам Форт подхода можно порекомендовать посетить форум рускоязычных пользователей Форт языка http://fforum.winglion.ru ( там можно более продуктивно пообщаться На electronix, похоже, Форт не приживётся ) Поддерживаю высказанное в сообщении выше. и т.к. Форт, малоизвестен, то это часто инструментарий для Fun. Интересно будет, а вот лёгкого пути никто не укажет:) У меня тоже хорошие впечатления при его использовании. Edited May 4, 2009 by Kopa Quote Ответить с цитированием Share this post Link to post Share on other sites
ukpyr 0 Posted May 4, 2009 · Report post а в чем преимущество конструкции 1 1 + перед 1+1 ? для разветвленного алгоритма Forth превращается в write-only language типа Перла. Разобраться в такой мешанине намного сложнее чем в C. Quote Ответить с цитированием Share this post Link to post Share on other sites
Kopa 0 Posted May 4, 2009 (edited) · Report post а в чем преимущество конструкции 1 1 + перед 1+1 ? для разветвленного алгоритма Forth превращается в write-only language типа Перла. Разобраться в такой мешанине намного сложнее чем в C. Если это всё, что Вы можете высказать по данной тематике, тогда это не для Вас:) ( без оскорблений ). Польза 1 1 + не в непривычной форме записи, а возможности единообразно ( + комбинаторно) создавать алгоритм ( в Tcl похожий принцип ) опираясь на синтаксис и семантику близкую к естественным языкам. Например: чем плохо Включить 1-й мотор или Вам привычнее 1-й.мотор.включить ( могут быть вариации на любой вкус, включая всевозможные реализации ООП ) При этом, есть возможность впоследствии, при поддержке интерфейса входа/выхода, легко заменить семантику требуемого слова на изменённую. ( основное понятие в Форт языке СЛОВО ) т.к. фактически нет связи формальных параметров по имени в связке с минимальной системой типов в языке. P.S. Если привычнее традиционная форма записи, то подключите одну из Форт библиотек на Форте, но не делайте обсуждение поверхностным. Ваш пример выбран неудачно:) Некоторое представление об Форт языке можно почерпнуть из Википедии. Во Write only можно превратить любой проект.:) Форт в этом не оригинален. Умелое использование Форта этому тоже стоит уделять внимание, например расширяя его в сторону DSL языков. Edited May 4, 2009 by Kopa Quote Ответить с цитированием Share this post Link to post Share on other sites
ukpyr 0 Posted May 4, 2009 (edited) · Report post основное понятие в Форт языке СЛОВОугу, а в С - функция. Например: чем плохо Включить 1-й мотор или Вам привычнее 1-й.мотор.включитьмне привычнее "включить_мотор(1)". или это хуже чем "1 включить_мотор" ? для меня - нет. да, парсер и компилятор в Форте простейшие, но компилятор С например может раскидать локальные переменные по регистрам, соптимизировать циклы и ариф.выражения. В Форте это возможно ? Edited May 4, 2009 by ukpyr Quote Ответить с цитированием Share this post Link to post Share on other sites
Kopa 0 Posted May 4, 2009 (edited) · Report post угу, а в С - функция. мне привычнее "включить_мотор(1)". или это хуже чем "1 включить_мотор" ? для меня - нет. да, парсер и компилятор в Форте простейшие, но компилятор С например может раскидать локальные переменные по регистрам, соптимизировать циклы и ариф.выражения. В Форте это возможно ? Если скажу Да, то поверите?:) 1. Есть некоторое число коммерческих Форт систем, как в них распределяются регистры не знаю, но например в оптимизаторе русской Форт системе SPF4 используется принцип выявления макроцепочек и их оптимизация. Со слов автора оптимизатора используя этот принцип можно с необходимой степенью оптимизировать конкретный код. На тестах в сравнении с Cи этот оптимизатор показывает неплохие результаты, при малых затратах на разработку оптимизатора.:) 2. В браузерах Мozila разрабатывается проект tamarin-tracing для ускорения flash анимации ( java script ) где код сначала переводится в стековые примитивы, а потом уже собирается для регистровой архитектуры. ( наверное есть резон в этом ) ... Но оптимизаторы, в любом случае, не могут делать многих вещей ( т.к. самый лучший оптимизатор, в голове у программиста :) P.S. Функция в Cи - это намного более "негибкое" понятие, чем Слово в Форт языке. ( полезно почитать про это в книге у Ноздрунова, Баранова ) угу, а в С - функция. мне привычнее "включить_мотор(1)". или это хуже чем "1 включить_мотор" ? для меня - нет. Если это Вам удобнее, то противоречий этому нет в рамках Форт языка:) Пока не потребуются изменения и функция потребует провести над собой декомпозицию. Вместо "моторов" потребуется управлять "клапанами" и.т.д. да, парсер и компилятор в Форте простейшие, но компилятор С например может раскидать локальные переменные по регистрам, соптимизировать циклы и ариф.выражения. В Форте это возможно ? А когда это оптимизатор был составляющей любого языка программирования? Edited May 4, 2009 by Kopa Quote Ответить с цитированием Share this post Link to post Share on other sites
Microwatt 0 Posted May 4, 2009 · Report post Ребята, давно я отошел от программирования, но если кто-то возродит ФОРТ - стоящее дело. Особенно для микроконтроллеров с объектно-ориентированным алгоритмом. Это действительно другая, принципиально новая философия программирования. Хорошо структурированная, понятная с какого-то уровня конечному пользователю. Нигде больше вся программа не сводится к одной, финишной строке. Или не начинается с нее. Quote Ответить с цитированием Share this post Link to post Share on other sites
ukpyr 0 Posted May 4, 2009 · Report post Нигде больше вся программа не сводится к одной, финишной строке. Или не начинается с нее. ? int main(void) { run(); } Quote Ответить с цитированием Share this post Link to post Share on other sites
Microwatt 0 Posted May 4, 2009 · Report post ? int main(void) { run(); } Это совсем не то, что в ФОРТе. ФОРТ имеет порождающую грамматику, без всяких долгих нудных скобок шести сортов. Что-то вроде (грубо, реальный синтаксис давно не смотрел) ИДТИ=ШАГ ЛЕВОЙ, ШАГ ПРАВОЙ ШАГ ЛЕВОЙ=ВЕС НАПРАВО, СОГНУТЬ ЛЕВОЕ КОЛЕНО и т.д В самом низу детализации появляются чисто процессорные команды, до которых пользователь, создатель программы прикладной, не опускается. Он может писать верхний уровень в понятных ему технологических терминах, не заморачиваясь состоянием стека, памяти, передачей данных в подпрограммы и проч. Вот в этом и есть основная привлекательность ФОРТА. Кроме того, этот язык очень экономно расходует аппаратные ресурсы, о чем современное поколение программеров вообще думать не привыкло. В этот язык нужно влюбиться с первого взгляда, либо вообще о нем зря не думать. Quote Ответить с цитированием Share this post Link to post Share on other sites
=AK= 0 Posted May 5, 2009 · Report post Если в архитектуре есть команды с автоинкрементными ( декрементными) указателями данных ( хотя бы одного операнда команды ), то это уже большое подспорье в использовании Forth ( Форт ) языка. Это подспорье в написании внутреннего интерпретатора Форта, он будет работать немного быстрее. А на использование языка никак не влияет. Железную поддержку поддержкустека данных можно реализовать в Плис, как наиболее гибкий и доступный вариант для исследований. Не пугайте людей. Это тоже нужно только для ускорения работы внутреннего интерпретатора, что в подавляющем большинстве случаев нафиг никому не надо. Критичные по времени куски кода можно написать на С или на ассемблере, тогда нужда в аппаратных ухищрениях полностью исчезает. А какие нынче контроллеры есть со встроенным FORTH Совсем не обязательно иметь встроенный Форт. Виртуальная форт-машина встает практически на любой микроконтроллер. Посмотрите http://c-fvm.sourceforge.net/index.php Внутренний интерпретатор Форта занимает всего пару килобайт, и это не предел, можно и поменьше ужать. Зато отлаженный Форт-код занимает в несколько раз меньше места, чем эквивалентный С код, поэтому "потраченные" килобайты вернутся с лихвой. Программы пишутся/отлаживаются в кросс-системе, на PC. Вся система написана на С, поэтому скрестить ее с С-шным кодом проблем не вызовет. Quote Ответить с цитированием Share this post Link to post Share on other sites
Kopa 0 Posted May 5, 2009 (edited) · Report post Посмотрите http://c-fvm.sourceforge.net/index.php Внутренний интерпретатор Форта занимает всего пару килобайт, и это не предел, можно и поменьше ужать. Зато отлаженный Форт-код занимает в несколько раз меньше места, чем эквивалентный С код, поэтому "потраченные" килобайты вернутся с лихвой. Программы пишутся/отлаживаются в кросс-системе, на PC. Вся система написана на С, поэтому скрестить ее с С-шным кодом проблем не вызовет. Компактность выполнения байт кода - это ещё бывает не главное, если потребуется уменьшать частоту работы контроллера, то производительности может не хватить. Хорошо иметь возможность гибче управлять процессом кодогенерации. ( производительность, размер) С точки зрения портируемости, то Си не плохое решение. Но в текущем развитии Форта это уже не сильно актуально. ( особенно для контроллеров ) P.S. Кросс компиляцию можно производить и в непосредственно asm команды ( примеры есть ). Сам использовал интегрированную свободную мультипроцессорную среду разработки. ( из недочётов - слабая оптимизация кода и не встроена возможность убирания неиспользуемого кода, что впрочем решаемо и не так критично ) Ребята, давно я отошел от программирования, но если кто-то возродит ФОРТ - стоящее дело. Особенно для микроконтроллеров с объектно-ориентированным алгоритмом. Кто хотит, тот и так использует.( примеров достаточно) А силком тягать никого не нужно. Возрождать Форт не надо он и не умирал и имеет своих пользователей:) P.S. Понятие СЛОВА, механизм чатичной параметризации, словарики в системе и др. элементы Форт системы - это мощные возможности для создания программ. СЛОВО - может выступать в роли чего угодно ( меняя контекст окружения) , хоть и объекта.:) Edited May 5, 2009 by Kopa Quote Ответить с цитированием Share this post Link to post Share on other sites
Kopa 0 Posted May 5, 2009 · Report post Ребята, давно я отошел от программирования, но если кто-то возродит ФОРТ - стоящее дело. Интересно узнать, что для этого надо? Quote Ответить с цитированием Share this post Link to post Share on other sites
Microwatt 0 Posted May 5, 2009 · Report post Интересно узнать, что для этого надо? Хм. Пусть действующие программисты меня поправят, но это вроде сводится к написанию ядра в 20-30 аппаратно оптимизированных команд (подпрограмм). Далее ФОРТ сам разворачивается через несложный компиллятор. Аппаратно ФОРТ хорошо работает в процессорах, где есть глубокий стек. Вокруг процедур со стеком он почти весь и крутится. Если порыть, то ядро для многих процессоров реализовано и его можно скачать. Существенный недостаток ФОРТА - работа с целочисленной арифметикой. Во всяком случае, там плавающей запятой нет. Но логика - великолепная. Для объектно- ориентированного программирования почти идеально. Странно, но при использовании бесконечно вложенных подпрограмм, ФОРТ обеспечивает скорость работы, соизмеримую с программами, написанными в ассемблере. Где-то давным-давно была статейка с заголовком "Язык высокого уровня из 25 команд ассемблера" Это просто характеризует проблему качественно. Успехов всем, кто за это дело возьмется! Quote Ответить с цитированием Share this post Link to post Share on other sites
Kopa 0 Posted May 5, 2009 (edited) · Report post Хм. Пусть действующие программисты меня поправят, но это вроде сводится к написанию ядра в 20-30 аппаратно оптимизированных команд (подпрограмм). Далее ФОРТ сам разворачивается через несложный компиллятор. Схемы развёртывания Форт системы могут быть разные, но в общем рассуждении верно:) Существенный недостаток ФОРТА - работа с целочисленной арифметикой. Во всяком случае, там плавающей запятой нет. В стандарте 94 года уже появилась, а есть ли конкретные реализации библиотеки на конкретное ядро, то это разрешимо. ( существуют и реализации плавающей арифметики на стековых примитивах) Странно, но при использовании бесконечно вложенных подпрограмм, ФОРТ обеспечивает скорость работы, соизмеримую с программами, написанными в ассемблере. Реальные цифры в сравнении с asm могут быть разные, но не стоит думать что в Форте, за счёт более интенсивного использования стека, ( и не используя оптимизацию кода для целевой платформы ) алгоритмы работают быстрее:) Компактность же он может обеспечить, но тоже в ущерб производительности если она не нужна. Где-то давным-давно была статейка с заголовком "Язык высокого уровня из 25 команд ассемблера" Это просто характеризует проблему качественно. Можно и меньше, примерно 16 команд-примитивов. В SeaForth ~32 ( про него можно почитать публикацию в 4-ом номере журнала "Компоненты и технологии" за этот год. Успехов всем, кто за это дело возьмется! Уже много чего существует в Форт области. P.S. Мой же вопрос звучал, в продвижении Форт подхода среди российских разработчиков и что этому может способствовать? И мне видется пока Форт не будет использоваться не хуже чем Си и изучаться в базовых учебных программах и работодатели не будут благосклонны к его использованию в разработках никуда ни прийдём :unsure: Edited May 5, 2009 by Kopa Quote Ответить с цитированием Share this post Link to post Share on other sites