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

...
Google Search
Forth-FAQ Spy Grafic

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




Начать новую тему Ответить на тему  [ Сообщений: 41 ]  На страницу Пред.  1, 2, 3
Автор Сообщение
 Заголовок сообщения:
СообщениеДобавлено: Ср окт 22, 2008 18:53 
Не в сети

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

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Ср окт 22, 2008 19:32 
Не в сети

Зарегистрирован: Ср сен 13, 2006 10:06
Сообщения: 636
Откуда: Омск
Благодарил (а): 0 раз.
Поблагодарили: 3 раз.
вопрос писал(а):
Ну, такой вопрос задавать не было смысла. Именно - автоматически. Это преодолимый недостаток форта, множество вызовов.
также - на уровне ассемблера есть ли схемы?

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

_________________
Меня нет, не будет и не было.


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

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

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


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

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

вообще ведь подстановки инлайн в СПФе достаточно распространены, посмотри, как реализованы BRANCH, или тот же RET,
это не связано с оптимизацией.

_________________
Мне бы только мой крошечный вклад внести,
За короткую жизнь сплести
Хотя бы ниточку шёлка.
fleur


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

Зарегистрирован: Вт май 09, 2006 12:31
Сообщения: 3438
Благодарил (а): 5 раз.
Поблагодарили: 16 раз.
Ну, оптимизацией это в любом случае является. И интересен общий алгоритм для любого форта - были ли какие-то реализации, СПФ посмотрю, спасибо.

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


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

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

это надо надо смотреть в ColorForth на сколько я понял и мучить in4 которые более плотно с этим вопросом разбирался.

_________________
Мне бы только мой крошечный вклад внести,
За короткую жизнь сплести
Хотя бы ниточку шёлка.
fleur


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Ср окт 22, 2008 22:04 
Не в сети

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

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Чт окт 23, 2008 02:00 
Не в сети

Зарегистрирован: Сб май 06, 2006 12:01
Сообщения: 959
Откуда: Украина, Харьков
Благодарил (а): 2 раз.
Поблагодарили: 7 раз.
Раз уж зашла речь обо мне... ;)
Оптимизаций там всего-ничего!
Самая главная, вокруг чего все построено - оптимизация хвостовой рекурсии - при генерации выхода проверяется последняя команда - если она вызов подпрограммы, то ее код заменяется на переход. Адрес остается тем же.
Но на этом построен весь стиль программирования. Он отличается от традиционного.

Другая оптимизация - замена операций с константами на непосредственные значения - в тех командах, в которых это возможно ( a! @ ! + or and xor u+ +! ), проверяется последняя команда - если это загрузка в AX (код B8 ), то она удаляется вместе с dup (если dup предпоследняя команда), константа кладется на стек и дальнейшее выполнение компиляции команды генерирует код с непосредственной константой.
Код:
\ пример для 16-разрядного кода!!
\ ?lit проверяет $B8 у последней команды и засовывает ее
\   слово в стек, удаляет ее саму и, м.б., предыд. dup
\   и передвигает указатель последней команды
\   ZF если ничего не добавилось на стек
\   д.б. в forth
: ?lit
   list @  here 3 -  - drop  if 0 test drop ; then
      \ не 3 байта назад !!
   list @ c@  B8  - drop  if
      0 test drop ; then  \ было не B8, выход
   list @ 1 + @  3 neg allot  \ отмотали mov ax,x
   list1 @      @  748D  - drop  if ; then
   list1 @  2 + @  89FE  - drop  if ; then
   5 neg allot ;  \ отмотали dup

Но в реализации команд ! и +! У Мура ошибка, они не работают, как задумывалось. Для правильной реализации надо делать не 2 переменные (list list1), а стек. ;)

Эти оптимизации, сверхбыстрая компиляция из промежуточного представления, очистка двух имеющихся словарей (forth macro не входят в кодофайл (;)), имя слова - адрес начала его кода) вместо создания дополнительных словарей - в сочетании с общим минимализмом Мура и дают такой эффект!

_________________
With best wishes, in4.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Чт окт 23, 2008 08:05 
Не в сети

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

не уловил, как это делается?

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Чт окт 23, 2008 08:08 
Не в сети
Moderator
Moderator

Зарегистрирован: Ср май 10, 2006 15:37
Сообщения: 1132
Откуда: Chelyabinsk ( Ural)
Благодарил (а): 0 раз.
Поблагодарили: 9 раз.
Mihail писал(а):
Kopa писал(а):
По результаты прогона, тестовых результатов из LCC в SPF4, сделал вывод, что
используемая схема оптимизации не работает в этом случае


Правильнее сказать плохо работает.
Речь идёт о моём Cinf ? Ты еще говорил о MPEшном с2forth.
Я не заботился о качестве конвертера, я добился только принципиальной работоспособности.
Чтобы выбрать избыточность порождаемую этим конвертерам нужен довольно крутой оптимизатор.
Сперва следует улучшить качество конвертера, а затем настраивать под него оптимизатор.


Нет не Cinf ( т.к. он мне показался сырой и back-end не совсем как у LCC).
Перекомпилировался LCC c разными найдеными front-end для разных контроллеров. ( AVR, PDP-11,
d16m, xr16, msil ...)
а также доделывал front-end от MPE. Тесты брались от С беnchmark. Некоторые тесты
еще не проходят ( необходимо смотреть, что еще править в front-end). Выходной файл не
всегда генерировался для заданного контроллера в каком-нибудь тесте.

Из избыточности кода, для стекового представления, заметил повторяющиеся цепочки
и переизбыток промежуточных локальных переменных.

P.S. Как всё это выглядело можно вспомнить и более подробно описать.

Си тесты:
Код:
ack.c  array.c ary3.c  banner.c  except.c  fibo.c glyphs.c  gr.c hash.c  hash2.c
          heapsort.c  hello.c lists.c matrix.c methcall.c nestedloop.c objinst.c  random.c reversefile.c 
           sieve.c simple_hash.c spellcheck.c  strcat.c  struct.c sumcol.c testheap.c tst.c vartest.c  wc.c


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пт окт 24, 2008 01:42 
Не в сети

Зарегистрирован: Сб май 06, 2006 12:01
Сообщения: 959
Откуда: Украина, Харьков
Благодарил (а): 2 раз.
Поблагодарили: 7 раз.
Вот еще одна оптимизация - чуть не забыл:
В словах 0 over a @ pop
Код:
\ ?dup компилит dup , если пред. команда не drop
: ?dup
   here 1 -  list @  - drop if dup, ; then  \ пред команда>1б
   list @  c@ 0AD - drop if dup, ; then  \ не drop
   1 neg allot ;

вопрос писал(а):
in4 писал(а):
имя слова - адрес начала его кода

не уловил, как это делается?

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

Наиболее эффектные примеры:
Код:
: xor  0433
: binary  ?lit if swap 2 + 1, 2, ; then 2,  ', nip  ;
: and 0423  ', binary  ;
: or  040B  ', binary  ;

...

: erase  \ a u
   0
: fill  \ a u c
   swap push swap pop test  \ c a u
   begin if push over over c!  1 + pop 1 - again then
   3drop ;

Получается множественный вход в процедуру слова.
В \SPF\devel\~profit\lib\colorForth\ есть пример, как сделать такие словари в SPF.

_________________
With best wishes, in4.


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

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


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

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


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

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