Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Вт мар 19, 2024 15:03

...
Google Search
Forth-FAQ Spy Grafic

Часовой пояс: UTC + 3 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 52 ]  На страницу 1, 2, 3, 4  След.
Автор Сообщение
 Заголовок сообщения: Форт и форт-процессор
СообщениеДобавлено: Чт мар 22, 2012 19:24 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 13:19
Сообщения: 3565
Откуда: St.Petersburg
Благодарил (а): 4 раз.
Поблагодарили: 72 раз.
Столкнулся с довольно странной ситуацией...

При попытке реализовать форт на форт-процессоре в результате появляется как бы два форта.

Внутренний и внешний...
Внутренний - это по сути ассемблер для форт-процессора, а внешний - это тот Форт, который видится программисту.

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

Выполнение верхнего примитива происходит с условием, что процессор вошел в его код с "пустыми стеками" и должен выйти с пустыми, иначе верхний стек переполнит нижний (и очень быстро!).

Вот пример:

Код:
DUP: \ это примитив верхнего форта
     DP@ \ берем адрес стека (верхнего!)
     DUP @ \ получаем верхний элемент
     OVER INC \ следующий адрес стека
     ! \ сохраняем новую вершину стека
     INC DP! \ обновляем адрес стека
     RET


Такая вот заноза....

Конечно, на нижнем уровне все ок. И все быстро, но на верхнем получается бяда!..

Сижу и думаю, как же этот узел разрубить?..

_________________
С уважением, WingLion
Forth-CPU . RuF09WE
Мой Форт
Отсутствие бана это не заслуга юзера, а недоработка модератора (с)


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Форт и форт-процессор
СообщениеДобавлено: Чт мар 22, 2012 19:57 
А для кого я писал, что Forth на Forth не реализуется? Обязательно наступать на все грабли самим? Простите.


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Форт и форт-процессор
СообщениеДобавлено: Чт мар 22, 2012 20:15 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 13:19
Сообщения: 3565
Откуда: St.Petersburg
Благодарил (а): 4 раз.
Поблагодарили: 72 раз.
gudleifr писал(а):
А для кого я писал, что Forth на Forth не реализуется?

На что спорим, что я его сделаю?

_________________
С уважением, WingLion
Forth-CPU . RuF09WE
Мой Форт
Отсутствие бана это не заслуга юзера, а недоработка модератора (с)


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Форт и форт-процессор
СообщениеДобавлено: Чт мар 22, 2012 20:25 
WingLion писал(а):
На что спорим, что я его сделаю?
"- А ты знаешь, Вася, с этого моста прыгать нельзя. - Это почему, еще?!"
Нельзя не в смысле "невозможно", а в смысле "ничего хорошего из этого не выйдет".


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Форт и форт-процессор
СообщениеДобавлено: Чт мар 22, 2012 20:30 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 13:19
Сообщения: 3565
Откуда: St.Petersburg
Благодарил (а): 4 раз.
Поблагодарили: 72 раз.
gudleifr писал(а):
Нельзя не в смысле "невозможно", а в смысле "ничего хорошего из этого не выйдет".


Не доказано... Про Форт, а не про мост...

_________________
С уважением, WingLion
Forth-CPU . RuF09WE
Мой Форт
Отсутствие бана это не заслуга юзера, а недоработка модератора (с)


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Форт и форт-процессор
СообщениеДобавлено: Чт мар 22, 2012 20:58 
WingLion писал(а):
Не доказано... Про Форт, а не про мост...
Доказывается элементарно. Forth - простейший способ написать проблемно-ориентированный язык. Ели на одном Forth (1) надстроен другой Forth (2). То либо (1) не Forth, либо (2) не простейший.
В переводе на русский: что есть целевая компиляция? Это сборка чего-то нового из фрагментов двух типов: разработанных заново и копируемых из родителя. Так вот, вторые собираемому Forth противопоказаны. Если их много, то целевая компиляция бессмысленна (Если только речь не идет об обрезании полной системы до решателя частной проблемы. Впрочем, здесь их тоже необходимо минимизировать, так что принцип работает).


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Форт и форт-процессор
СообщениеДобавлено: Чт мар 22, 2012 21:55 
WingLion писал(а):
Сижу и думаю, как же этот узел разрубить?..

