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

...
Google Search
Forth-FAQ Spy Grafic

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




Начать новую тему Ответить на тему  [ Сообщений: 158 ]  На страницу Пред.  1, 2, 3, 4, 5 ... 11  След.
Автор Сообщение
 Заголовок сообщения:
СообщениеДобавлено: Пн июл 10, 2006 14:54 
Не в сети
Аватара пользователя

Зарегистрирован: Пт май 12, 2006 00:52
Сообщения: 88
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
вопрос писал(а):
Вообще необходимость употреблять копирование так часто - замедление работы (сколько раз копируется переменная, если нужно сравнить её с несколькими другими?).


очень распространённая ситуация - проверка результата операции. Если 0 - ошибка и выход. Не ноль - работаем дальше.

Для этих целей служит конструкция
Код:
?dup if ... exit then
...


Можешь предложить более быстрое решение?

...

dup - одна из самых нересурсных операций.

_________________
... чтобы понять рекурсию, нужно сперва понять рекурсию ...


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

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

Хищник писал(а):
Mihail писал(а):
Любую манипуляцию со стеком можно выразить через ROLL PICK DROP

Ой, не надо ROLL. Да и PICK не очень-то надо, но ROLL не надо совсем.
Конечно, если мы имеем глубокий-глубокий оптимизатор, тогда да.
Но активные перетряхивания стека очень плохо отражаются на производительности любого железа. Причем когда мы работаем с верхними ячейками, это еще ничего, наоборот, асимметричная архитектура сильно облегчает трассировку.


Поэтому я и предложил заменить ROOL на слово меняющее 2 элемента.
Хотя ROOL можно выразить через SWAP.

: ROLL ?DUP IF SWAP >R 1- RECURSE R> SWAP THEN ;

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


Цитата:
Но требование наличия прямого доступа ко всему стеку для PICK, а тем более блочные перестановки на нем для ROLL - очень и очень плохо.


Как-бы это небыло плохо, это требование стоит, иначе это не Форт.


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

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7958
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
Mihail писал(а):
Поэтому я и предложил заменить ROOL на слово меняющее 2 элемента.
Хотя ROOL можно выразить через SWAP.

: ROLL ?DUP IF SWAP >R 1- RECURSE R> SWAP THEN ;


Так еще хуже. Аппаратная замена многотактным словом хотя бы не требует постоянного чтения кода. Проблема все равно остается - множественный доступ к стеку.

Mihail писал(а):
Цитата:

Но требование наличия прямого доступа ко всему стеку для PICK, а тем более блочные перестановки на нем для ROLL - очень и очень плохо.

Как-бы это небыло плохо, это требование стоит, иначе это не Форт.


Да ну? :) То есть все языки развиваются и учитывают как требования аппаратуры, так и последние достижения в области computer science, а Форт застыл на уровне 94 года?


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

Зарегистрирован: Пт май 12, 2006 00:52
Сообщения: 88
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Цитата:
Да ну?


Форт - это стековая машина. Или ты предлагаешь иную концепцию, но получаешь уже не Форт, или должен обеспечить работу со стеком.

PICK и ROLL - обязательные атрибуты стековой машины. Без них теряет смысл куча классических решений и усложняется жизнь во многих ситуациях. Как ты будешь извлекать хотя бы 4-й элемент со стека? Запихивать всё в стек возвратов?

_________________
... чтобы понять рекурсию, нужно сперва понять рекурсию ...


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

Зарегистрирован: Ср май 03, 2006 11:27
Сообщения: 1394
Откуда: St.Petersburg
Благодарил (а): 2 раз.
Поблагодарили: 11 раз.
Хищник писал(а):
Mihail писал(а):
: ROLL ?DUP IF SWAP >R 1- RECURSE R> SWAP THEN ;


Так еще хуже. Аппаратная замена многотактным словом хотя бы не требует постоянного чтения кода. Проблема все равно остается - множественный доступ к стеку.


ROLL применяется достаточно редко, чтобы не рассматривать его эффективность.

Цитата:
Mihail писал(а):
Цитата:

Но требование наличия прямого доступа ко всему стеку для PICK, а тем более блочные перестановки на нем для ROLL - очень и очень плохо.

Как-бы это небыло плохо, это требование стоит, иначе это не Форт.


Да ну? :) То есть все языки развиваются и учитывают как требования аппаратуры, так и последние достижения в области computer science, а Форт застыл на уровне 94 года?


