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

...
Google Search
Forth-FAQ Spy Grafic

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




Начать новую тему Ответить на тему  [ Сообщений: 159 ]  На страницу 1, 2, 3, 4, 5 ... 11  След.
Автор Сообщение
 Заголовок сообщения: 3-х стековая виртуальная машина. размышления.
СообщениеДобавлено: Ср янв 06, 2010 23:06 
Не в сети
Moderator
Moderator
Аватара пользователя

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

и сразу видимые недостатки:
- перестраивается система команд (в смысле она новая получается, и надо привыкать)
- может не хватать регистров процессора для организации виртуальной 3-х стековой машины
- увеличивается необходимое количество примитивов виртуальной машины
?

ну, и для затравки команды ВМ

DUP ( d: x --> d: x x )
DROP ( d: a b --> d: b )
OVER ( d: a b --> d: a b a )
SWAP ( d: a b --> d: b a )
NIP ( d: a b --> d: b )
+ ( d: a b --> d: a+b )
- ( d: a b --> d: a-b )
* ( d: a b --> d: a*b )
/ ( d: a b --> d: a/b )

ADROP ( a: a --> )
ASWAP ( a: a1 a2 --> a: a2 a1 )
ADUP ( a: a --> a a )
AOVER ( a: a1 a2 --> a: a1 a2 a1 )
ANIP ( a: a1 a2 --> a: a2 )
A@ ( a: a1 --> a: a2 )
A! ( a: a1 a2 --> )

A+ ( a: addr d: u --> a: addr+u )
@ ( a: addr --> d: n )
! ( a: addr d: n --> )

A>R ( a: a --> r: a )
R>A ( r: a --> a: a )

>A ( d: n --> a: n )
>R ( d: n --> r: n )

EXECUTE ( a: xt --> )

и т.д.

где,
a: - стек адресов
d: - стек данных
r: - стек возвратов

такие вот мысли

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


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

Зарегистрирован: Вт май 02, 2006 13:19
Сообщения: 3565
Откуда: St.Petersburg
Благодарил (а): 4 раз.
Поблагодарили: 72 раз.
mOleg писал(а):
>A ( d: n --> a: n )
>R ( d: n --> r: n )


явно не хватает
A> (a: n --> d: n)
R> (r: n --> d: n)


mOleg писал(а):
A+ ( a: addr d: u --> a: addr+u )
@ ( a: addr --> d: n )
! ( a: addr d: n --> )


полагаю, сильно потребуется еще и
A++ ( a: addr --> a: addr+1 )
A-- ( a: addr --> a: addr-1 )

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


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

Зарегистрирован: Вт май 09, 2006 12:31
Сообщения: 3438
Благодарил (а): 5 раз.
Поблагодарили: 16 раз.
Сейчас проектирую (пытаюсь) такой (чуть другой) форт. Не знаю, доведу ли до конца - требуется больше идей, чем представлялось вначале. Кодирования не так много.


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

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7960
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
Только если будет A> (или A>R R>, что то же самое), тогда появится и : '! A> ! ; И тогда какой смысл в стеке, который, вроде бы, призван обеспечивать контроль типов?


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

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

нет, цель не контроль типов.

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


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

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 5062
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 23 раз.
Поблагодарили: 63 раз.
WingLion писал(а):
явно не хватает
A> (a: n --> d: n)
R> (r: n --> d: n)

да, действительно забыл.

WingLion писал(а):
полагаю, сильно потребуется еще и
A++ ( a: addr --> a: addr+1 )
A-- ( a: addr --> a: addr-1 )

а это сомнительно, скорее надо что-то с такой стековой картинкой ( a: addr --> d: n a: addr+cell ) то есть чтение с автоинкрементом\декрементом и запись.

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


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

Зарегистрирован: Вт май 09, 2006 12:31
Сообщения: 3438
Благодарил (а): 5 раз.
Поблагодарили: 16 раз.
Хищник писал(а):
Только если будет A> (или A>R R>, что то же самое), тогда появится и : '! A> ! ; И тогда какой смысл в стеке, который, вроде бы, призван обеспечивать контроль типов?


Контроль типов - не единственная цель, если адрес лежит рядом с данными, он элементарно "путается под ногами" ИМХО


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

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7960
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
mOleg писал(а):
нет, цель не контроль типов.

А тогда зачем заставлять программиста думать, на тот ли стек он кладет?


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

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 5062
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 23 раз.
Поблагодарили: 63 раз.
WingLion писал(а):
явно не хватает
A> (a: n --> d: n)
R> (r: n --> d: n)

да, действительно забыл.

WingLion писал(а):
полагаю, сильно потребуется еще и
A++ ( a: addr --> a: addr+1 )
A-- ( a: addr --> a: addr-1 )

а это сомнительно, скорее надо что-то с такой стековой картинкой ( a: addr --> d: n a: addr+cell ) то есть чтение с автоинкрементом\декрементом и запись.

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


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

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

а ему особо задумываться об этом и не придется, как раз убирается эффект перемешивания данных и адресов на стеке данных. На первый взгляд код должен стать проще (возможно только на первый).

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


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

Зарегистрирован: Вт май 09, 2006 12:31
Сообщения: 3438
Благодарил (а): 5 раз.
Поблагодарили: 16 раз.
Хищник писал(а):
mOleg писал(а):
нет, цель не контроль типов.

А тогда зачем заставлять программиста думать, на тот ли стек он кладет?

Это точно экономнее, чем просчитывать, что и где вперемешку лежит на одном стеке


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

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

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Чт янв 07, 2010 00:55 
Не в сети
Administrator
Administrator
Аватара пользователя

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

А что, уже есть примеры такого кода? Потому что как писать на Форте, прекрасно понятно, а вот как писать на таком диалекте, где ! @ делают не то, к чему привык программист? И вместо перемешивания чисел на одном стеке будет перемешивание стеков - куда как проще :))


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Чт янв 07, 2010 00:58 
Не в сети
Administrator
Administrator
Аватара пользователя

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

Вот не надо трюков. Когда появляются "трюки" это означает только то, что простыми и понятными средствами решение не выражается. А если оно уже на этапе создания обложено трюками, то что же будет, когда возникнут сложности в реализации прикладной программы? Это еще и про нетривиальную основу языка помнить?


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

Зарегистрирован: Вт май 09, 2006 12:31
Сообщения: 3438
Благодарил (а): 5 раз.
Поблагодарили: 16 раз.
Хищник писал(а):
вопрос писал(а):
Это точно экономнее, чем просчитывать, что и где вперемешку лежит на одном стеке

А что, уже есть примеры такого кода? Потому что как писать на Форте, прекрасно понятно, а вот как писать на таком диалекте, где ! @ делают не то, к чему привык программист? И вместо перемешивания чисел на одном стеке будет перемешивание стеков - куда как проще :))

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

Чем отличается ситуация, когда программист создал дополнительный стек с некоторым форматом и переопределил
@ ! от ситуации, когда это сделано с самого начала? "Гибкость форта разбилась о шаблонность программиста"


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

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


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

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


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

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