|
|
  |
А вот бы на FORTH написать..., ;-) |
|
|
|
May 29 2009, 10:15
|
Знающий
   
Группа: Участник
Сообщений: 598
Регистрация: 22-08-05
Пользователь №: 7 861

|
Цитата(Rst7 @ May 29 2009, 14:01)  Форт обладает хорошими возможностями для упрощения построения таких языков. Хотя, я бы еще поспорил, где проще. ." Hello World " Куда уж проще Или минимальный код выводящий себя в консоль на Форте Код SOURCE TYPE Цитата(Rst7 @ May 29 2009, 14:01)  Вот, например, обожаемый в современном функциональном программировании Хаскель... Не менее любимая Scheme используется в проекте Staapl для компилирования Форт программ для PIC18 Код Staapl is a collection of abstractions for (meta)programming microcontrollers from within PLT Scheme. The core of the system is a programmable code generator structured around a functional concatenative macro language. On top of this it includes a syntax frontend for creating Forth-style languages, a backend code generator for Microchip's PIC18 microcontroller architecture, and interaction tools for shortening the edit-compile-test cycle. P.S. Просто примеры. Получается сам Форт в этом случае DSL?
|
|
|
|
|
May 29 2009, 10:26
|

Йа моск ;)
     
Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610

|
Цитата Куда уж проще Не совсем понятно, к чему это. Я пример привел в том смысле, что реализация DSL на Хаскеле возможна вообще на этапе компиляции, не то что в рантайме (в рантайме любой лох при помощи yacc/lexx за три часа езыг сляпает  ). В примере в качестве DSL выступает Бейсик  Цитата Получается сам Форт в этом случае DSL? Почему бы и нет. Цитата Предметно-ориентированный язык программирования (англ. domain-specific programming language, domain-specific language, DSL) — язык программирования, специально разработанный для решения определённого круга задач, в отличие от языков программирования общего назначения...
В рамках Forth языка всегда существовала, но не всегда использовалась возможность создания DSL языков.
--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
|
|
|
|
|
May 29 2009, 10:38
|
Знающий
   
Группа: Участник
Сообщений: 598
Регистрация: 22-08-05
Пользователь №: 7 861

|
Цитата(Rst7 @ May 29 2009, 14:26)  Не совсем понятно, к чему это. Я пример привел в том смысле, что реализация DSL на Хаскеле возможна вообще на этапе компиляции, не то что в рантайме ( Наверное и я не понял. В Форте на этапе трансляции кода или после уже созданного exe Можно подгружать необходимые DSL расширения. Цитата(ukpyr @ May 29 2009, 14:05)  Если интересна тема BNF парсинга на Форте одна из реализаций  P.S. Приводить ссылки в данном топике возможно мало смысла? т.к. много ссылок по Форт тематике можно найти просматривая Русский Форт Форум Пока до понедельника
Сообщение отредактировал Kopa - May 29 2009, 11:16
|
|
|
|
|
Jun 3 2009, 12:35
|

Беспросветный оптимист
     
Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646

|
Начал я таки колупать КэмелФорт. Тяжело даётся асм изнеженному сями организму! Попутно рождаются вопросы. Например, как символически обозначить регистры, биты и прочие константы? которые обычно назначаются дефайнами и подставляются препроцессором? Думаю, константами назначить. Эх, прям руки чешутся быстрее что-нибудь сварганить... А у меня как назло все железки без иллюминации и спецэффектов, тупая измериловка. Ну хоть через терминал пообщаться. Ну чё, в первом приближении что-то заработало!
Копаем дальше...  Кстати, я передумал. Регистры, наверно, правильнее переменными задавать. Щас подумаю ещё немного и попробую ногами помахать.
--------------------
Программирование делится на системное и бессистемное. ©Моё :) — а для кого-то БГ — это Bill Gilbert =)
|
|
|
|
|
Jun 4 2009, 03:29
|
Знающий
   