Если мы рассматриваем Форт как язык(чем Форт является в последнюю очередь),
то это будет только синтаксис и семантика. Одноко, можно рассмотреть на сколько
он будет удобен для транслятора/интерпретатора, т.к. это может относится к семантики.
Но предсказать какой язык под какие платформы будет удобен транслятору,
очень сложно (тем-более если используется оптимизатор).


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

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

Вопрос не в этом. Он есть, и все. И с ним надо что-то делать. Лучше его исключить совсем или перенести в расширения языка, чтобы не перегружать платформу.

Mihail писал(а):
Если мы рассматриваем Форт как язык(чем Форт является в последнюю очередь),
то это будет только синтаксис и семантика. Одноко, можно рассмотреть на сколько
он будет удобен для транслятора/интерпретатора, т.к. это может относится к семантики.
Но предсказать какой язык под какие платформы будет удобен транслятору,
очень сложно (тем-более если используется оптимизатор).

Вот тут совсем ничего не понял. Да, язык программирования - это синтаксис и семантика. Форт - вроде бы язык программирования. Скомпилировать вызов одного слова, понятное дело, проще, чем реализовать алгоритм доставания аргумента из глубины. Но с платформами все одинаково - на любой платформе удобнее ограничиться операциями с вершиной, чем со всем стеком. Он на то, собственно, и стек. Произвольный доступ превращает его в массив со всеми вытекающими.


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

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

Есть в Форте вполне устоявшиеся слова, которые давно определены, и, имхо, нет смысла их "кидать". Не нравится слово - не используйте!

В конечном продукте, оптимизатор это слово сам(!) выкинет, если он (оптимизатор) нормальный.

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

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


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

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7958
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
Тут как раз "чего бы хотелось". Хотелось бы разделить слова на абсолютно необходимые и факультативные, с учетом расходов на их реализацию. Например, + и - в железе реализуются очень просто, * требует аппаратного умножителя или конвейерного аккумулятора-сдвигателя, а с / вообще беда. Но для математика это все "элементарные арифметические действия". И если собрать слова, которые не только имеют устоявшийся синтаксис, но и элементарную реализацию, получится вполне себе core. :) И на него еще core ext, куда вынести слова не по принципу распространенности-времени появления, а по принципу "понадобиться может, но в ядро совать не будем, не стоит эффект от него затраченных ресурсов".


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

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

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


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

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


Еще раз: Стандарт должен, прежде всего, решить задачу независимости от реализации
для любых задачь. Задача о том, чтобы редко используемые слова занимали
минимум ресурсов, решается отдельно. Можно, например, их оформить
в виде догружаемой библиотеки.


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

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7958
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
Balancer писал(а):
PICK и ROLL - обязательные атрибуты стековой машины. Без них теряет смысл куча классических решений и усложняется жизнь во многих ситуациях. Как ты будешь извлекать хотя бы 4-й элемент со стека? Запихивать всё в стек возвратов?

Я буду писать программу так, чтобы 4-й элемент мне никогда не требовался. .net тоже стековая машина, но там даже swap отсутствует за ненадобностью.


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

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7958
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
Mihail писал(а):
Задача о том, чтобы редко используемые слова занимали
минимум ресурсов, решается отдельно. Можно, например, их оформить
в виде догружаемой библиотеки.


О чем и речь. Но при этом не надо путать синтаксический сахар и объективную необходимость.


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

Зарегистрирован: Вт май 09, 2006 12:31
Сообщения: 3438
Благодарил (а): 5 раз.
Поблагодарили: 16 раз.
В ассемблере манипуляции со стеком сопроцессора записываются как? И никаких монстров.
Насчёт именованных переменных, то если DUP во время компиляции оптимизируется (т.е. фактическое копирование типа
mov eax,ebx
или
push ax
push ax
push ax
;--------
действия ...
pop ax
;--------
действия ...
pop ax
;--------
действия ...
pop ax
(трижды в стек, потом из стека) не происходит )
то не зло

если же это слово искусственно увеличивает количество операций процессора, то зло

И вот эта оптимизация желательно, чтобы присутствовала в стандарте, ничего, что это стандарт языка, пусть бы присутствовала возможность оптимизации,
скажем , слова ODUP (оптимизированный (по возможности) DUP)


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

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


Там в кремнии главные монстры. Можно записать и 100 ROLL, но это не значит, что оно равноценно 100 PICK (хотя вроде бы запись и в том, и в другом случае одинаково короткая).


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

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


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


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

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


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

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


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

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