Forth
http://www.fforum.winglion.ru/

Стек возвратов - норма или хак?
http://www.fforum.winglion.ru/viewtopic.php?f=2&t=3264
Страница 1 из 2

Автор:  Hishnik [ Вт фев 11, 2020 03:05 ]
Заголовок сообщения:  Стек возвратов - норма или хак?

Рассматривая примеры реализаций, периодически вижу >R R> и вообще использование стека возвратов для манипуляции с данными на стеке. На мой взгляд, это несколько изживающая себя вещь, которая формирует риски неправильного поведения по меньшей мере в двух вариантах:
1. Форт-процессор, где разрядность стека возвратов может быть меньше просто из соображений экономии ресурсов. Разрядность ограничивается счетчиком адреса, поэтому старшие разряды данных будут потеряны.
2. Системы с ШК и разрядностью 64/32. Опять же, разрядность указателя может быть меньше разрядности данных.

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

Автор:  zma [ Вт фев 11, 2020 06:36 ]
Заголовок сообщения:  Re: Стек возвратов - норма или хак?

Кроме перечисленных проблем есть ещё одна банальная - очень легко что-то забыть на стеке возвратов перед выходом из определения и обрушить таким образом программу. И отлаживать это не очень просто.
Сам вместо стека возвратов как временного хранилища значений применяю переменные.

Автор:  Victor__v [ Вт фев 11, 2020 08:02 ]
Заголовок сообщения:  Re: Стек возвратов - норма или хак?

Это хороший вопрос.
Это правильный вопрос.
Следующий вопрос :mrgreen:

Автор:  forther [ Вт фев 11, 2020 08:27 ]
Заголовок сообщения:  Re: Стек возвратов - норма или хак?

Hishnik писал(а):
Рассматривая примеры реализаций, периодически вижу >R R> и вообще использование стека возвратов для манипуляции с данными на стеке. На мой взгляд, это несколько изживающая себя вещь, которая формирует риски неправильного поведения по меньшей мере в двух вариантах:
1. Форт-процессор, где разрядность стека возвратов может быть меньше просто из соображений экономии ресурсов. Разрядность ограничивается счетчиком адреса, поэтому старшие разряды данных будут потеряны.
2. Системы с ШК и разрядностью 64/32. Опять же, разрядность указателя может быть меньше разрядности данных.

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


Если разрядность стека возвратов меньше, чем разрядность стека данных нужно использовать несколько элементов стека данных.

Автор:  Victor__v [ Вт фев 11, 2020 10:24 ]
Заголовок сообщения:  Re: Стек возвратов - норма или хак?

zma писал(а):
Кроме перечисленных проблем есть ещё одна банальная - очень легко что-то забыть на стеке возвратов перед выходом из определения и обрушить таким образом программу. И отлаживать это не очень просто.
Сам вместо стека возвратов как временного хранилища значений применяю переменные.

Забывают новички.
Набьёте руку и проблем не будет.

Автор:  Hishnik [ Вт фев 11, 2020 19:56 ]
Заголовок сообщения:  Re: Стек возвратов - норма или хак?

forther писал(а):
Если разрядность стека возвратов меньше, чем разрядность стека данных нужно использовать несколько элементов стека данных.

Как технически решить вопрос, понятно. Оно так и решается при необходимости. Вопрос в другом - а почему бы в том же стиле не писать на диск? Почему не выделять куски памяти в видеокарте? Еще можно в облако временно выгружать пару чисел со стека :D Есть же определенный стиль программирования, и когда в коде появляются чуждые элементы, создается ощущение, что что-то тут не так.

Автор:  Victor__v [ Ср фев 12, 2020 09:46 ]
Заголовок сообщения:  Re: Стек возвратов - норма или хак?

По поводу заголовка.
Норма или хак?
Хм, если для работы со стеком возвратов есть инструменты (слова), то работа с ним является нормой, а не хаком. На мой взгляд.
Чтобы работа с этим стеком считалась хаком, просто сделайте ФС без слов >R R@ R> 2>R 2R> RP@ RP! RALLOT N>R NR> и прочих.

