Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Пн мар 01, 2021 15:09

...
Google Search
Forth-FAQ Spy Grafic

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




Ответить
Имя пользователя:
Заголовок:
Текст сообщения:
Введите текст вашего сообщения. Длина сообщения в символах не более: 60000

Размер шрифта:
Цвет шрифта
Настройки:
BBCode ВКЛЮЧЕН
[img] ВЫКЛЮЧЕН
[flash] ВЫКЛЮЧЕН
[url] ВКЛЮЧЕН
Смайлики ВЫКЛЮЧЕНЫ
Отключить в этом сообщении BBCode
Не преобразовывать адреса URL в ссылки
Вопрос
Теперь гостю придется вводить здесь пароль. Не от своей учетной записи, а ПАРОЛЬ ДЛЯ ГОСТЯ, получить который можно после регистрации на форуме через ЛС.:
Этот вопрос предназначен для выявления и предотвращения автоматических регистраций.
   

Обзор темы - Quark: стековые фреймы
Автор Сообщение
  Заголовок сообщения:   Ответить с цитатой
Хищник писал(а):
Переносят со стека фреймов на стек данных и обратно. Для "повседневного программирования" они не требуются, поскольку на стеке фреймов хранятся не данные, а значения DEPTH. Так что это просто низкоуровневые слова для элементарных операций с таким стеком.

Ааа, точно, что-то я запамятовал. :shuffle;
Сообщение Добавлено: Ср фев 25, 2009 23:49
  Заголовок сообщения:   Ответить с цитатой
VoidVolker писал(а):
А что собственно делают слова FRAME> и >FRAME? Чем они отличаются от FRAME{ и }FRAME?

Переносят со стека фреймов на стек данных и обратно. Для "повседневного программирования" они не требуются, поскольку на стеке фреймов хранятся не данные, а значения DEPTH. Так что это просто низкоуровневые слова для элементарных операций с таким стеком.
Сообщение Добавлено: Ср фев 25, 2009 23:38
  Заголовок сообщения:   Ответить с цитатой
А что собственно делают слова FRAME> и >FRAME? Чем они отличаются от FRAME{ и }FRAME?
Сообщение Добавлено: Ср фев 25, 2009 23:02
  Заголовок сообщения:   Ответить с цитатой
in4 писал(а):
А если для блока данных определить структуру/таблицу в куче и освободить ее после использования, так можно?

Можно, никто же не запрещает. Работа с памятью любого типа идет через WinAPI, Форт тут может предложить разве что обертку над стандартными функциями, которая ничего кардинально не улучшит, но создаст иллюзию "поддержки" чего-то там. В любом случае, работа с числами на стеке (более или менее удобная) - это одно, а создание дополнительных программных структур с соответствующей технологией работы с ними - совершенно другое.
Сообщение Добавлено: Вт янв 06, 2009 15:23
  Заголовок сообщения:   Ответить с цитатой
in4 писал(а):
А если для блока данных определить структуру/таблицу в куче и освободить ее после использования, так можно?
Или будет неудобно заводить несколько доп. переменных?
Вроде иметь постоянно в доступном месте и цвет и координаты - удобно...
Или все же такой вариант перегрузит словарь?

Если очень хочется локальные переменные именно в кварке - делаем самостоятельно. А вот мне например пока вполне достаточно фреймов и вот такой "дешевой альтернативы локалсам":
Код:
: L1   LOCALSTACK LOCALDEPTH 1-  -FTH ;
: L2   LOCALSTACK LOCALDEPTH 2 - -FTH ;
...
: LN   LOCALSTACK LOCALDEPTH N - -FTH ;
Сообщение Добавлено: Вт янв 06, 2009 12:49
  Заголовок сообщения:   Ответить с цитатой
А если для блока данных определить структуру/таблицу в куче и освободить ее после использования, так можно?
Или будет неудобно заводить несколько доп. переменных?
Вроде иметь постоянно в доступном месте и цвет и координаты - удобно...
Или все же такой вариант перегрузит словарь?
Сообщение Добавлено: Вт янв 06, 2009 04:53
  Заголовок сообщения:   Ответить с цитатой
Да, так бывает. Но это не означает, что простые в реализации механизмы надо... забыть? Постеняться предложить?
Сообщение Добавлено: Вс янв 04, 2009 20:10
  Заголовок сообщения:   Ответить с цитатой
Чем удобнее использование, тем труднее реализация
Сообщение Добавлено: Вс янв 04, 2009 20:05
  Заголовок сообщения:   Ответить с цитатой
вопрос писал(а):
У Хищника плохое настроение. Фрейм - тоже неплохое решение. А локальные переменные - как раз компромисс между стеком и более высокоуровневыми языками.

