Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Чт мар 28, 2024 12:11

...
Google Search
Forth-FAQ Spy Grafic

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




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

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

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

тут переводят http://ru.wikipedia.org/wiki/Тьюринговская_трясина
ага, обсужение перешло в теоретическую плоскость, я так и знал, что "минимальный" заставляет видеть теоретическую задачу
Сообщение Добавлено: Пт мар 12, 2010 19:19
  Заголовок сообщения:   Ответить с цитатой
Есть еще понятие Turing tar-pit ("Тьюринговая яма с дегтем"), которое используют для обозначения такого Тьюринг-полного языка, на котором ничего реального сделать нельзя из-за его минимальности, доведенной до абсурда.
Сообщение Добавлено: Пт мар 12, 2010 17:36
  Заголовок сообщения:   Ответить с цитатой
dynamic-wind писал(а):
brainfuck уже давно реализован
Реализован по какой модели?
Сообщение Добавлено: Пт мар 12, 2010 16:41
  Заголовок сообщения:   Ответить с цитатой
brainfuck уже давно реализован
Сообщение Добавлено: Пт мар 12, 2010 15:36
  Заголовок сообщения:   Ответить с цитатой
Хищник писал(а):
Лента МТ представляет не только содержимое регистров, но и памяти данных. 4 ячейки памяти - это мало. Теоретически, лента должна быть бесконечной. На практике это выливается в требование, что памяти должно быть столько, сколько попросим.
Возможные теоретические требования сразу ограничены созданной архитектурой, в которой разработчик реализует некую модель. В данном случае – это стек, а МТ – это простейшее теоретическое обоснование возможности реализации. Всё, что принято разносить в разные адресные пространства может быть реализовано, как бы на одной ленте в разных местах. Вообще, над формулировками еще надо поработать. Я просто предлагаю модель, которая поддерживает как расширение, так и компоновку, или биты старше 4-го 8-16…-разрядных регистров могут использоваться для контроля безопасности исполняемой программы и т.д.

P.S. Или я еще чего-то не улавливаю.
Сообщение Добавлено: Пт мар 12, 2010 15:18
  Заголовок сообщения:   Ответить с цитатой
idem писал(а):
Ограничим ленту Машины Тьюринга до 4 элементов (массива). Это минимум(?) для практического применения.

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

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

ну, это святое :D
просто знать иногда в каком состоянии находится система тоже бывает надо.
кстати, интересно ведь еще и то, что в STATE можно сохранять больше двух состояний, за с чет чего, к примеру, контролировать вложенность различных конструкций.
Сообщение Добавлено: Вт мар 02, 2010 16:47
  Заголовок сообщения:   Ответить с цитатой
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:37
  Заголовок сообщения:   Ответить с цитатой
Хищник писал(а):
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 - организация простых безымянных циклов внутри слова.
Сообщение Добавлено: Вт мар 02, 2010 15:25
  Заголовок сообщения:   Ответить с цитатой
in4 писал(а):
Код:
[ forth
var (begin)

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


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

Куда пойдет again?
Сообщение Добавлено: Вт мар 02, 2010 15:13
  Заголовок сообщения:   Ответить с цитатой
mOleg писал(а):
Все понятно. То есть, как я и предполагал, State никуда не делась, а была "развернута" в код.

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

mOleg писал(а):
кстати, а каким образом работает again ?

Код:
[ forth
var (begin)

macro
: begin  here (begin) ! ;
: again  E9 1,  (begin) @ here -  2 - 2, ;
Сообщение Добавлено: Вт мар 02, 2010 15:10
  Заголовок сообщения:   Ответить с цитатой
in4 писал(а):
ie - собственно интерпретатор или компилятор...

Все понятно. То есть, как я и предполагал, State никуда не делась, а была "развернута" в код.
Самое главное, мне не показался такой транслятор более простым 8( со state выглядело элегантнее. Кроме того не понятно, что делать, если захочется "понять" в каком же сейчас состоянии находится система. То есть, если в похожем случае с числами я за убирание глобальной переменной BASE, то тут я преимуществ не вижу.

кстати, а каким образом работает again ? ;)
Сообщение Добавлено: Вт мар 02, 2010 08:08

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


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