Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: А вот бы на FORTH написать...
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Все остальные микроконтроллеры
Страницы: 1, 2, 3, 4, 5
RodionGork
Уважаемые товарищи!

А какие нынче контроллеры есть со встроенным FORTH или же компилятором FORTH удачным?

Вопрос отчасти абстрактный и растущий из желания поразвлечься... Просто грядет проектик который... Да пригрёл уже... Ну малотребовательный ко всему и программулина небольшая... В общем, скучноватый... ;-)

А если нарисовать на FORTH - и душе забавно - и у заказчика глазки могут округлиться... Но вообще он добрый, стерпит... ;-)))

Желательно услышать кого-нибудь, кому приходилось в достаточно недавнее время сталкиваться, работать... ;-)

Возможность внутрисхемной отладки или симуляции по большому счету не требуется...

Знаю, что если в гугле ввести AVR FORTH или 8051 FORTH - кое-что навыпадает... Но не хочется по неведению связаться с чем-нибудь совсем непрактичным. ;-)

Кстати какие архитектуры более "удачно" для FORTH подходят? Проектик я собирался (учитывая отсутствие особых требований) на AVR делать, хотя конечно можно и более другое что-нибудь (главное, чтоб с прошивкой особых сложностей не возникло... и проц был не дороже 5 баксов желательно)

извините если глупость...
Родион
IgorKossak
Работал в своё время с Forth и это к сожалению (или к счастью) совсем не баловство и уж точно не глупость. Это не только новый экзотический язык, это своего рода совсем иная философия программирования.
Для начала надо почитать что-нибудь, хоть от Лео Броуди.
amforth и PFAVR из бесплатных вроде не плохи на первый взгляд, но я с ними не работал.
Для реализации форт-системы наиболее подходящими являются традиционно 16-битные архитектуры с развитым стеком, но и AVR тоже потянет.
Результат может быть одно из двух: либо Вы разочаруетесь и навсегда забросите Форт, либо проникнетесь и забьёте на все остальные языки.

Посмотрите ещё в сторону avrforth, достаточто минималистичный.
Kopa
Цитата(RodionGork @ Apr 16 2009, 07:55) *
Кстати какие архитектуры более "удачно" для FORTH подходят? Проектик я собирался (учитывая отсутствие особых требований) на AVR делать, хотя конечно можно и более другое что-нибудь (главное, чтоб с прошивкой особых сложностей не возникло... и проц был не дороже 5 баксов желательно)

извините если глупость...
Родион


Если в архитектуре есть команды с автоинкрементными ( декрементными) указателями данных
( хотя бы одного операнда команды ), то это уже большое подспорье в использовании Forth ( Форт )
языка.smile.gif
Железную поддержку поддержкустека данных можно реализовать в Плис, как наиболее гибкий
и доступный вариант для исследований.

P.S. Больше информации по плюсам и минусам Форт подхода можно порекомендовать посетить
форум рускоязычных пользователей Форт языка http://fforum.winglion.ru
( там можно более продуктивно пообщаться На electronix, похоже, Форт не приживётся )
Поддерживаю высказанное в сообщении выше. и т.к. Форт, малоизвестен, то это часто
инструментарий для Fun. Интересно будет, а вот лёгкого пути никто не укажетsmile.gif
У меня тоже хорошие впечатления при его использовании.
ukpyr
а в чем преимущество конструкции 1 1 + перед 1+1 ?
для разветвленного алгоритма Forth превращается в write-only language типа Перла.
Разобраться в такой мешанине намного сложнее чем в C.
Kopa
Цитата(ukpyr @ May 4 2009, 11:01) *
а в чем преимущество конструкции 1 1 + перед 1+1 ?
для разветвленного алгоритма Forth превращается в write-only language типа Перла.
Разобраться в такой мешанине намного сложнее чем в C.


Если это всё, что Вы можете высказать по данной тематике, тогда это не для Васsmile.gif
( без оскорблений ).

Польза 1 1 + не в непривычной форме записи, а возможности единообразно ( + комбинаторно)
создавать алгоритм ( в Tcl похожий принцип ) опираясь на синтаксис и семантику близкую к естественным языкам.
Например: чем плохо Включить 1-й мотор или Вам привычнее 1-й.мотор.включить
( могут быть вариации на любой вкус, включая всевозможные реализации ООП )
При этом, есть возможность впоследствии, при поддержке
интерфейса входа/выхода, легко заменить семантику требуемого слова на изменённую.
( основное понятие в Форт языке СЛОВО )
т.к. фактически нет связи формальных параметров по имени в связке с минимальной системой типов в языке.

