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

...
Google Search
Forth-FAQ Spy Grafic

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




Начать новую тему Ответить на тему  [ Сообщений: 222 ]  На страницу Пред.  1 ... 11, 12, 13, 14, 15
Автор Сообщение
 Заголовок сообщения:
СообщениеДобавлено: Вт мар 02, 2010 15:25 
Не в сети

Зарегистрирован: Сб май 06, 2006 12:01
Сообщения: 959
Откуда: Украина, Харьков
Благодарил (а): 2 раз.
Поблагодарили: 7 раз.
Хищник писал(а):
in4 писал(а):
Код:
[ forth
var (begin)

macro
: begin here (begin) ! ;
: again E9 1, (begin) @ here - 2 - 2, ;


Код:
begin
  ...
  begin
  <cond> until
again

Куда пойдет again?

until не реализовано. :(
again пойдет на последний begin .
Если надо вложенность - можно использовать имена - все равно лучше циклы как-то различать:
Код:
: begin1
  ...
  begin
  <cond> until
  begin1 ;
или так:
Код:
begin
  ...
: begin1
  <cond> -if drop begin1 ; then
again

Напоминаю, что в этой реализации имеются множественные точки входа и ; - это RET с оптимизацией хвостовой рекурсии.

Смысл таких begin-again - организация простых безымянных циклов внутри слова.

_________________
With best wishes, in4.


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

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


Ну и назови не again и begin , а again0 и begin0 .
Несли слова работают по другому, то и имя у них должно быть другое.

Можно использовать в качестве меток.

Код:

  BEGIN0
  ...
  BEGIN1
  ...
  UNTIL0
...
AGAIN1



Типа http://spf.cvs.sourceforge.net/viewvc/s ... F?view=log


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вт мар 02, 2010 16:47 
Не в сети
Moderator
Moderator
Аватара пользователя

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

Мне так показалось лучше.
Зачем таскать флаги, лучше сразу делать то, что надо. И если интерпретаторы существенно разные, почему бы не иметь их оба? Тем более, что дублирование минимальное.

ну, это святое :D
просто знать иногда в каком состоянии находится система тоже бывает надо.
кстати, интересно ведь еще и то, что в STATE можно сохранять больше двух состояний, за с чет чего, к примеру, контролировать вложенность различных конструкций.

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пт мар 12, 2010 12:17 
Представлю иллюстрацию своего виденья модели минимального Форт-транслятора.
Ограничим ленту Машины Тьюринга до 4 элементов (массива). Это минимум(?) для практического применения.
8(16) 4(16) 2(16) 1(16)
Условимся принимать за вершину стека младший или старший бит. В каждой конкретной архитектуре разработчик сам сможет выделять регистр для вершины. Теперь, в зависимости от значения(1, 2, 4 или 8 ) в этом регистре, может происходить ввод/вывод данных для каждого элемента стека. Как-то так.


Последний раз редактировалось idem Пт мар 12, 2010 16:35, всего редактировалось 1 раз.

Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пт мар 12, 2010 14:08 
Не в сети
Administrator
Administrator
Аватара пользователя

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

Лента МТ представляет не только содержимое регистров, но и памяти данных. 4 ячейки памяти - это мало. Теоретически, лента должна быть бесконечной. На практике это выливается в требование, что памяти должно быть столько, сколько попросим.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пт мар 12, 2010 15:18 
Хищник писал(а):
Лента МТ представляет не только содержимое регистров, но и памяти данных. 4 ячейки памяти - это мало. Теоретически, лента должна быть бесконечной. На практике это выливается в требование, что памяти должно быть столько, сколько попросим.
Возможные теоретические требования сразу ограничены созданной архитектурой, в которой разработчик реализует некую модель. В данном случае – это стек, а МТ – это простейшее теоретическое обоснование возможности реализации. Всё, что принято разносить в разные адресные пространства может быть реализовано, как бы на одной ленте в разных местах. Вообще, над формулировками еще надо поработать. Я просто предлагаю модель, которая поддерживает как расширение, так и компоновку, или биты старше 4-го 8-16…-разрядных регистров могут использоваться для контроля безопасности исполняемой программы и т.д.

P.S. Или я еще чего-то не улавливаю.


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пт мар 12, 2010 15:36 
Не в сети
Аватара пользователя

Зарегистрирован: Чт июн 25, 2009 11:12
Сообщения: 412
Благодарил (а): 41 раз.
Поблагодарили: 8 раз.
brainfuck уже давно реализован


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пт мар 12, 2010 16:41 
dynamic-wind писал(а):
brainfuck уже давно реализован
Реализован по какой модели?


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пт мар 12, 2010 17:36 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7960
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
Есть еще понятие Turing tar-pit ("Тьюринговая яма с дегтем"), которое используют для обозначения такого Тьюринг-полного языка, на котором ничего реального сделать нельзя из-за его минимальности, доведенной до абсурда.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пт мар 12, 2010 19:19 
Не в сети

Зарегистрирован: Вт май 09, 2006 12:31
Сообщения: 3438
Благодарил (а): 5 раз.
Поблагодарили: 16 раз.
Хищник писал(а):
Есть еще понятие Turing tar-pit ("Тьюринговая яма с дегтем"), которое используют для обозначения такого Тьюринг-полного языка, на котором ничего реального сделать нельзя из-за его минимальности, доведенной до абсурда.

тут переводят http://ru.wikipedia.org/wiki/Тьюринговская_трясина
ага, обсужение перешло в теоретическую плоскость, я так и знал, что "минимальный" заставляет видеть теоретическую задачу


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пт мар 12, 2010 20:23 
Хищник писал(а):
Есть еще понятие Turing tar-pit ("Тьюринговая яма с дегтем"), которое используют для обозначения такого Тьюринг-полного языка, на котором ничего реального сделать нельзя из-за его минимальности, доведенной до абсурда.
Мне кажется, что этот пример показывает только проблемы применения самого универсального языка. Но возможность описать Машиной Тьюринга как универсальным языком любой существующий алгоритм нужна для унификации метода раскрутки транслятора для всего железного зоопарка. Дальнейшую раскрутку продуктивнее рассматривать на опыте создания Паскаля через ручную компиляцию интерпретатора Р-кода. Ведь самый важный вопрос – это переносимость программ, т.е. с какого момента избыточность порождаемого транслятором маш. кода не будет отрицательно сказываться на компактности.


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пт мар 12, 2010 22:01 
Не в сети

Зарегистрирован: Ср фев 17, 2010 18:10
Сообщения: 323
Откуда: Тверь
Благодарил (а): 13 раз.
Поблагодарили: 11 раз.
Что я бы хотел получить от минимального транслятора:
Он должен быть 32 разрядный. Работать на windows и linux.
Из внешних функций: Загрузка DLL, поиск адреса, Открыть файл, читать файл. Что бы стартовать и начать читать файл программы на форте.
Другие функции не нужны, я все равно их вынужден грузить из DLL.
Из примитивов: ?branch ( перейти по адресу в зависимости от значения на стеке), для организации циклов и условий.


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

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


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

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


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

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