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

...
Google Search
Forth-FAQ Spy Grafic

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




Начать новую тему Ответить на тему  [ Сообщений: 20 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Локальные переменные
СообщениеДобавлено: Вт дек 25, 2012 15:10 
Не в сети
Administrator
Administrator
Аватара пользователя

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Локальные переменные
СообщениеДобавлено: Вт дек 25, 2012 15:37 
Не в сети
Administrator
Administrator
Аватара пользователя

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

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Локальные переменные
СообщениеДобавлено: Вт дек 25, 2012 16:22 
Не в сети

Зарегистрирован: Пн ноя 05, 2007 13:54
Сообщения: 144
Благодарил (а): 0 раз.
Поблагодарили: 13 раз.
Хищник писал(а):
Обсуждение локальных переменных давно вышло из разряда "для начинающих". Поэтому есть предложение вынести разговор в отдельную тему, где внимательно и со вкусом все обмусолить :)

Был бы признателен, если бы обсуждение перенесли сюда :)

Проще, конечно, свой стек: http://www.ece.cmu.edu/~koopman/forth/rochester_90b.pdf
"Сквозной" стек данных не подходит, поскольку помимо переменных приходится хранить еще и служебную информацию. Тем не менее попытки использовать стек данных для этих целей были: http://www.forth.com/archive/jfar/vol3/no1/article3.pdf
Многие современные Форты представляют собой сочетание вычислительной модели Форт- и Си- машин. Стек возвратов в этом случае представляет собой обычный Си-стек. Зачастую, в таком варианте более удобна интеграция с API популярных ОС.
Забавный момент. Создатели локальных переменных в Форте хотели, чтобы их конструкция соответствовала положению дел в других языках, поддерживающих структурное программирование (все Алгол-семейство). Но позиция "время жизни локальных переменных = времени жизни функции" на деле Алгол-подобным языкам не соответствует. На эту тему есть статья: http://citeseerx.ist.psu.edu/viewdoc/su ... .1.52.9644
Кстати, концепция локальных переменных еще и не соответствует пресловутой "конкатенативности" Форта.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Локальные переменные
СообщениеДобавлено: Вт дек 25, 2012 16:24 
Не в сети
Moderator
Moderator
Аватара пользователя

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

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

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Локальные переменные
СообщениеДобавлено: Вт дек 25, 2012 17:28 
Не в сети

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


Можно завести несколько стеков типа:
http://spf.cvs.sourceforge.net/viewvc/spf/devel/~profit/lib/LStack.f
и использовать их в качестве локальных переменных.

Здесь возникает проблема сброса этих стеков при исключительных ситуациях.
Флаткин подменяет CATCH и THROW
http://spf.cvs.sourceforge.net/viewvc/spf/devel/~af/lib/locstack.f?revision=1.3
Я предлагаю, разместить эти стеки внутри циклических буферов.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Локальные переменные
СообщениеДобавлено: Вт дек 25, 2012 17:33 
Не в сети
Administrator
Administrator
Аватара пользователя

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

и кто-то на рекурсии с ними вляпается

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Локальные переменные
СообщениеДобавлено: Вт дек 25, 2012 17:34 
Не в сети
Moderator
Moderator
Аватара пользователя

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

без грабель впереди\позади жить не интересно?
и что будет после переполнения возможного-то?

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

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Локальные переменные
СообщениеДобавлено: Вт дек 25, 2012 18:01 
WingLion писал(а):
смешной вопрос, почему для них юзается стек возвратов, а не стек данных, например? Или, проще, для них свой стек организовать?

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


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Локальные переменные
СообщениеДобавлено: Вт дек 25, 2012 18:17 
Не в сети

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

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

Код:
  777777 >L
\ Критическая область
  . . .
L>  777777 <> ABORT" выход за отведенный размер L стека"


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Локальные переменные
СообщениеДобавлено: Вт дек 25, 2012 22:46 
Не в сети
Administrator
Administrator
Аватара пользователя

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

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Локальные переменные
СообщениеДобавлено: Вт дек 25, 2012 23:37 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7960
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
Есть смутное ощущение, что не стоит. Это же все полезет через мультиплексор в timing critical nets. Локальные переменные видятся полезными для разгрузки мозгов программиста, а не для каких-то критичных секций кода. Для форт-процессора можно их реализовать и программно. Опять же не будет фрагментирования накристальной памяти, которая всегда в дефиците.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Локальные переменные
СообщениеДобавлено: Ср дек 26, 2012 01:39 
Не в сети
Administrator
Administrator
Аватара пользователя

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

Это же просто заплатка, проблема остается.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Локальные переменные
СообщениеДобавлено: Пн окт 10, 2016 21:00 
Не в сети

Зарегистрирован: Чт янв 07, 2016 19:14
Сообщения: 1288
Благодарил (а): 3 раз.
Поблагодарили: 18 раз.
Лучше всё ж стек возвратов под локалки.
Сразу код на очистку вставить. Организовать доступ и всё.
Переопределить слова для организации циклов и операций со стеком возвратов. или мониторим операции со стеком при компиляции слова.
И всё, радуемся жизни :)
Однако, проблемы с оптимизацией.
Возникала пару раз ситуация, когда надо уже значения локализировать, но один-два параметра тут же нужны.
Нужна какая-то карта удаления-локализации.
Что-то вроде ->LOC: DLDL , где D означает что значение нужно на стеке и оно там сохраняется, а L просто удаляется со стека. В данном случае всё просто: скомпилим DROP и NIP
А как быть в других случаях? А если значений принимается больше?

_________________
Цель: сделать 64-битную Нову под Винду


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Локальные переменные
СообщениеДобавлено: Вт окт 11, 2016 02:15 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7960
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
viewtopic.php?f=23&t=2942 - вот здесь пример. Стек возвратов - это хорошо (а на самом деле не очень-то и хорошо), но ведь есть и другие переменные и даже локальные слова, которые в формат целочисленных ячеек не вписываются.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Локальные переменные
СообщениеДобавлено: Вт окт 11, 2016 16:18 
Не в сети

Зарегистрирован: Чт янв 07, 2016 19:14
Сообщения: 1288
Благодарил (а): 3 раз.
Поблагодарили: 18 раз.
Есть такое.
Смотрел эту ветку когда-то.
Тогда для меня это вообще была магия форта, непонятная и необъяснимая...
А сейчас...
Разберёмся немножко.
Разрыв определения и определение лок.переменных, нужных слов и т.д.
Граничен для всех случаев? Да
Гибок при написании? Да
Переносим из одного места в другое? Нет
Доп.расходы? Имеются, тот же jmp строить ( +15 доп.тактов)
Потоконезависимо? Надо учитывать отдельно

Использование стека возвратов
Граничен для всех случаев? Нет
Гибок при написании? без понятия
Переносим из одного места в другое? Да
Доп.расходы? Имеются, вызов лямбды ( call кажется 30 тактов) , можно обойти, но лень :)
Потоконезависимо? да

Локальные слова можно определять и на стеке возвратов. Я так код лямбд на стек переносил

_________________
Цель: сделать 64-битную Нову под Винду


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

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


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

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


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

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