Перейти к содержанию
    

А вот бы на FORTH написать...

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

Это когда гонятся за скоростью. Помнится, такой Форт для РС по имени SPF4 (со встроенным оптимизатором) "уделывал" по бенчмаркам С-шные программы.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А как там с объектноориентированностью и прочими абстракциями?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А как там с объектноориентированностью и прочими абстракциями?

 

Реализаций ООП для Форта существуют разные - от несколько десятков строк до ...

в SPF4 ( http://spf.sourceforge.net/ ) , в основном от одного разработчика, но SPF4 это для программирования

на PC. В других Форт системах могут иметь свои различия.

 

P.S. Есть ещё "абстракции" у разработчиков разных Форт систем.Что интересует?

( модули, парсеры, BNF, back tracing, регулярные выражения, автоматы и др. )

 

Помнится, такой Форт для РС по имени SPF4 (со встроенным оптимизатором)

"уделывал" по бенчмаркам С-шные программы.

 

Не уделывал, а давал сопоставимые результаты, ( см. http://www.forth.org.ru/~af/shootout.htm результаты

тестирования отчасти устарели ) но при желании добавляя правила в оптимизатор можно и обойти:)

 

P.S. Опережал, возможно, на рекурсивном тесте Фибоначи.

Изменено пользователем Kopa

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А как там с объектноориентированностью и прочими абстракциями?

Вот интересная полемика на эту тему.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Это когда гонятся за скоростью.

 

Оценочная таблица производительности некоторых Форт систем.

( С 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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В SeaForth ~32 ( про него можно почитать публикацию в 4-ом номере журнала "Компоненты и технологии"

за этот год.

 

И по ссылке автора статьи " Процессоры семейства SeaForth"

Изменено пользователем Kopa

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Почитал немного, ознакомился, скачал тинибут.

Всё вроде бы хорошо, однако непонятно, как быть с прерываниями.

Что-то в явном виде не нашёл нигде

 

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

 

Или может не с того начал?

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

 

Вот кой-чего по МСП нашёл, но товарищи хотят 180 стерлингов фунтов за комплект

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Почитал немного, ознакомился, скачал тинибут.

Всё вроде бы хорошо, однако непонятно, как быть с прерываниями.

Что-то в явном виде не нашёл нигде

 

Прерывания описываются через директиву 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 со стека

 

Или может не с того начал?

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

 

MSP430 в tinyboot не поддержан, но это не так сложно т.к. он близок к PDP-11.

а под него уже есть адаптация:)

 

P.S. А что скачали - оригинальный дистрибутив или с сайта радиолюбителей

версию только для Mega128? Есть некоторый "вольный" перевод документации

из неё.

 

 

Вот кой-чего по МСП нашёл, но товарищи хотят 180 стерлингов фунтов за комплект

 

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

 

P.S. Требуемую функциональнось Форта для MSP можно сделать своими силами.:)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

P.S. А что скачали - оригинальный дистрибутив или с сайта радиолюбителей

версию только для Mega128? Есть некоторый "вольный" перевод документации

из неё.

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

P.S. Требуемую функциональнось Форта для MSP можно сделать своими силами.:)

Это я уже понял, как глянул на исходник инлайн -ассемблера

Однако, как всегда, хочется готовое что-то найти, чтобы не изобретать велосипед.

Да и времени не так уж много. По работе образовался прогал, вот и развлекаюсь для общего развития.

 

А в прерываниях как я понимаю, надо вручную сохранять весь контекст, ведь если прервали на полуслове, в регистрах может содержаться какая-то промежуточная информация.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Однако, как всегда, хочется готовое что-то найти, чтобы не изобретать велосипед.

Да и времени не так уж много. По работе образовался прогал, вот и развлекаюсь для общего развития.

 

В Форте, часто, разработчики создают "свои велосипеды" из своего понимания необходимости:)

Есть ещё коммерческие VFX и SwiftForth, но для них не под все контроллеры имеются ключики,

да и держать свою Форт систему под полным контролем надёжнее.

Для MSP можно взять разные варианты кросс-компиляции ( есть с использованием SPF4 создания

hex кодов для проекта в IAR ссылка на Форт для разных контроллеров была выше)

 

А в прерываниях как я понимаю, надо вручную сохранять весь контекст, ведь если прервали на полуслове, в регистрах может содержаться какая-то промежуточная информация.

 

Скорее всего, только общие регистры временного использования ( см распределение регистров ),

а с другими обращаться "внимательней".

Примитивы Форта, в основном, используют 2-3,4 регистра для своей операции.

Под верхушку стека резервируют один регистр - остальная часть стека в памяти.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Примитивы Форта, в основном, используют 2-3,4 регистра для своей операции.

Под верхушку стека резервируют один регистр - остальная часть стека в памяти.

Это если не подключать тяжёлых словарей типа плавающей точки и вычислений с длинными числами. Но это опять же зависит от функции, выполняемой в прерывании.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Это если не подключать тяжёлых словарей типа плавающей точки и вычислений с длинными числами. Но это опять же зависит от функции, выполняемой в прерывании.

 

Плавающая точка может быть реализована и через примитивы Форта:)

( эффективно это или нет не знаю, но в FF оно есть )

+ глобальные переменные если не использовать локальных.

 

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

 

P.S. Какое продвижение в использовании Форта было у Вас и

можно ли увидеть эти наработки?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Плавающая точка может быть реализована и через примитивы Форта:)

( эффективно это или нет не знаю, но в FF оно есть )

+ глобальные переменные если не использовать локальных.

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

Целочисленное - на порядок быстрее

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Целочисленное - на порядок быстрее

 

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

 

Умножение - тоже (умножаем и складываем порядки). Сложение и вычитание - вот там заметно медленнее.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

P.S. Какое продвижение в использовании Форта было у Вас и

можно ли увидеть эти наработки?

Увы, продвижением самого Форта я не занимался, сроки были больно сжатые. Я всего лишь писал приложение (для AT90S8515) на базе того, что было на тот момент в TinyBoot. Потом, где-то через год пытался переписать всё на С под IAR, но не влез в доступную flash. Исходники мне не принадлежат, поэтому выложить не могу.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...