Ну так и получается "зачем бузина в огороде, есть стандартом давно определен дядька в Киеве?". :D Зачем искать компромисс в отсутствие конфликта? Локальные переменные относятся к другому классу механизмов, и не скажу, что они кардинально улучшают ситуацию. Да, оно "можно" (волшебное слово) и в Форте, только по шкале трудоемкость/эффект занимает далеко не лидирующие позиции.
Сообщение Добавлено: Вс янв 04, 2009 19:55
  Заголовок сообщения:   Ответить с цитатой
У Хищника плохое настроение. Фрейм - тоже неплохое решение. А локальные переменные - как раз компромисс между стеком и более высокоуровневыми языками.
Сообщение Добавлено: Вс янв 04, 2009 19:43
  Заголовок сообщения:   Ответить с цитатой
mOleg писал(а):
а так. Не изобретать самому, а посмотреть как уже сделано в различных форт-системах.

На форт-системах свет клином не сошелся.
mOleg писал(а):
В том же СПФ, к примеру,
В форке тоже оригинальный вариант,
SwiftForth и друге буржуйские форты поддерживают локалсы.

А то я всего этого не видел :))
mOleg писал(а):
Более того, есть даже некий стандарт на них.

Идущий лесом.
Сообщение Добавлено: Вс янв 04, 2009 18:53
  Заголовок сообщения:   Ответить с цитатой
Хищник писал(а):
Я не знаю насчет всех других, но как вариант используется адресация параметров относительно стекового кадра, передаваемого, например, в ebp. Кроме того, нет проблем с именованием - имена локальных переменных точно так же помещаются в таблицу символов. А в Форте как? Помещать имена в общий словарь? Помещать в какую-то отдельную область памяти (какую? сколько ей места дать? что делать, если оно кончилось? как модифицировать поиск, чтобы сначала посмотреть локальные параметры?)? Или все-таки адресовать переданные параметры относительно вершины стека, пусть и с потенциальными проблемами устойчивости против целенаправленного слома?

а так. Не изобретать самому, а посмотреть как уже сделано в различных форт-системах.
В том же СПФ, к примеру,
В форке тоже оригинальный вариант,
SwiftForth и друге буржуйские форты поддерживают локалсы.
Более того, есть даже некий стандарт на них.
Сообщение Добавлено: Вс янв 04, 2009 18:40
  Заголовок сообщения:   Ответить с цитатой
вопрос писал(а):
именно, но там нет опасности запортить этот кадр. И нет дополнительных усилий для сохранения кадра.

Поскольку есть ограничения на использование кадра, нет и опасности. О чем речь-то? Я не делаю "как в Си", я делаю "минимально по сложности, максимально по эффекту".
вопрос писал(а):
Как работают параметры? В смысле, что происходит, когда вызывается ARG0 ?

Смотрится верхнее число со стека FrameStack, это Depth на момент вызова FRAME{ (т.е. обычно вход в слово, хотя можно изменить баланс стека, но запомнено будет все равно то, что есть). ARG0 положит на стек адрес вершины стека на момент вызова FRAME{, ARG1 = ARG0 - 4, ARG2 = ARG0 - 8 и т.д.


вопрос писал(а):
По крайней мере можно включить в вызов параметров предупреждение, что вершина стека сместилась дальше, чем вызываемый адрес.

Можно включить, а можно и отнестись как к данности. Я ориентировался в большой степени на слова для работы с графическими примитивами, когда в качестве параметров передается приличный список координат, размеров, цветов, стилей и тому подобного. Там все эти параметры остаются на стеке длительное время, практически на протяжении всего слова, удаляясь серией DROP в конце.
Сообщение Добавлено: Сб янв 03, 2009 23:27
  Заголовок сообщения:   Ответить с цитатой
Цитата:
Я не знаю насчет всех других, но как вариант используется адресация параметров относительно стекового кадра, передаваемого, например, в ebp.
именно, но там нет опасности запортить этот кадр. И нет дополнительных усилий для сохранения кадра.
Как работают параметры? В смысле, что происходит, когда вызывается ARG0 ? По крайней мере можно включить в вызов параметров предупреждение, что вершина стека сместилась дальше, чем вызываемый адрес.
Сообщение Добавлено: Сб янв 03, 2009 22:11
  Заголовок сообщения:   Ответить с цитатой
Я не знаю насчет всех других, но как вариант используется адресация параметров относительно стекового кадра, передаваемого, например, в ebp. Кроме того, нет проблем с именованием - имена локальных переменных точно так же помещаются в таблицу символов. А в Форте как? Помещать имена в общий словарь? Помещать в какую-то отдельную область памяти (какую? сколько ей места дать? что делать, если оно кончилось? как модифицировать поиск, чтобы сначала посмотреть локальные параметры?)? Или все-таки адресовать переданные параметры относительно вершины стека, пусть и с потенциальными проблемами устойчивости против целенаправленного слома?
Сообщение Добавлено: Сб янв 03, 2009 21:39

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


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