Следить и не допускать переполнение стеков или наращиваить их глубину.
Ещё вариант перегруппировывать вычисления на стеке на небольшую глубину.

P.S. Общие рекомендации.


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Форт и форт-процессор
СообщениеДобавлено: Чт мар 22, 2012 22:03 
Не в сети

Зарегистрирован: Вт май 09, 2006 12:31
Сообщения: 3438
Благодарил (а): 5 раз.
Поблагодарили: 16 раз.
WingLion писал(а):
На что спорим, что я его сделаю?

А в чём конкретно проблема?
Т.е. из кода непонятно, чем проблематична ситуация
Слишком медленно? Форт на форте избыточно сложен?
Некрасиво делать элементарную операцию из 10 других элементарных операций?

Ведь где-то было автоматический анализ глубины стека (параллельно) и свопинг-подгрузка без потери скорости / без программных усилий?


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Форт и форт-процессор
СообщениеДобавлено: Чт мар 22, 2012 22:20 
Не в сети

Зарегистрирован: Вт май 09, 2006 12:31
Сообщения: 3438
Благодарил (а): 5 раз.
Поблагодарили: 16 раз.
Кстати, возможно, очень хорошо ложится на "редуцированный форт" - на трёхместные-программируемые операции

Рассмотрим...
Пусть у нас процессорно есть трехместная комманда перемещения-арифметики
одна-единственная редуцированная из А, В и С
А. взять по адресу 1
В. произвести операцию с адресом 2 (или NOOP - тогда без второго адреса)
С. положить по адресу 3
при этом, какую операцию производить в п. В. - решает некий флаг

DUP при этом будет выглядеть так
добавим переменную TEMP
1. А. взять указатель стека В. NOOP С. положить в TEMP
2. А. взять указатель стека В. увеличить на 1 (флаг?) С. положить обратно
3. А. взять по адресу TEMP В. разыменовать (тоже операция) С. положить по адресу указателя стека
DUP состоит из 3 редуцированных операций, каждая как бы из 3 частей, но все 3 части можно реализовать в железе (это экономно - напомним - эта трехчастная операция нужна всего одна)
и всё остальное так же, TEMP можно реализовать даже в железе ( ro2 показывает, что достаточно 2 таких переменных), но можно и в памяти


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Форт и форт-процессор
СообщениеДобавлено: Чт мар 22, 2012 23:05 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7958
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
WingLion писал(а):
Внутренний и внешний...
Внутренний - это по сути ассемблер для форт-процессора, а внешний - это тот Форт, который видится программисту.

Речь о модели форт-процессора на PC-Форте, или о кросс-компиляции? Кросс-компиляцию удобно сделать в другом словаре.
gudleifr писал(а):
А для кого я писал, что Forth на Forth не реализуется?

"А мужики-то не знают"... :)


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Форт и форт-процессор
СообщениеДобавлено: Пт мар 23, 2012 05:06 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 13:19
Сообщения: 3565
Откуда: St.Petersburg
Благодарил (а): 4 раз.
Поблагодарили: 72 раз.
Хищник писал(а):
Речь о модели форт-процессора на PC-Форте, или о кросс-компиляции?


Речь о Форте на встроенном процессоре, который на нем же и будет работать.
Чтобы потом на нем программы для прибора писать.
Не для галочки, а для реальной работы с прибором в живую.

Пишется он, разумеется, в кросс-компиляторе на PC. В качестве кросс-компилятора использую TASM с подключенным файлом макросов для форт-команд процессора.

_________________
С уважением, WingLion
Forth-CPU . RuF09WE
Мой Форт
Отсутствие бана это не заслуга юзера, а недоработка модератора (с)


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Форт и форт-процессор
СообщениеДобавлено: Пт мар 23, 2012 05:23 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 13:19
Сообщения: 3565
Откуда: St.Petersburg
Благодарил (а): 4 раз.
Поблагодарили: 72 раз.
вопрос писал(а):
Некрасиво делать элементарную операцию из 10 других элементарных операций?


Больше всего смущает именно это.

вопрос писал(а):
Ведь где-то было автоматический анализ глубины стека (параллельно) и свопинг-подгрузка без потери скорости / без программных усилий?