Группа: Участник
Сообщений: 598
Регистрация: 22-08-05
Пользователь №: 7 861

|
Цитата(MrYuran @ Jun 3 2009, 16:35)  Ну хоть через терминал пообщаться.
Ну чё, в первом приближении что-то заработало! Поздравляю с первыми результатами! Цитата(MrYuran @ Jun 3 2009, 16:35)  Копаем дальше...  Кстати, я передумал. Регистры, наверно, правильнее переменными задавать. Щас подумаю ещё немного и попробую ногами помахать. В реализации Форта на родном трансляторе ассемблера есть некоторые "несуразности" ( высокоуровневый код представлен через директивы данных для формирования адресных ссылок ) Возможно придётся использовать небольшой генератор кода при этом. Если есть в реализации поддержка режима самопрограммирования или bootloader-а, то тоже неплохо. P.S. Начал тоже небольшие раскопки "трупика" Форта для MSP:) ( Рассматриваю возможные варианты). Да, для регистров это наверное правильно.
Сообщение отредактировал Kopa - Jun 4 2009, 03:32
|
|
|
|
|
Jun 4 2009, 04:15
|

Частый гость
 
Группа: Участник
Сообщений: 95
Регистрация: 13-12-07
Пользователь №: 33 246

|
Цитата(MrYuran @ Jun 3 2009, 19:35)  Ну чё, в первом приближении что-то заработало! Поздравляю! Кстати, камень - MSP430F1611 ?
|
|
|
|
|
Jun 4 2009, 04:19
|

Беспросветный оптимист
     
Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646

|
Да, впечатлений на целый вечер хватило. С помощью цепочки дупов, ротов и какой-то матери через час таки реализовал сишные конструкции P1OUT |= mask; и P1OUT &= ~mask; и таки махнул ногой туда-обратно! Но это, конечно, от незнания основ. Например, дублирование пары аргументов на стеке наверно удобнее делать через стек возвратов, а не кручением-верчением, как я. Ещё очень нужен инлайн-ассемблер. Буду копать пока в этом направлении. Книжку вот доделываю, черновой вариант почти готов (7 глав, осталось 8-ю и эпилог). Думаю, выложить лучше на ФТП. Правда, за инет надо сначала заплатить, всё не соберусь никак. А на работе сисадмин все "лишние" порты позакрывал. Разобрался, как товарищ Джей Родригес предлагает проводить целевую компиляцию: There are TWO WAYS to write programs in CamelForth: Цитата 1. If you have CamelForth running on your MSP430 board, you can download Forth code directly to CamelForth. ... Ну это понятно, как я вчера делал. В терминале набивал буковки, потом ждал "ок". По умолчанию компилирует в ОЗУ. Хорошо для тестирования, флешь зазря не трёт. Цитата 2. You can add your code to the assembler source files. This requires you to convert your Forth code to assembler code. To show how this is done, every high-level Forth word in the file is shown with its equivalent Forth code in a comment. Be especially careful with control structures (IF..ELSE..THEN, BEGIN..UNTIL, DO..LOOP, and the like), and with the Forth word headers. For this option it is recommended that you create a new .s43 assembler file, and INCLUDE it at the end of core430.s43. This is necessary to preserve the dictionary linking between your new definitions and the kernel definitions. Reassemble core430.s43, and download to the MSP430 board, then test. This is a much slower process, and is best saved for the final stage when you have a tested & debugged program that you want to put in PROM. А вот это поинтереснее. Предлагается переписать фортовый исходник в виде ассемблерных макросов (весьма близко к исходному тексту), а затем скомпилировать ИАРом. В этом случае наверняка и оптимизация выполняется, выкидываются неиспользованные слова. Можно ещё подумать над тем, как выкидывать из конечной прошивки названия слов. (Если не предусматривается возможность интерактивной работы с конечным кодом) Сегодня попробую замерить скорость "ногодрыгания" при использовании стандартных средств. Вообще, пока главное преимущество форта вижу в потенциальной возможности "впихать невпихуемое". (при правильном подходе  ) Цитата(chu @ Jun 4 2009, 08:15)  Поздравляю! Кстати, камень - MSP430F1611 ? Нет, 149. Но это без разницы, ибо Цитата System Requirements As distributed, CamelForth/430 will assemble to run on the New Micros Tini430 board, which uses the MSP430F1611 processor. It assumes an 8 MHz crystal for XT2, and USART0 at 9600 baud (8,N,1) for terminal I/O.
CamelForth should be usable with any MSP430 device having at least 512 bytes of RAM, 8K of ROM, and one USART.
CamelForth/430 is written to be assembled with the IAR Systems MSP430 Workbench "Kickstart", which can be downloaded from the TI web page. Кварц у меня тоже не 8М, а 2. Пришлось поменять коэффициент деления для контроллера флеши (кстати, неправильно, я его в 2 раза понизил, а надо в 4), и обмен вместо 9600 на 2400.
--------------------
Программирование делится на системное и бессистемное. ©Моё :) — а для кого-то БГ — это Bill Gilbert =)
|
|
|
|
|
Jun 4 2009, 04:27
|

