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

...
Google Search
Forth-FAQ Spy Grafic

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




Начать новую тему Ответить на тему  [ Сообщений: 150 ]  На страницу Пред.  1 ... 3, 4, 5, 6, 7, 8, 9, 10  След.
Автор Сообщение
 Заголовок сообщения:
СообщениеДобавлено: Сб июл 07, 2007 21:26 
Не в сети
Аватара пользователя

Зарегистрирован: Вт мар 20, 2007 23:39
Сообщения: 1261
Благодарил (а): 3 раз.
Поблагодарили: 19 раз.
вопрос писал(а):
Действительно, существует ряд операций, для которых стек не нужен или замедляет их, такие операции можно реализовать прямо на ассемблере

CODE

ENDCODE

Но некоорые стандартные можно было бы не спомошью ассемблерных блоков а прямо при копмпиляции форт-машины реализовать не переделывая каждый раз! Тот же с-синтаксис для переменных, с которыми хотелось бы работать не производя стековых операций.

ИМХО, а вот с-синтаксису для переменных нечего делать в форте, лучше для этого взять локалсы и постфиксную запись, объеденить и ускорить их до максимума. И получить что-ть типа этого:
Код:
: (a+b)(a+b) { a b -- } ( a b -- результат )
  a^2+2ab+b^2
;

_________________
Cтоимость сопровождения программного обеспечения пропорциональна квадрату творческих способностей программиста.
Роберт Д. Блисc


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Сб июл 07, 2007 21:55 
VoidVolker писал(а):
: (a+b)(a+b) { a b -- } ( a b -- результат )
  a^2+2ab+b^2
;


для такой задачи и локальные переменные не нужны.

Код:
: (a+b)(a+b) ( a b -- a^2+2ab+b^2)
OVER OVER * 2*  SWAP DUP * + SWAP DUP * +
;


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Сб июл 07, 2007 22:11 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 13:19
Сообщения: 3565
Откуда: St.Petersburg
Благодарил (а): 4 раз.
Поблагодарили: 72 раз.
white_TigR писал(а):
: (a+b)(a+b) ( a b -- a^2+2ab+b^2)
OVER OVER * 2* SWAP DUP * + SWAP DUP * +
;


А
Код:
: (a+b)(a+b) ( a b -- a^2+2ab+b^2) + DUP * ;


не проще для ТАКОЙ задачи? :))

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


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

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

int main(void){
int a; int b;
int result = (a+b) * (a+b);
}

вот с расшифровкой, как в ассемблере:
Код:
[b]int main(void){[/b]
4567:007E 55             PUSH      BP 
4567:007F 8BEC           MOV       BP,SP 
4567:0081 B80E00         MOV       AX,000E 
4567:0084 9A04046745     CALL      __chkstk (4567:0404) 
4567:0089 56             PUSH      SI 
4567:008A 57             PUSH      DI 
[b]int a; int b;
int result = (a+b) * (a+b);[/b]
4567:008B 8B46F6         MOV       AX,WORD PTR [a] 
4567:008E 0346FC         ADD       AX,WORD PTR [b] 
4567:0091 8B4EF6         MOV       CX,WORD PTR [a] 
4567:0094 034EFC         ADD       CX,WORD PTR [b] 
4567:0097 F7E9           IMUL      CX 
4567:0099 8946F8         MOV       WORD PTR [result],AX


сам код операции со скобками - после второй строчки "выделенной" -- теги не сработали внутри кода, -- полужирным (собсвенно строчки, которую вычисляем, до того - старт программы). Заметна экономия по сравнению с

OVER OVER * 2* SWAP DUP * + SWAP DUP * +
?

to Winglion
имелась ввиду более сложная формула - разность квадратов
или по крайней мере компилятор не должен сам "сокращать" формулы и если нужно реализовать формулу такой длины, то

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


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

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

Вот что дает Форт для этого случая с расшифровкой, как в ассемблере: :D
Код:
559080 034500           ADD     EAX , 0 [EBP]
559083 F7E8             IMUL    EAX
559085 8D6D04           LEA     EBP , 4 [EBP]
559088 C3               RET     NEAR
END-CODE 

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


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

Зарегистрирован: Вт май 09, 2006 12:31
Сообщения: 3438
Благодарил (а): 5 раз.
Поблагодарили: 16 раз.
Это вот эта строка или какая-то другая??
OVER OVER * 2* SWAP DUP * + SWAP DUP * +

по-моему, это строка
: word + DUP * ; :))

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вс июл 08, 2007 00:50 
Ну да. Логично. :))
Ну я же тоже человек, тоже нафлудить хочу. :))


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

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7960
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
А вообще ведь человек иногда "срывается" на более наглядные (а не более эффективные) алгоритмы. Когда переменных и прочих объектов для манипулирования становится много, проще писать в стиле "достали, посчитали, положили, опять достали...". При позднейшем взгляде может оказаться, что можно было там и сям сэкономить... но лучше уж сначала просто запустить, а потом думать. И беготня за байтиками хороша только при работе с программой, которой пару месяцев пахать. Вот там плюс-минус день играет роль.


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