P.S. Если привычнее традиционная форма записи, то подключите одну из Форт библиотек
на Форте, но не делайте обсуждение поверхностным. Ваш пример выбран неудачноsmile.gif
Некоторое представление об Форт языке можно почерпнуть из Википедии.
Во Write only можно превратить любой проект.smile.gif Форт в этом не оригинален.
Умелое использование Форта этому тоже стоит уделять внимание, например расширяя
его в сторону DSL языков.
ukpyr
Цитата
основное понятие в Форт языке СЛОВО
угу, а в С - функция.
Цитата
Например: чем плохо Включить 1-й мотор или Вам привычнее 1-й.мотор.включить
мне привычнее "включить_мотор(1)". или это хуже чем "1 включить_мотор" ? для меня - нет.
да, парсер и компилятор в Форте простейшие, но компилятор С например может раскидать локальные переменные по регистрам, соптимизировать циклы и ариф.выражения. В Форте это возможно ?
Kopa
Цитата(ukpyr @ May 4 2009, 12:05) *
угу, а в С - функция.
мне привычнее "включить_мотор(1)". или это хуже чем "1 включить_мотор" ? для меня - нет.
да, парсер и компилятор в Форте простейшие, но компилятор С например может раскидать локальные переменные по регистрам, соптимизировать циклы и ариф.выражения. В Форте это возможно ?


Если скажу Да, то поверите?smile.gif

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

2. В браузерах Мozila разрабатывается проект tamarin-tracing для ускорения
flash анимации ( java script ) где код сначала переводится в стековые примитивы,
а потом уже собирается для регистровой архитектуры. ( наверное есть резон в этом )