Частый гость
 
Группа: Участник
Сообщений: 95
Регистрация: 13-12-07
Пользователь №: 33 246

|
Цитата(MrYuran @ Jun 4 2009, 11:19)  Да, впечатлений на целый вечер хватило. Есть еще SwiftX MSP430 от Forth, inc. Весьма любопытная ( и удобная система ) Pro версия стоит $1095, Evaluation - бесплатна, но ограничена по обьему кода, и не имеет исходников кросс-компилера... Рекомендую ознакомиться. http://www.forth.com/embedded/index.html
|
|
|
|
|
Jun 4 2009, 06:18
|
Знающий
   
Группа: Участник
Сообщений: 598
Регистрация: 22-08-05
Пользователь №: 7 861

|
Цитата(MrYuran @ Jun 4 2009, 07:19)  Да, впечатлений на целый вечер хватило. С помощью цепочки дупов, ротов и какой-то матери через час таки реализовал сишные конструкции P1OUT |= mask; и P1OUT &= ~mask; и таки махнул ногой туда-обратно!
Но это, конечно, от незнания основ. Это могло выглядеть например так: Код mask P1OUT OR! mask INVERT P1OUT AND! или даже так как написано в Си коде  Цитата(MrYuran @ Jun 4 2009, 07:19)  Например, дублирование пары аргументов на стеке наверно удобнее делать через стек возвратов, а не кручением-верчением, как я. Если необходимо продублировать 2-а верхних значения то слово 2DUP Часто используемый приём в Форте перенос верхнего значения стека данных на стек возвратов >R и использование через R@ а убирание для последнего использования R> Если есть поддержка локальных переменных, то используется они при сложных случаях. Цитата(MrYuran @ Jun 4 2009, 07:19)  Ещё очень нужен инлайн-ассемблер. Буду копать пока в этом направлении. Да необходим, чтобы использовать максимально возможности контроллера  Цитата(MrYuran @ Jun 4 2009, 07:19)  Книжку вот доделываю, черновой вариант почти готов (7 глав, осталось 8-ю и эпилог). Думаю, выложить лучше на ФТП. Правда, за инет надо сначала заплатить, всё не соберусь никак. А на работе сисадмин все "лишние" порты позакрывал. А если выложить где и расположен исходный материал ( на sf ) Цитата(MrYuran @ Jun 4 2009, 07:19)  Разобрался, как товарищ Джей Родригес предлагает проводить целевую компиляцию: А вот это поинтереснее. Предлагается переписать фортовый исходник в виде ассемблерных макросов (весьма близко к исходному тексту), а затем скомпилировать ИАРом. В этом случае наверняка и оптимизация выполняется, выкидываются неиспользованные слова. Наверное, но соптимизировать сам Форт код IAR, скорее всего, не сможет. ( если разработчикам IAR не подсказать, как их компилятор могут и используют для Форт программирования  в GCC, возможно есть изменения в этом направлении, т.к. gforth показывает неплохие результаты при benchmark тестировании.) Цитата(MrYuran @ Jun 4 2009, 07:19)  Можно ещё подумать над тем, как выкидывать из конечной прошивки названия слов. (Если не предусматривается возможность интерактивной работы с конечным кодом) В данном варианте, скорее всего, используя возможности макро языка ассемблера MSP. Цитата(MrYuran @ Jun 4 2009, 07:19)  Сегодня попробую замерить скорость "ногодрыгания" при использовании стандартных средств. Скорее всего не так быстро  , если в реализации нет, например, макро-оптимизатора. Цитата(MrYuran @ Jun 4 2009, 07:19)  Вообще, пока главное преимущество форта вижу в потенциальной возможности "впихать невпихуемое". (при правильном подходе  ) Действительно - это неплохо сформулировано в книге Ноздрунова,Баранова . Цитата(MrYuran @ Jun 4 2009, 07:19)  и обмен вместо 9600 на 2400. В tinyboot комфортная скорость терминального канала ~38400
|
|
|
|
|
Jun 4 2009, 06:42
|