Зарегистрирован: Вт май 09, 2006 12:31
Сообщения: 3438
Благодарил (а): 5 раз.
Поблагодарили: 16 раз.
Также, мне кажется метаассемблер мог бы помочь реализовать "прямо в ассемблере" какие-либо структуры в памяти, обращение к которым становилось бы не таким сложным без использования стека. Скажем, многомерный массив - как он реализован в Форте? Это, фактически, одномерный массив и вычисляется a x * b y * c z * k + + + (размерности a,b,c, индексы x,y,z,k)
А можно без стека. т.е. не класть на стек размерности, они могут лежать в памяти и есть только операция умножения числа из памяти на индекс, который - да, на стеке. Впрочем, кажется, ассемблерно легче оптимизировать и работу с "уже вычисленными" индексами. Т.е. вот эти вещи - массивы и именованные переменные на стеке могли бы оптимизировать любой форт

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пн июл 09, 2007 15:17 
Не в сети

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


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


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

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

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


А тут понимать нечего - человеку хочется абсолюта. Вероятно слова "компромисс" он не знает или не хочет знать.
К тому же легче придумывать, как лучше делать и ничего не делать 8) чем попытаться понять, что и как на самом деле 8(
такое у меня возникло впечатление


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пн июл 09, 2007 21:11 
Не в сети

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

А тут понимать нечего - человеку хочется абсолюта. Вероятно слова "компромисс" он не знает или не хочет знать.
К тому же легче придумывать, как лучше делать и ничего не делать 8) чем попытаться понять, что и как на самом деле 8(
такое у меня возникло впечатление

Мне кажется, я предлагаю как-раз компромисс. Абсолют - это абсолютный ассемблер для всего сразу и ... не стану
Тут же я просто обращаю внимание, что устройство форта способно замедлять некоторые операции, но оно же даёт шанс этот недостаток преодолеть, ничего особо не меняя.

Я как-раз пытаюсь что-то делать, но реализовать легче, чем понять, что реализуешь

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


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

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

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

мне так не кажется.
Не смотря на то, что форт внутри может сильно изменяться, не стоит далеко уходить от его идеалогии.
А работа со стеком, как с массивом - это уже уход достаточно сильный.
Насчет замедления - ведь на самом деле оно не большое 8) не на столько там все плохо, чтоб столько сил убивать.
Что же до некого "промежуточного ассемблера" - так я за, и более того сам по-тихоньку таким делом занимаюсь, но вот только
не ради скорости, а ради удобства адаптации ФВМ к процессору 8)


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вт июл 10, 2007 13:03 
Не в сети

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


Ну давайте прикинем, что собой будут представлять примитивы на
"промежуточном ассемблере" .
Для обозначения команд этого ассемблера предлагаю использовать
префикс 'M'. За тем, можно представить в этом виде Форт для MSP
http://fpauk.narod.ru/spmsp.rar

Код:

CODE DUP
MMOV   --@DSTK,TOS
NEXT
END-CODE

CODE DROP
MMOV   TOS,@DSTK++
NEXT
END-CODE

CODE +
MADD   TOS,@DSTK++
NEXT
END-CODE

CODE @
MMOV   TOS,@TOS
NEXT
END-CODE

CODE C@
MMOVB   TOS,@TOS
NEXT
END-CODE

CODE !
MMOV   @TOS,@DSTK++
MMOV   TOS,@DSTK++
NEXT
END-CODE

CODE OVER
MMOV   --@DSTK,TOS
MMOV   TOS, CELL +@DSTK
NEXT
END-CODE

CODE EXECUTE
        MMOV   TMP, TOS
        MMOV   TOS,@DSTK++
        MJMP    TMP
END-CODE



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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вт июл 10, 2007 14:34 
Не в сети

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

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


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

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


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

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


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

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