Такой же вопрос можно задать по поводу самомодификации.
Норма или хак?
Ведь форт-системы имеют замечательные слова HERE и DP.
С их помощью можно легко и просто переписать тот или иной участок кода.

Автор:  Hishnik [ Ср фев 12, 2020 17:18 ]
Заголовок сообщения:  Re: Стек возвратов - норма или хак?

Victor__v писал(а):
Чтобы работа с этим стеком считалась хаком, просто сделайте ФС без слов >R R@ R> 2>R 2R> RP@ RP! RALLOT N>R NR> и прочих.

Можно переформулировать вопрос. Допустим, у нас есть "стек ошибок" (Error stack). И вот вместо >R R> программист начинает писать >ERROR ... ERROR>. В коде выглядит как некая обработка ошибок или их генерация, а на самом деле - ну просто переменная подвернулась под руку. С тем же успехом можно временно складывать числа в переменную IOError, в буфер печати, в какую-нибудь другую временную область, которая пока не используется, и состояние которой будет потом восстановлено. Хак при этом состоит в том, что, несмотря на упоминание стека возвратов, никакие действия, характерные для него, в программе не производятся. Поэтому текст начинает выглядеть не соответствующим прямому назначению.

Автор:  Victor__v [ Ср фев 12, 2020 19:32 ]
Заголовок сообщения:  Re: Стек возвратов - норма или хак?

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

Автор:  forther [ Ср фев 12, 2020 20:26 ]
Заголовок сообщения:  Re: Стек возвратов - норма или хак?

Или чтоб >R R> работали с этим дополнительным стеком. Даже совместимо будет. За исключением фокусов типа ">R ;"

Автор:  f02732 [ Чт фев 13, 2020 05:17 ]
Заголовок сообщения:  Re: Стек возвратов - норма или хак?

Как пример: реализовать catch и throw на форте без доступа к стеку возвратов наверное не получится. Возможно ещё какие-то подобные "низкоуровневые" вещи.

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

Автор:  Victor__v [ Чт фев 13, 2020 09:30 ]
Заголовок сообщения:  Re: Стек возвратов - норма или хак?

f02732 писал(а):
Как пример: реализовать catch и throw на форте без доступа к стеку возвратов наверное не получится. Возможно ещё какие-то

Асм и справочники по кодам вам в помощь

Автор:  f02732 [ Чт фев 13, 2020 10:25 ]
Заголовок сообщения:  Re: Стек возвратов - норма или хак?

Victor__v писал(а):
f02732 писал(а):
Как пример: реализовать catch и throw на форте без доступа к стеку возвратов наверное не получится. Возможно ещё какие-то

Асм и справочники по кодам вам в помощь

Зачем асм, если можно написать на форте или вообще взять готовую реализацию?

Автор:  Victor__v [ Чт фев 13, 2020 10:40 ]
Заголовок сообщения:  Re: Стек возвратов - норма или хак?

f02732 писал(а):
Зачем асм, если можно написать на форте или вообще взять готовую реализацию?

А как вы напишите на форте, ежели там нет доступа к стеку возвратов? Мы же решили его вообще не использовать)

f02732 писал(а):
Взять готовую реализацию?

Это вообще шикарный перл.

Автор:  f02732 [ Чт фев 13, 2020 11:58 ]
Заголовок сообщения:  Re: Стек возвратов - норма или хак?

Victor__v писал(а):
А как вы напишите на форте, ежели там нет доступа к стеку возвратов? Мы же решили его вообще не использовать)

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

Victor__v писал(а):
f02732 писал(а):
Взять готовую реализацию?

Это вообще шикарный перл.

Не понимаю. Хотите сказать что никто никогда не писал на форте слова для работы с исключениями или что?

Страница 1 из 2 Часовой пояс: UTC + 3 часа [ Летнее время ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/