Беспросветный оптимист
     
Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646

|
Цитата(Kopa @ Jun 4 2009, 10:18)  А если выложить где и расположен исходный материал ( на sf ) Да не, туда в таком виде как-то стрёмно... Вот если бы также оформить, как там, тогда уж... Но это в обозримом будущем вряд ли...
--------------------
Программирование делится на системное и бессистемное. ©Моё :) — а для кого-то БГ — это Bill Gilbert =)
|
|
|
|
|
Jun 4 2009, 07:25
|
Знающий
   
Группа: Участник
Сообщений: 598
Регистрация: 22-08-05
Пользователь №: 7 861

|
Цитата(chu @ Jun 4 2009, 07:27)  Есть еще SwiftX MSP430 от Forth, inc. Весьма любопытная ( и удобная система ) Pro версия стоит $1095, Evaluation - бесплатна, но ограничена по обьему кода, и не имеет исходников кросс-компилера... Рекомендую ознакомиться. http://www.forth.com/embedded/index.html Evaluation запускал, у SwiftX, в сравнении с VFX ( от MPE ) не такой хороший оптимизатор. ( если это критично ) стоимость VFX для MSP430 ( price list 384.65 / 777.15$ ) . P.S. Но, как вариант, тоже можно рассматривать и использовать. Цитата(MrYuran @ Jun 4 2009, 09:42)  Да не, туда в таком виде как-то стрёмно... Вот если бы также оформить, как там, тогда уж... Но это в обозримом будущем вряд ли... Один из вариантов использовать ресурс хранения на forth.org.ru P.S. Неполное дерево видовой эволюции Форт систем Русского spf4 на этом дереве нет
Сообщение отредактировал Kopa - Jun 4 2009, 08:15
|
|
|
|
|
Jun 4 2009, 08:35
|
Знающий
   
Группа: Участник
Сообщений: 598
Регистрация: 22-08-05
Пользователь №: 7 861

|
Цитата(MrYuran @ Jun 4 2009, 11:08)  Сейчас вот вырисовывается туманная перспектива колупания в ассемблерной прошивке старья на атмеловском AT89F8252... Если всё-таки придётся, (очень надеюсь, что нет) наверно попробую тинибут применить... Хотя бы в качестве макроассемблера Для 51, кроме других, есть интересные варианты быстрого использования из недавних ( сделаны на spf4 ) 1. исходный вариант 2. другое продолжение подхода выше
|
|
|
|
|
  |
4 чел. читают эту тему (гостей: 4, скрытых пользователей: 0)
Пользователей: 0
|
|
|