Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Чт мар 28, 2024 22:43

...
Google Search
Forth-FAQ Spy Grafic

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




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

Нужны ли Форту нововведения?
Да 94%  94%  [ 17 ]
Нет 6%  6%  [ 1 ]
Всего голосов : 18
Автор Сообщение
 Заголовок сообщения:
СообщениеДобавлено: Вт авг 08, 2006 00:39 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 5062
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 23 раз.
Поблагодарили: 63 раз.
Гм. Я тут подумал. Однопроходность компилятора в форте в принципе не обязательна в пределах одного определения и принципиально обязательна в пределах программы.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вт авг 08, 2006 09:51 
oleg писал(а):
Гм. Я тут подумал. Однопроходность компилятора в форте в принципе не обязательна в пределах одного определения и принципиально обязательна в пределах программы.


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

P.S. Если использовать компилятор в контроллере, то там скорость загрузки
программы принципиальный фактор.
Так как Форт программы часто выполняются на регистровой архитектуре, то
необходимы компиляторы использующие их по полной:)


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вт авг 08, 2006 15:25 
Не в сети
Аватара пользователя

Зарегистрирован: Чт июл 20, 2006 11:31
Сообщения: 2168
Откуда: Екб
Благодарил (а): 0 раз.
Поблагодарили: 41 раз.
ArtemKAD писал(а):
В связи с тем, что х51 это "наследство тяжелого прошлого 80-й серии", то для этой задачи придется поступать методами тех времен - вести таблицу переноса - таблицу JMP-ов в которых при сдвиге кода надо менять метки.
В общем работа муторная и неблагодарная - результат никто не заметит ...

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

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вт авг 08, 2006 15:52 
Не в сети
Аватара пользователя

Зарегистрирован: Чт июл 20, 2006 11:31
Сообщения: 2168
Откуда: Екб
Благодарил (а): 0 раз.
Поблагодарили: 41 раз.
oleg писал(а):
Гм. Я тут подумал. Однопроходность компилятора в форте в принципе не обязательна в пределах одного определения и принципиально обязательна в пределах программы.

Программа на форте в конечном итоге это главное слово, ну может и еще несколько слов для обработки прерываний. Если отдельные определения это процедуры, а главное слово просто набор из этих процедур то да. Если же среди определений попадаются инлайн-вставки и внутри главного слова куча ветвлений вперед, а это так и есть на 100% то без многопроходной компиляции не обойтись.

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вт авг 08, 2006 17:15 
chess писал(а):
и если компилятор сделает эту муторную работу, то результат будет заметен (управляющие конструкции с переходами вперед-очень частое явление).
Не частое - со всеми JMP-ами которые имеют относительную адресацию, а это насколько помню ВСЕ условные переходы, нет НИ МАЛЕЙШИХ проблем. Это стандартная "однопроходная" компиляция IF-THEN.
Проблема когда надо условный Jxx заменить на связку Jyy + LJMP или нечто подобное. Т.е. когда не хватает +-127 для условного перехода. А СКОЛЬКО у вас в программе мест с подобными "неожиданностями"? У меня даже с AVR-овскими +-63 чаще всего можно насчитать по пальцам одной руки. Причем проблема почти всегда решается перестановкой кода.
Тобишь оптимизация в подобном месте может быть вредна (руками я удачнее подправлю код), а частота появления сообщения "улетел за диапазон +127-128" настолько редкая (это не все ссылки вперед, а весьма малый их процент), что его исключение за счет автоматической вставки нужной пары комманд как я и сказал никто не оценит.


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вт авг 08, 2006 17:44 
Кстати ссылка почти в тему - http://www.forth.org.ru/~mlg/MoreBTng/ctlflow.htm


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вт авг 08, 2006 20:50 
Не в сети

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

_________________
понимаю некоторую бестолковость некоторых вопросов


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Ср авг 09, 2006 05:09 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 5062
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 23 раз.
Поблагодарили: 63 раз.
Mihail писал(а):
Конструкция IF .... THEN
возможные варианты реализации ветвления if then в зависимости от величины кода между if и then и места этого куска в ROM
1. fif ?a!=0(.) lj(then) .|-----then
2. fif ?a!=0(.) aj(then).|-----then
3. fif ?a=0(then)|------------then
где fif - подпрограмма - заносит в аккумулятор False или True если на стеке 0 или не 0
?a!=0, ?a=0, lj, aj соответственно команды jnz, jz, ljmp, ajmp,
а теперь покажите как за один проход скомпилировать минимальный по объему и максимальный по быстродействию код и еще учтите, что эта конструкция будет вложена в несколько таких же конструкций