... Но оптимизаторы, в любом случае, не могут делать многих вещей ( т.к.
самый лучший оптимизатор, в голове у программиста smile.gif

P.S. Функция в Cи - это намного более "негибкое" понятие, чем Слово в Форт языке.
( полезно почитать про это в книге у Ноздрунова, Баранова )

Цитата(ukpyr @ May 4 2009, 12:05) *
угу, а в С - функция.
мне привычнее "включить_мотор(1)". или это хуже чем "1 включить_мотор" ? для меня - нет.


Если это Вам удобнее, то противоречий этому нет в рамках Форт языкаsmile.gif Пока не потребуются
изменения и функция потребует провести над собой декомпозицию. Вместо "моторов" потребуется
управлять "клапанами" и.т.д.

Цитата(ukpyr @ May 4 2009, 12:05) *
да, парсер и компилятор в Форте простейшие, но компилятор С например может раскидать локальные переменные по регистрам, соптимизировать циклы и ариф.выражения. В Форте это возможно ?


А когда это оптимизатор был составляющей любого языка программирования?
Microwatt
Ребята, давно я отошел от программирования, но если кто-то возродит ФОРТ - стоящее дело. Особенно для микроконтроллеров с объектно-ориентированным алгоритмом.
Это действительно другая, принципиально новая философия программирования. Хорошо структурированная, понятная с какого-то уровня конечному пользователю. Нигде больше вся программа не сводится к одной, финишной строке. Или не начинается с нее.
ukpyr
Цитата
Нигде больше вся программа не сводится к одной, финишной строке. Или не начинается с нее.

?
Код
int main(void) { run(); }
Microwatt
Цитата(ukpyr @ May 4 2009, 16:23) *
?
Код
int main(void) { run(); }

Это совсем не то, что в ФОРТе. ФОРТ имеет порождающую грамматику, без всяких долгих нудных скобок шести сортов. Что-то вроде (грубо, реальный синтаксис давно не смотрел)
ИДТИ=ШАГ ЛЕВОЙ, ШАГ ПРАВОЙ
ШАГ ЛЕВОЙ=ВЕС НАПРАВО, СОГНУТЬ ЛЕВОЕ КОЛЕНО и т.д
В самом низу детализации появляются чисто процессорные команды, до которых пользователь, создатель программы прикладной, не опускается. Он может писать верхний уровень в понятных ему технологических терминах, не заморачиваясь состоянием стека, памяти, передачей данных в подпрограммы и проч.
Вот в этом и есть основная привлекательность ФОРТА. Кроме того, этот язык очень экономно расходует аппаратные ресурсы, о чем современное поколение программеров вообще думать не привыкло.
В этот язык нужно влюбиться с первого взгляда, либо вообще о нем зря не думать.
=AK=
Цитата(Kopa @ May 4 2009, 15:22) *
Если в архитектуре есть команды с автоинкрементными ( декрементными) указателями данных ( хотя бы одного операнда команды ), то это уже большое подспорье в использовании Forth ( Форт ) языка.

Это подспорье в написании внутреннего интерпретатора Форта, он будет работать немного быстрее. А на использование языка никак не влияет.

Цитата(Kopa @ May 4 2009, 15:22) *
Железную поддержку поддержкустека данных можно реализовать в Плис, как наиболее гибкий и доступный вариант для исследований.

Не пугайте людей. Это тоже нужно только для ускорения работы внутреннего интерпретатора, что в подавляющем большинстве случаев нафиг никому не надо. Критичные по времени куски кода можно написать на С или на ассемблере, тогда нужда в аппаратных ухищрениях полностью исчезает.

Цитата(RodionGork @ Apr 16 2009, 14:25) *
А какие нынче контроллеры есть со встроенным FORTH

Совсем не обязательно иметь встроенный Форт. Виртуальная форт-машина встает практически на любой микроконтроллер.

Посмотрите http://c-fvm.sourceforge.net/index.php Внутренний интерпретатор Форта занимает всего пару килобайт, и это не предел, можно и поменьше ужать. Зато отлаженный Форт-код занимает в несколько раз меньше места, чем эквивалентный С код, поэтому "потраченные" килобайты вернутся с лихвой. Программы пишутся/отлаживаются в кросс-системе, на PC. Вся система написана на С, поэтому скрестить ее с С-шным кодом проблем не вызовет.
Kopa
Цитата(=AK= @ May 5 2009, 04:49) *
Посмотрите http://c-fvm.sourceforge.net/index.php Внутренний интерпретатор Форта занимает всего пару килобайт, и это не предел, можно и поменьше ужать. Зато отлаженный Форт-код занимает в несколько раз меньше места, чем эквивалентный С код, поэтому "потраченные" килобайты вернутся с лихвой. Программы пишутся/отлаживаются в кросс-системе, на PC. Вся система написана на С, поэтому скрестить ее с С-шным кодом проблем не вызовет.


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

С точки зрения портируемости, то Си не плохое решение. Но в текущем развитии Форта это уже
не сильно актуально. ( особенно для контроллеров )

P.S. Кросс компиляцию можно производить и в непосредственно asm команды ( примеры есть ).
Сам использовал интегрированную свободную мультипроцессорную среду разработки.
( из недочётов - слабая оптимизация кода и не встроена возможность убирания
неиспользуемого кода, что впрочем решаемо и не так критично )



Цитата(Microwatt @ May 4 2009, 15:46) *
Ребята, давно я отошел от программирования, но если кто-то возродит ФОРТ - стоящее дело. Особенно для микроконтроллеров с объектно-ориентированным алгоритмом.


Кто хотит, тот и так использует.( примеров достаточно)
А силком тягать никого не нужно.
Возрождать Форт не надо он и не умирал и имеет своих пользователейsmile.gif


P.S. Понятие СЛОВА, механизм чатичной параметризации, словарики в системе и др. элементы
Форт системы - это мощные возможности для создания программ. СЛОВО - может выступать
в роли чего угодно ( меняя контекст окружения) , хоть и объекта.smile.gif
Kopa
Цитата(Microwatt @ May 4 2009, 15:46) *
Ребята, давно я отошел от программирования, но если кто-то возродит ФОРТ - стоящее дело.


Интересно узнать, что для этого надо?
Microwatt
Цитата(Kopa @ May 5 2009, 07:27) *
Интересно узнать, что для этого надо?

Хм. Пусть действующие программисты меня поправят, но это вроде сводится к написанию ядра в 20-30 аппаратно оптимизированных команд (подпрограмм). Далее ФОРТ сам разворачивается через несложный компиллятор.
Аппаратно ФОРТ хорошо работает в процессорах, где есть глубокий стек. Вокруг процедур со стеком он почти весь и крутится. Если порыть, то ядро для многих процессоров реализовано и его можно скачать.
Существенный недостаток ФОРТА - работа с целочисленной арифметикой. Во всяком случае, там плавающей запятой нет. Но логика - великолепная. Для объектно- ориентированного программирования почти идеально.
Странно, но при использовании бесконечно вложенных подпрограмм, ФОРТ обеспечивает скорость работы, соизмеримую с программами, написанными в ассемблере.
Где-то давным-давно была статейка с заголовком "Язык высокого уровня из 25 команд ассемблера" Это просто характеризует проблему качественно.
Успехов всем, кто за это дело возьмется!
Kopa
Цитата(Microwatt @ May 5 2009, 13:46) *
Хм. Пусть действующие программисты меня поправят, но это вроде сводится к написанию ядра в 20-30 аппаратно оптимизированных команд (подпрограмм). Далее ФОРТ сам разворачивается через несложный компиллятор.


Схемы развёртывания Форт системы могут быть разные, но в общем рассуждении верноsmile.gif

Цитата(Microwatt @ May 5 2009, 13:46) *
Существенный недостаток ФОРТА - работа с целочисленной арифметикой. Во всяком случае, там плавающей запятой нет.


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

Цитата(Microwatt @ May 5 2009, 13:46) *
Странно, но при использовании бесконечно вложенных подпрограмм, ФОРТ обеспечивает скорость работы, соизмеримую с программами, написанными в ассемблере.


Реальные цифры в сравнении с asm могут быть разные,
но не стоит думать что в Форте, за счёт более интенсивного использования стека,
( и не используя оптимизацию кода для целевой платформы ) алгоритмы работают быстрееsmile.gif
Компактность же он может обеспечить, но тоже в ущерб производительности если она не нужна.


Цитата(Microwatt @ May 5 2009, 13:46) *
Где-то давным-давно была статейка с заголовком "Язык высокого уровня из 25 команд ассемблера" Это просто характеризует проблему качественно.


Можно и меньше, примерно 16 команд-примитивов.
В SeaForth ~32 ( про него можно почитать публикацию в 4-ом номере журнала "Компоненты и технологии"
за этот год.

Цитата(Microwatt @ May 5 2009, 13:46) *
Успехов всем, кто за это дело возьмется!


Уже много чего существует в Форт области.

P.S. Мой же вопрос звучал, в продвижении Форт подхода среди российских разработчиков
и что этому может способствовать?
И мне видется пока Форт не будет использоваться не хуже чем Си и изучаться в базовых
учебных программах
и работодатели не будут благосклонны к его использованию в разработках
никуда ни прийдём unsure.gif
ukpyr
Цитата
Во всяком случае, там плавающей запятой нет. Но логика - великолепная. Для объектно- ориентированного программирования почти идеально.
а кто мешает добавить плавающую точку ? сделали же ASCII строки ?

пока что вижу перспективу применения интерпретатора Форта для создания пользователями своих программ.
плюс очень простая организация многозадачности путем перезагрузки указателя стека.
хотя вряд ли сейчас кто-нибудь согласится писать на Форте вместо IEC 61131 sad.gif
Kopa
Цитата(ukpyr @ May 5 2009, 15:38) *
пока что вижу перспективу применения интерпретатора Форта для создания пользователями своих программ.
плюс очень простая организация многозадачности путем перезагрузки указателя стека.
хотя вряд ли сейчас кто-нибудь согласится писать на Форте вместо IEC 61131 sad.gif


И в этом напралении есть подвижкиsmile.gif

http://electronix.ru/forum/index.php?showt...st&p=505624
ukpyr
в книге Семенова http://umup.narod.ru/1054.zip в приложении есть полный текст интерпретатора для 8086.
Kopa
Цитата(ukpyr @ May 5 2009, 17:35) *
в книге Семенова http://umup.narod.ru/1054.zip в приложении есть полный текст интерпретатора для 8086.


? Может, лучше использовать готовые отработанные решения?
Коих предостаточное множество на любой вкус.smile.gif
Kopa
Цитата(Kopa @ May 6 2009, 06:15) *
? Может, лучше использовать готовые отработанные решения?
Коих предостаточное множество на любой вкус.smile.gif


Некоторый обзор ссылок на существующие решения для МК можно посмотреть здесь:

http://fforum.winglion.ru/viewtopic.php?t=...sc&start=15
http://fforum.winglion.ru/viewtopic.php?t=9
IgorKossak
Пользовался в своё время TinyBoot, впечатления сложились самые благоприятные. Был очень раздосадован закрытием сайта tinyboot.com, но нашлись добрые люди, поддержавшие проект. Вот полезная ссылка, взятая по наводке Kopa.
Kopa
Цитата(IgorKossak @ May 7 2009, 11:03) *
Пользовался в своё время TinyBoot, впечатления сложились самые благоприятные. Был очень раздосадован закрытием сайта tinyboot.com, но нашлись добрые люди, поддержавшие проект. Вот полезная ссылка, взятая по наводке Kopa.


Мне тоже было жаль, но если будет интерес к данной IDE и Форт тематике, то можно
продолжить развитие данного проекта для расширения функциональности и включении
других контроллеров ( ARM, MSP430, PIC, AVR32 и др. ) smile.gif

P.S. При заинтересованности в применении и развитии Форт направления может
быть создан отдельный подфорум. ( возможно через голосование )
MrYuran
Цитата(Kopa @ May 7 2009, 14:29) *
P.S. При заинтересованности в применении и развитии Форт направления может
быть создан отдельный подфорум. ( возможно через голосование )

Ну а в принципе, в двух словах, в чём сильные (принципиально) стороны форта?
Типа рекламного слогана.
Например:
Фортран - быстрая математика
Паскаль - надёжность
Си - гибкость и вседозволенность
Форт - ?
Kopa
Цитата(MrYuran @ May 7 2009, 13:54) *
Ну а в принципе, в двух словах, в чём сильные (принципиально) стороны форта?
Типа рекламного слогана.
Например:
Фортран - быстрая математика
Паскаль - надёжность
Си - гибкость и вседозволенность
Форт - ?


Ну и шуточки у Васsmile.gif

Например:

Форт - "Калашников" среди языков.

P.S. Стек - это его магазин патронов.
Microwatt
Цитата(Kopa @ May 7 2009, 14:46) *
Ну и шуточки у Васsmile.gif

Например:

Форт - "Калашников" среди языков.

P.S. Стек - это его магазин патронов.

Хорошее сравнение.
Когда авторитетная комиссия в Пентагоне пристально изучала сравнительные характеристики АК-47 и М16, эксперты зашли в тупик. По всем объективным показателям М16 - лучше. А в бою сами американские солдаты отдавали предпочтение АК47.
Вывод комиссии: "М16 намного лучше поражает цели. АК47 поражает ВСЕ.
Вот так и ФОРТ
ukpyr
а как организуется стек данных любого типа ? может вместе с данными в стек помещать сигнатуру типа ?
в принципе это все можно организовать на чистом С через структуры и динамическое выделение/освобождение памяти.
так можно решить проблему кроссплатформенности.
=AK=
Цитата(MrYuran @ May 7 2009, 20:24) *
Паскаль - надёжность
Си - гибкость и вседозволенность

Форт - компактность и вседозволенность.

Форт компактен в нескольких смыслах. Во-первых, скомпилированный байт-код типично в 3-10 раз компактнее, чем скомпилированная С программа, за счет того, что в коде почти отсутствуют адреса (команды стековой машины 0-адресные), а также за счет великолепной факторизации кода, сопровождающейся нулевыми издержками при передаче параметров в функции и из них. Во-вторых, исходник Форта раза в 2-3 компактнее исходника на любом другом языке за счет отсутствия любых синтаксических "рюшечек" (скобок, двоеточий и т.п.), а также за счет возможности использования любых символов для определения слова (например, в Форте команда "переслать вершину стека данных в стек возвратов" пишется двумя символами >R ). Исходники Форта лаконичны, в этом их достоинство и недостаток одновременно.

Вседозволенность у него выше, чем в С, потому что Форт-система в принципе обозрима и модифицируема. Программист может знать ее полностью, поскольку она компактна, а потому он может перекраивать ее под задачу по своему усмотрению. У С-шного программиста этой свободы нет, границы заданы тем, что умеет конкретный компилятор.
Kopa
Цитата(ukpyr @ May 7 2009, 15:27) *
а как организуется стек данных любого типа ? может вместе с данными в стек помещать сигнатуру типа ?
в принципе это все можно организовать на чистом С через структуры и динамическое выделение/освобождение памяти.
так можно решить проблему кроссплатформенности.


В Форте классические стеки данных ( отличный от используемого в программируемых калькуляторах )
первым вошел последним вышел.

На чистом С реализовано n-oе число Форт систем ( gforth, ficl, pfe, kforth и др. )
Один из недостатков этих систем не всегда удовлетворительная производительность
выполняемого кода. ( Например: в силу того, что оптимизатор Си компилятора не может
адекватно воспринять изменённую внутреннюю семантику кода )

P.S. Введение типов в Форт существуют ( например Strong Forth, в PostScripte стеки типизированы,
), но не приживаетсяsmile.gif.
Форт ещё можно характеризовать, как гиперрасширяемый язык.
А вседозволенность, граничит с анархией приведшая к большому количеству несовместимых Форт систем
( хотя узнаваемый базис Форта остаётся )
Также Форт можно отнести к общей группе цепочечных языков. http://concatenative.org

Статья в википедии http://ru.wikipedia.org/wiki/Конкатенативный язык программирования://http://ru.wikipedia.org/wiki/Конкат...рограммирования://http://ru.wikipedia.org/wiki/Конкат...рограммирования://http://ru.wikipedia.org/wiki/Конкат...рограммирования://http://ru.wikipedia.org/wiki/Конкат...рограммирования://http://ru.wikipedia.org/wiki/Конкат...рограммирования://http://ru.wikipedia.org/wiki/Конкат...рограммирования

Цитата(=AK= @ May 7 2009, 17:22) *
Cкомпилированный байт-код типично в 3-10 раз компактнее, чем скомпилированная С программа,


Ремарка: Часто современные Форт системы транслируют код в нативные команды целевого железа!

Использование СЛОВА, как основного элемента программирования наиболее адекватно одному
из основных принципов экстремального программирования - оперировать, как можно меньшими порциями
информации и иметь возможность немедленно ( интерактивно и локально ) проверить работоспособность кода.smile.gif
MrYuran
Прям заинтриговали...
Сразу вспомнился монитор ZX Spectrum, где в 8кБ было уложено всё что только можно - от плавающей арифметики до рисования фигур на экране
Там тоже всё через стек взаимодействовало
Kopa
Цитата(MrYuran @ May 8 2009, 07:56) *
Прям заинтриговали...
Сразу вспомнился монитор ZX Spectrum, где в 8кБ было уложено всё что только можно - от плавающей арифметики до рисования фигур на экране
Там тоже всё через стек взаимодействовало


Цитата из статьи "Бородатый мальчик и его самолетики" про Джефа Раскина
http://www.itc.ua/node/20219

Код
...
В общем, дальше об этой истории с Macintosh написано столько, что здесь мне повторяться нет смысла.
Джеф Раскин вскоре после создания "самого персонального компьютера" покидает Apple.
И... разрабатывает компьютер не менее, если не более яркий. Правда, далеко ненастолько обласканный любопытными журналистами,
и потому почти совсем неизвестный нелюбопытным читателям.

Речь идет о выпускавшейся Canon машине Cat. Всего за шесть месяцев жизни на рынке Canon Cat было произведено
и продано более двадцати тысяч этих машин. По выбранной элементной базе и основным конструктивным решениями они были похожи на Macintosh
-- тот же процессор Motorola 68000, тот же "интегрированный" монитор. Но на этом сходство, пожалуй, и заканчивается.
Макроархитектурно Canon Cat во многом похож на Lisp-машины -- это тоже "машина одного языка",
правда, в ней используется близкий к функциональным языкам программирования,
но крайне простой в реализации виртуальной машины "стековый" язык Forth.

Именно компактный Forth позволил "утрамбовать" в 256 KB ПЗУ Cat весьма любопытный интегрированный комплект программ,
поддерживающий обработку текстов, проверку правописания (со словарем из 90 тыс. слов), вычисления в режиме калькулятора,
решение ряда коммуникационных задач, и, наконец, -- программирование на Forth и языке ассемблера M68000.
...


P.S. А сейчас при использовании контроллеров и 512Кб может не хватитьsmile.gif
Код
Первый закон пользовательского интерфейса Раскина:
"Компьютер не должен своим действием наносить ущерб работе Человека
и не должен своим бездействием способствовать ущербности работы Человека".
=AK=
Цитата(Kopa @ May 8 2009, 14:05) *
Часто современные Форт системы транслируют код в нативные команды целевого железа!

Это когда гонятся за скоростью. Помнится, такой Форт для РС по имени SPF4 (со встроенным оптимизатором) "уделывал" по бенчмаркам С-шные программы.
MrYuran
А как там с объектноориентированностью и прочими абстракциями?
Kopa
Цитата(MrYuran @ May 8 2009, 09:05) *
А как там с объектноориентированностью и прочими абстракциями?


Реализаций ООП для Форта существуют разные - от несколько десятков строк до ...
в SPF4 ( http://spf.sourceforge.net/ ) , в основном от одного разработчика, но SPF4 это для программирования
на PC. В других Форт системах могут иметь свои различия.

P.S. Есть ещё "абстракции" у разработчиков разных Форт систем.Что интересует?
( модули, парсеры, BNF, back tracing, регулярные выражения, автоматы и др. )

Цитата(=AK= @ May 8 2009, 08:54) *
Помнится, такой Форт для РС по имени SPF4 (со встроенным оптимизатором)
"уделывал" по бенчмаркам С-шные программы.


Не уделывал, а давал сопоставимые результаты, ( см. http://www.forth.org.ru/~af/shootout.htm результаты
тестирования отчасти устарели ) но при желании добавляя правила в оптимизатор можно и обойтиsmile.gif

P.S. Опережал, возможно, на рекурсивном тесте Фибоначи.
IgorKossak
Цитата(MrYuran @ May 8 2009, 09:05) *
А как там с объектноориентированностью и прочими абстракциями?

Вот интересная полемика на эту тему.
Kopa
Цитата(=AK= @ May 8 2009, 08:54) *
Это когда гонятся за скоростью.


Оценочная таблица производительности некоторых Форт систем.
( С SPF4 были некоторые проблемы для двух тестов \ т.к. у SPF4 одно пространство для кода и данных
, но сейчас возможно уже всё исправлено )

Код
*************************************************
Pentium 4 2.8GHz, 512Mb DDR266 RAM, Windows XPpro
*************************************************

VFX        VFX Forth for Windows v3.70 [build 1706]
SF2        SwiftForth 2.2.2.9  07 May 2001
iForth       version 1.12.8722, generated 23:39:13, June 8, 2002.
SP-Forth   Version 4.00 Build 015 at 29.Apr.2004
W32F       Win32Forth 6.09.12 Build 6 (indirect threaded code)
gff        gforth-fast 0.6.2

All with no specifics and no hackery

Test time including overhead (ms)         VFX  iForth     SF2    SPF4    W32F     gff
DO LOOP                                    16       0      16       0      15       3
+                                           0       0       0       0       0       4
M+                                          0      16       0      16      16       9
*                                           0       0      15       0      31       5
/                                          16      16      16      16      16      15
M*                                         15       0      16      15      16       8
M/                                          0      15       0      16      31      86
/MOD                                       16      16      31      16      15      15
*/                                         15      15      15      31      47      95
ARRAY fill                                 16      32      16       0      32      11
================================================================================
=====
Total:                                     94     110     125     110     219     251

Win32 API: SendMessage                      0       0      16       0      15       0
Win32 API: GetTickCount                    63      47      15      79      16     570
System I/O: KEY?                            0       0     282     265       0     717
================================================================================
=====
Total:                                     63      47     313     344      31    1287

Eratosthenes sieve 1899 Primes             94     203     281     172    1375     262
Fibonacci recursion ( 35 -> 9227465 )     188     343     156     172    1562     480
Hoare's quick sort (reverse order)         78     485     281     141    1407     467
Generate random numbers (1024 kb array)   140    1031     141    1015    1468     235
LZ77 Comp. (400 kb Random Data Mem>Mem)   157    1500    1047     703    2219     470
Dhrystone (integer)                       156     219     297     157    1734     363
================================================================================
=====
Total:                                    813    3781    2203    2360    9765    2277
Time (ratio to VFX):                     1.00    4.65    2.71    2.90   12.01    2.80


P.S. SPF4 не самая быстрая Форт система для PC ( коммерческая VFX \ кроме SF2 и i-Forth
показывает лучшие результаты )
Kopa
Цитата(Kopa @ May 5 2009, 15:27) *
В SeaForth ~32 ( про него можно почитать публикацию в 4-ом номере журнала "Компоненты и технологии"
за этот год.


И по ссылке автора статьи " Процессоры семейства SeaForth"
MrYuran
Почитал немного, ознакомился, скачал тинибут.
Всё вроде бы хорошо, однако непонятно, как быть с прерываниями.
Что-то в явном виде не нашёл нигде

А без них ведь никак...

Или может не с того начал?
АВР вообще-то не моя тема, мне ближе МСП

Вот кой-чего по МСП нашёл, но товарищи хотят 180 стерлингов фунтов за комплект
Kopa
Цитата(MrYuran @ May 13 2009, 09:40) *
Почитал немного, ознакомился, скачал тинибут.
Всё вроде бы хорошо, однако непонятно, как быть с прерываниями.
Что-то в явном виде не нашёл нигде


Прерывания описываются через директиву ORG ( сами ветора для разных
контроллеров описаны в конфигурационном файле начинающееся с INT
) Например в demoavr:
Код
  here \ оставим на стеке текущий указатель в строящемся целевом образе Flash  
\ resolve interrupt vectors -----------------------------------------
000       org assemble rjmp b_cold c; \ пропишем по 0 адресу вектор холодного старта
INT_T0OV  org assemble rjmp T0isr  c; \ ...
org \ востановим указатель по запомненному HERE со стека


Цитата(MrYuran @ May 13 2009, 09:40) *
Или может не с того начал?
АВР вообще-то не моя тема, мне ближе МСП


MSP430 в tinyboot не поддержан, но это не так сложно т.к. он близок к PDP-11.
а под него уже есть адаптацияsmile.gif

P.S. А что скачали - оригинальный дистрибутив или с сайта радиолюбителей
версию только для Mega128? Есть некоторый "вольный" перевод документации
из неё.


Цитата(MrYuran @ May 13 2009, 09:40) *
Вот кой-чего по МСП нашёл, но товарищи хотят 180 стерлингов фунтов за комплект


Для MSP430 есть и свободные Форт разработки.

P.S. Требуемую функциональнось Форта для MSP можно сделать своими силами.smile.gif
MrYuran
Цитата(Kopa @ May 13 2009, 10:48) *
P.S. А что скачали - оригинальный дистрибутив или с сайта радиолюбителей
версию только для Mega128? Есть некоторый "вольный" перевод документации
из неё.

Всё скачал, что только было. И оригинал, и мод мегу, и дополнения одного товарища, который форт ниасилил, зато приспособил под структурный ассемблер
Цитата
P.S. Требуемую функциональнось Форта для MSP можно сделать своими силами.smile.gif

Это я уже понял, как глянул на исходник инлайн -ассемблера
Однако, как всегда, хочется готовое что-то найти, чтобы не изобретать велосипед.
Да и времени не так уж много. По работе образовался прогал, вот и развлекаюсь для общего развития.

А в прерываниях как я понимаю, надо вручную сохранять весь контекст, ведь если прервали на полуслове, в регистрах может содержаться какая-то промежуточная информация.
Kopa
Цитата(MrYuran @ May 13 2009, 10:16) *
Однако, как всегда, хочется готовое что-то найти, чтобы не изобретать велосипед.
Да и времени не так уж много. По работе образовался прогал, вот и развлекаюсь для общего развития.


В Форте, часто, разработчики создают "свои велосипеды" из своего понимания необходимостиsmile.gif
Есть ещё коммерческие VFX и SwiftForth, но для них не под все контроллеры имеются ключики,
да и держать свою Форт систему под полным контролем надёжнее.
Для MSP можно взять разные варианты кросс-компиляции ( есть с использованием SPF4 создания
hex кодов для проекта в IAR ссылка на Форт для разных контроллеров была выше)

Цитата(MrYuran @ May 13 2009, 10:16) *
А в прерываниях как я понимаю, надо вручную сохранять весь контекст, ведь если прервали на полуслове, в регистрах может содержаться какая-то промежуточная информация.


Скорее всего, только общие регистры временного использования ( см распределение регистров ),
а с другими обращаться "внимательней".
Примитивы Форта, в основном, используют 2-3,4 регистра для своей операции.
Под верхушку стека резервируют один регистр - остальная часть стека в памяти.
IgorKossak
Цитата(Kopa @ May 13 2009, 10:45) *
Примитивы Форта, в основном, используют 2-3,4 регистра для своей операции.
Под верхушку стека резервируют один регистр - остальная часть стека в памяти.

Это если не подключать тяжёлых словарей типа плавающей точки и вычислений с длинными числами. Но это опять же зависит от функции, выполняемой в прерывании.
Kopa
Цитата(IgorKossak @ May 13 2009, 13:06) *
Это если не подключать тяжёлых словарей типа плавающей точки и вычислений с длинными числами. Но это опять же зависит от функции, выполняемой в прерывании.


Плавающая точка может быть реализована и через примитивы Фортаsmile.gif
( эффективно это или нет не знаю, но в FF оно есть )
+ глобальные переменные если не использовать локальных.

а использование прерываний можно организовать по разному.

P.S. Какое продвижение в использовании Форта было у Вас и
можно ли увидеть эти наработки?
MrYuran
Цитата(Kopa @ May 13 2009, 13:32) *
Плавающая точка может быть реализована и через примитивы Фортаsmile.gif
( эффективно это или нет не знаю, но в FF оно есть )
+ глобальные переменные если не использовать локальных.

Вчера полдня читал книжку, в которой плавающая точка гневно осуждается, а вместо неё рекомендуется применять операцию масштабирования */ и фиксированную двоичную точку. А мы как-то не задумываясь лепим плавающую математику где ни попадя... Притом что недавно попались результаты тетсбенчей - плавающее деление на МСП выполняется что-то около 900 мкс (!)
Целочисленное - на порядок быстрее
Rst7
Цитата
Целочисленное - на порядок быстрее


К сожалению - нет. Деление, что целочисленное, что с ПЗ - почти одинаково. Там же, грубо говоря, одно на другое разделить, а порядки - вычесть. Ну и плюс нормализация.

Умножение - тоже (умножаем и складываем порядки). Сложение и вычитание - вот там заметно медленнее.
IgorKossak
Цитата(Kopa @ May 13 2009, 12:32) *
P.S. Какое продвижение в использовании Форта было у Вас и
можно ли увидеть эти наработки?

Увы, продвижением самого Форта я не занимался, сроки были больно сжатые. Я всего лишь писал приложение (для AT90S8515) на базе того, что было на тот момент в TinyBoot. Потом, где-то через год пытался переписать всё на С под IAR, но не влез в доступную flash. Исходники мне не принадлежат, поэтому выложить не могу.
Kopa
Цитата(IgorKossak @ May 13 2009, 14:22) *
Я всего лишь писал приложение (для AT90S8515) на базе того, что было на тот момент в TinyBoot. Потом, пытался переписать всё на С под IAR, но не влез в доступную flash.


В TinyBoot, если не принимать дополнительных действий ( по сокращению ядра ),
неиспользуемая часть ядра не убирается из созданного flash образа
( это не сильно давило или использовался в большей степени внутренний ассемблер системы? )

P.S. Частично думаю, управлять этим можно, если использовать возможности байт-кода в системе
или иметь реализацию генерации с шитым кодом вместо нативного.
Оптимизатор Форт кода в tb в целом слабый.
MrYuran
А файлы описания камней тоже все перепахивать придётся
#define x y придётся заменять на : x y; а может и похитрее как-нето
Kopa
Цитата(MrYuran @ May 13 2009, 15:29) *
А файлы описания камней тоже все перепахивать придётся
#define x y придётся заменять на : x y; а может и похитрее как-нето


Лучше с использованием слова asmlabel, для того чтобы константы,
по ненадобности не попали в целевой образ, а остались в builder зоне.
( ещё см файл alabavrm.ff )

P.S. Простую поддержку #define можно добавить т.к. это не сложноsmile.gif
но возможно потребуется перекомпиляция исходного ядра системы.
( опыт был при расширении системы описания констант битами и
добавлении поддержки более полноценных макросов )
есть подводные камни
( т.к. не любой версией win32forth проект соберётся, но как же без трудностейsmile.gif
MrYuran
Блин, вот же зараза...
Я теперь по ночам спать спокойно не могу!
И на си глядеть тоже...
Всё мерещится типа "а вот этот кусок можно было парой слов написать"!
Kopa
Цитата(MrYuran @ May 14 2009, 12:57) *
Блин, вот же зараза...
Я теперь по ночам спать спокойно не могу!
И на си глядеть тоже...
Всё мерещится типа "а вот этот кусок можно было парой слов написать"!


Поздравляю. "Форт-вирус" проник в Ваше сознаниеsmile.gif

P.S. На си я гляжу спокойнее, но мыслить при программировании, в рамках Форт базиса,
почему то комфортнее ( и даже необходимость использования стека не особо замечаешьsmile.gif
Приятного чтения второй книги Броуди " Способ мышления Форт" ( Thinking Forth )
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.