Это следующий шаг для форт-процессора, а пока он "маленький и нестрашный" (с)...

вопрос писал(а):
Кстати, возможно, очень хорошо ложится на "редуцированный форт"


Возможно. Если я правильно понял:

А@ B@ OPERATION C! \ взять две переменные провести операцию, сохранить в третьей.

DP@+ DP@+ ADD DP-! \ взять два элемента верхнего стека, сложить положить обратно в верхний стек

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

_________________
С уважением, WingLion
Forth-CPU . RuF09WE
Мой Форт
Отсутствие бана это не заслуга юзера, а недоработка модератора (с)


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Форт и форт-процессор
СообщениеДобавлено: Пт мар 23, 2012 10:59 
Не в сети

Зарегистрирован: Ср май 03, 2006 11:27
Сообщения: 1394
Откуда: St.Petersburg
Благодарил (а): 2 раз.
Поблагодарили: 11 раз.
WingLion писал(а):
Выполнение верхнего примитива происходит с условием, что процессор вошел в его код с "пустыми стеками" и должен выйти с пустыми, иначе верхний стек переполнит нижний (и очень быстро!).

Если не ошибаюсь, я понял проблему так: существует 2а стека - один быстрый но маленький, другой большой но медленный.
Хочется их объединить в один большой и быстрый.
Я предлагаю сделать быстрый стек в виде циклического буфера. Если размер буфера есть степень двойки,
то указать, разрядность которого, равна этой степени - автоматом становится циклическим.
Один указатель для работы с вершиной стека. Другой, указывает на дно этого фрейма стека для обмена
данными с вершиной большого стека. Для быстродействия, между ними понадобится еще один указатель,
которой разделит сохраненную и несохраненную на большом стеке области.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Форт и форт-процессор
СообщениеДобавлено: Пт мар 23, 2012 13:01 
Не в сети
Аватара пользователя

Зарегистрирован: Чт июл 20, 2006 11:31
Сообщения: 2168
Откуда: Екб
Благодарил (а): 0 раз.
Поблагодарили: 41 раз.
WingLion писал(а):
Конечно, на нижнем уровне все ок. И все быстро, но на верхнем получается бяда!..

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

_________________
С уважением, chess


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Форт и форт-процессор
СообщениеДобавлено: Пт мар 23, 2012 17:57 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 13:19
Сообщения: 3565
Откуда: St.Petersburg
Благодарил (а): 4 раз.
Поблагодарили: 72 раз.
Mihail писал(а):
Я предлагаю сделать быстрый стек в виде циклического буфера.


Смысла в цикличности, честно говоря, не вижу...
Есть вершина маленького стека и есть дно маленького стека. Они просто есть, и никаких указателей у них нет, ибо это просто регистры.
Работая со стеком, данные в нем можно продвигать вверх и вниз. При этом, маловероятно, что за два такта стек продвинется в одну или в другую сторону на две позиции. Так только при присвоении происходит, поэтому, чтобы так не было, надо избегать последовательных присвоений и тогда, дно стека можно спокойно успевать подкачивать из отдельной памяти. И такую штуку я уже делал.

Более того, можно сказать, смешно, но в многоядерном варианте и с внутренней памятью проблема сама собой разрешается... ибо для процессора внутренняя память оказывается виртуально однотактовой. Мало ее, вот проблема!..

А с форт-процессором, как я понял, сия проблема разрешается, если он одиночный. Для одного, имеющихся в той же EP3C40 128 килобайт памяти уже вполне достаточно для приличных вещей.
В случае же нескольких ядер, как у меня, каждое ядро никак не получит столько памяти... Разве что во внешнюю SD-RAM свопить, но тогда весь цимес от многоядерности пропадает...

Посему и поднял сей топик... Выкручиваться надо иначе как-то... на том, что имею, не стараясь наворачивать железо, запутывая все окончательно...

_________________
С уважением, WingLion
Forth-CPU . RuF09WE
Мой Форт
Отсутствие бана это не заслуга юзера, а недоработка модератора (с)


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 52 ]  На страницу 1, 2, 3, 4  След.

Часовой пояс: UTC + 3 часа [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
phpBB сборка от FladeX // Русская поддержка phpBB