Долго не мог сообразить, чем мне не нравится утверждение. А вот сейчас дошло!
Я бы категарически запретил писать на форте слова длиннее 256 байт ( для 86 архитектуры)
а так же запретил бы вложенные циклы DO LOOP принудительно
и более чем 3 условных конструкции на одно слово!
Иначе программы на форте получаются уродливые и страшные!
Так что длинные переходы внутри слова не нужны. А оптимизировать переходы между словами не обязательно ( можно и динными обойтись ).


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Ср авг 09, 2006 08:48 
Не в сети
Аватара пользователя

Зарегистрирован: Чт июл 20, 2006 11:31
Сообщения: 2168
Откуда: Екб
Благодарил (а): 0 раз.
Поблагодарили: 41 раз.
ArtemKAD писал(а):
Кстати ссылка почти в тему - http://www.forth.org.ru/~mlg/MoreBTng/ctlflow.htm

Эта ссылка показывает как предлагается реализовывать структуры управления, например:
Цитата оттуда:
Переходы вперед порождаются в два приема:
сначала порождается команда перехода по неуказанному адресу назначения, при этом вырабатывается значение orig (origin — исходная точка), содержащее информацию о недостроенном переходе вперед, в том числе адрес команды перехода;
когда адрес назначения становится известен, значение orig используется для записи адреса назначения в команду перехода.
В том то и дело, что команда перехода здесь понимается однозначно [код команды] [адрес перехода], как фиксированное количество байт, на самом деле количество байт команды перехода зависит от типа этой команды
(тип команды - относительный переход, абсолютный переход внутри страницы памяти, абсолютный переход во всем адресном пространстве) и сначала породить команду перехода по неуказанному адресу не удается, так не зная этот адрес мы не знаем и тип команды перехода. Решением в лоб является использование одного типа команд перехода (унивесального), который может разрешить любую ссылку вперед(это абсолютный переход во всем адресном пространстве). Это абсолютно неоптимально, так как, во-первых увеличивает размер кода, во-вторых вносит замедление исполнения.

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Ср авг 09, 2006 12:33 
chess писал(а):
на самом деле количество байт команды перехода зависит от типа этой команды
(тип команды - относительный переход, абсолютный переход внутри страницы памяти, абсолютный переход во всем адресном пространстве) и сначала породить команду перехода по неуказанному адресу не удается, так не зная этот адрес мы не знаем и тип команды перехода.

По умолчанию принимаешь "короткий переход". Если это окажется не верно, выдается "далеко улетел". А далее руцями в программе либо переставляешь код (для того, что-бы попал в +-127) либо ставишь длинный переход (вместо C_IF ставишь C_IF_L).

Ведь чай не на БАСИК-е пишешь, и не совсем чайник раз уже с МК знаком :? .


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Ср авг 09, 2006 12:44 
Не в сети

Зарегистрирован: Ср май 03, 2006 11:27
Сообщения: 1394
Откуда: St.Petersburg
Благодарил (а): 2 раз.
Поблагодарили: 11 раз.
ArtemKAD писал(а):
По умолчанию принимаешь "короткий переход". Если это окажется не верно, выдается "далеко улетел". А далее руцями в программе либо переставляешь код (для того, что-бы попал в +-127) либо ставишь длинный переход (вместо C_IF ставишь C_IF_L).


Раньше, я так и делал.
По моему, из примера
http://fforum.winglion.ru/viewtopic.php ... ight=#2002
видно, что мой оптимизатор эту задачу решает.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Ср авг 09, 2006 12:55 
Кстати, тут одна мысля только что пришла, для любителей БАСИК-а. Можно завести глобальный флаг модификации C_IF по которому подобная комманда компилирует длинный переход и сбрасывает этот флаг. А флаг у нас будет выставлять THEN при ошибке "далеко улетел". Кроме этого THEN вернет в файле и в целевом коде точки компиляции в место перед C_IF (точка передается точно так-же в стеке вместе с orig) .


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Ср авг 09, 2006 13:02 
Не в сети
Administrator
Administrator
Аватара пользователя

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

Форт может все! (с)... - это аксиома.

Я бы, если бы мне понадобилось править джампы в исходниках, сделал бы это просто самим фортом.
Компилит форт исходник, обнаруживает джамп, который надо удлиннить, возвращется к исходнику и прямо в файл исходника вставляет JP вместо JR (применительно к Z80 сие).

И все! Отработал, сообшил, что исходник подправлен - требуется перекомпиляция, программист посмотрел, что там поменялось (если захотел смотреть) и запустил перекомпиляцию... Или автоматом оно само пошло!

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Ср авг 09, 2006 13:37 
Не в сети
Аватара пользователя

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

Живем в век всеобщей автоматизации а все руцями :lol:

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Ср авг 09, 2006 14:25 
chess писал(а):
Живем в век всеобщей автоматизации а все руцями

Не просто "руцями". Это замена достаточно слабой оптимизации кода (все равно код растет!) на оптимизацию алгоритма (позволяет обойтись вообще без роста).


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

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


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

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


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

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