Автор |
Сообщение |
|
|
Заголовок сообщения: |
|
|
|
Что я бы хотел получить от минимального транслятора:
Он должен быть 32 разрядный. Работать на windows и linux.
Из внешних функций: Загрузка DLL, поиск адреса, Открыть файл, читать файл. Что бы стартовать и начать читать файл программы на форте.
Другие функции не нужны, я все равно их вынужден грузить из DLL.
Из примитивов: ?branch ( перейти по адресу в зависимости от значения на стеке), для организации циклов и условий.
Что я бы хотел получить от минимального транслятора:
Он должен быть 32 разрядный. Работать на windows и linux.
Из внешних функций: Загрузка DLL, поиск адреса, Открыть файл, читать файл. Что бы стартовать и начать читать файл программы на форте.
Другие функции не нужны, я все равно их вынужден грузить из DLL.
Из примитивов: ?branch ( перейти по адресу в зависимости от значения на стеке), для организации циклов и условий.
|
|
|
|
Добавлено: Пт мар 12, 2010 22:01 |
|
|
|
|
|
Заголовок сообщения: |
|
|
|
Хищник писал(а): Есть еще понятие Turing tar-pit ("Тьюринговая яма с дегтем"), которое используют для обозначения такого Тьюринг-полного языка, на котором ничего реального сделать нельзя из-за его минимальности, доведенной до абсурда. Мне кажется, что этот пример показывает только проблемы применения самого универсального языка. Но возможность описать Машиной Тьюринга как универсальным языком любой существующий алгоритм нужна для унификации метода раскрутки транслятора для всего железного зоопарка. Дальнейшую раскрутку продуктивнее рассматривать на опыте создания Паскаля через ручную компиляцию интерпретатора Р-кода. Ведь самый важный вопрос – это переносимость программ, т.е. с какого момента избыточность порождаемого транслятором маш. кода не будет отрицательно сказываться на компактности.
[quote="Хищник"]Есть еще понятие Turing tar-pit ("Тьюринговая яма с дегтем"), которое используют для обозначения такого Тьюринг-полного языка, на котором ничего реального сделать нельзя из-за его минимальности, доведенной до абсурда. [/quote]Мне кажется, что этот пример показывает только проблемы применения самого универсального языка. Но возможность описать Машиной Тьюринга как универсальным языком любой существующий алгоритм нужна для унификации метода раскрутки транслятора для всего железного зоопарка. Дальнейшую раскрутку продуктивнее рассматривать на опыте создания Паскаля через ручную компиляцию интерпретатора Р-кода. Ведь самый важный вопрос – это переносимость программ, т.е. с какого момента избыточность порождаемого транслятором маш. кода не будет отрицательно сказываться на компактности.
|
|
|
|
Добавлено: Пт мар 12, 2010 20:23 |
|
|
|
|
|
Заголовок сообщения: |
|
|
|
Хищник писал(а): Есть еще понятие Turing tar-pit ("Тьюринговая яма с дегтем"), которое используют для обозначения такого Тьюринг-полного языка, на котором ничего реального сделать нельзя из-за его минимальности, доведенной до абсурда.
тут переводят http://ru.wikipedia.org/wiki/Тьюринговская_трясина
ага, обсужение перешло в теоретическую плоскость, я так и знал, что "минимальный" заставляет видеть теоретическую задачу
[quote="Хищник"]Есть еще понятие Turing tar-pit ("Тьюринговая яма с дегтем"), которое используют для обозначения такого Тьюринг-полного языка, на котором ничего реального сделать нельзя из-за его минимальности, доведенной до абсурда.[/quote]
тут переводят http://ru.wikipedia.org/wiki/Тьюринговская_трясина
ага, обсужение перешло в теоретическую плоскость, я так и знал, что "минимальный" заставляет видеть теоретическую задачу
|
|
|
|
Добавлено: Пт мар 12, 2010 19:19 |
|
|
|
|
|
Заголовок сообщения: |
|
|
|
Есть еще понятие Turing tar-pit ("Тьюринговая яма с дегтем"), которое используют для обозначения такого Тьюринг-полного языка, на котором ничего реального сделать нельзя из-за его минимальности, доведенной до абсурда.
Есть еще понятие Turing tar-pit ("Тьюринговая яма с дегтем"), которое используют для обозначения такого Тьюринг-полного языка, на котором ничего реального сделать нельзя из-за его минимальности, доведенной до абсурда.
|
|
|
|
Добавлено: Пт мар 12, 2010 17:36 |
|
|
|
|
|
Заголовок сообщения: |
|
|
|
dynamic-wind писал(а): brainfuck уже давно реализован Реализован по какой модели?
[quote="dynamic-wind"]brainfuck уже давно реализован [/quote]Реализован по какой модели?
|
|
|
|
Добавлено: Пт мар 12, 2010 16:41 |
|
|
|
|
|
Заголовок сообщения: |
|
|
|
brainfuck уже давно реализован
brainfuck уже давно реализован
|
|
|
|
Добавлено: Пт мар 12, 2010 15:36 |
|
|
|
|
|
Заголовок сообщения: |
|
|
|
Хищник писал(а): Лента МТ представляет не только содержимое регистров, но и памяти данных. 4 ячейки памяти - это мало. Теоретически, лента должна быть бесконечной. На практике это выливается в требование, что памяти должно быть столько, сколько попросим. Возможные теоретические требования сразу ограничены созданной архитектурой, в которой разработчик реализует некую модель. В данном случае – это стек, а МТ – это простейшее теоретическое обоснование возможности реализации. Всё, что принято разносить в разные адресные пространства может быть реализовано, как бы на одной ленте в разных местах. Вообще, над формулировками еще надо поработать. Я просто предлагаю модель, которая поддерживает как расширение, так и компоновку, или биты старше 4-го 8-16…-разрядных регистров могут использоваться для контроля безопасности исполняемой программы и т.д.
P.S. Или я еще чего-то не улавливаю.
[quote="Хищник"]Лента МТ представляет не только содержимое регистров, но и памяти данных. 4 ячейки памяти - это мало. Теоретически, лента должна быть бесконечной. На практике это выливается в требование, что памяти должно быть столько, сколько попросим. [/quote]Возможные теоретические требования сразу ограничены созданной архитектурой, в которой разработчик реализует некую модель. В данном случае – это стек, а МТ – это простейшее теоретическое обоснование возможности реализации. Всё, что принято разносить в разные адресные пространства может быть реализовано, как бы на одной ленте в разных местах. Вообще, над формулировками еще надо поработать. Я просто предлагаю модель, которая поддерживает как расширение, так и компоновку, или биты старше 4-го 8-16…-разрядных регистров могут использоваться для контроля безопасности исполняемой программы и т.д.
P.S. Или я еще чего-то не улавливаю.
|
|
|
|
Добавлено: Пт мар 12, 2010 15:18 |
|
|
|
|
|
Заголовок сообщения: |
|
|
|
idem писал(а): Ограничим ленту Машины Тьюринга до 4 элементов (массива). Это минимум(?) для практического применения.
Лента МТ представляет не только содержимое регистров, но и памяти данных. 4 ячейки памяти - это мало. Теоретически, лента должна быть бесконечной. На практике это выливается в требование, что памяти должно быть столько, сколько попросим.
[quote="idem"]Ограничим ленту Машины Тьюринга до 4 элементов (массива). Это минимум(?) для практического применения. [/quote]
Лента МТ представляет не только содержимое регистров, но и памяти данных. 4 ячейки памяти - это мало. Теоретически, лента должна быть бесконечной. На практике это выливается в требование, что памяти должно быть столько, сколько попросим.
|
|
|
|
Добавлено: Пт мар 12, 2010 14:08 |
|
|
|
|
|
Заголовок сообщения: |
|
|
|
Представлю иллюстрацию своего виденья модели минимального Форт-транслятора.
Ограничим ленту Машины Тьюринга до 4 элементов (массива). Это минимум(?) для практического применения.
8(16) 4(16) 2(16) 1(16)
Условимся принимать за вершину стека младший или старший бит. В каждой конкретной архитектуре разработчик сам сможет выделять регистр для вершины. Теперь, в зависимости от значения(1, 2, 4 или 8 ) в этом регистре, может происходить ввод/вывод данных для каждого элемента стека. Как-то так.
Представлю иллюстрацию своего виденья модели минимального Форт-транслятора.
Ограничим ленту Машины Тьюринга до 4 элементов (массива). Это минимум(?) для практического применения.
8(16) 4(16) 2(16) 1(16)
Условимся принимать за вершину стека младший или старший бит. В каждой конкретной архитектуре разработчик сам сможет выделять регистр для вершины. Теперь, в зависимости от значения(1, 2, 4 или 8 ) в этом регистре, может происходить ввод/вывод данных для каждого элемента стека. Как-то так.
|
|
|
|
Добавлено: Пт мар 12, 2010 12:17 |
|
|
|
|
|
Заголовок сообщения: |
|
|
|
in4 писал(а): mOleg писал(а):Все понятно. То есть, как я и предполагал, State никуда не делась, а была "развернута" в код.
Мне так показалось лучше. Зачем таскать флаги, лучше сразу делать то, что надо. И если интерпретаторы существенно разные, почему бы не иметь их оба? Тем более, что дублирование минимальное.
ну, это святое
просто знать иногда в каком состоянии находится система тоже бывает надо.
кстати, интересно ведь еще и то, что в STATE можно сохранять больше двух состояний, за с чет чего, к примеру, контролировать вложенность различных конструкций.
[quote="in4"]mOleg писал(а):Все понятно. То есть, как я и предполагал, State никуда не делась, а была "развернута" в код.
Мне так показалось лучше. Зачем таскать флаги, лучше сразу делать то, что надо. И если интерпретаторы существенно разные, почему бы не иметь их оба? Тем более, что дублирование минимальное.[/quote]
ну, это святое :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
[quote="in4"]until не реализовано. again пойдет на последний begin . Если надо вложенность - можно использовать имена - все равно лучше циклы как-то различать:[/quote]
Ну и назови не again и begin , а again0 и begin0 .
Несли слова работают по другому, то и имя у них должно быть другое.
Можно использовать в качестве меток.
[code]
BEGIN0 ... BEGIN1 ... UNTIL0 ... AGAIN1 [/code]
Типа http://spf.cvs.sourceforge.net/viewvc/spf/devel/~mak/LIB/A_IF.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 - организация простых безымянных циклов внутри слова.
[quote="Хищник"][quote="in4"]Код: [ forth var (begin)
macro : begin here (begin) ! ; : again E9 1, (begin) @ here - 2 - 2, ; [/quote]
[code]begin ... begin <cond> until again[/code] Куда пойдет [b]again[/b]?[/quote] [b]until[/b] не реализовано. :( [b]again[/b] пойдет на последний [b]begin[/b] . Если надо вложенность - можно использовать имена - все равно лучше циклы как-то различать: [code] : begin1 ... begin <cond> until begin1 ;[/code]или так: [code]begin ... : begin1 <cond> -if drop begin1 ; then again[/code]
Напоминаю, что в этой реализации имеются множественные точки входа и [b];[/b] - это [b]RET[/b] с оптимизацией хвостовой рекурсии.
Смысл таких [b]begin[/b]-[b]again[/b] - организация простых безымянных циклов внутри слова.
|
|
|
|
Добавлено: Вт мар 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?
[quote="in4"]Код: [ forth var (begin)
macro : begin here (begin) ! ; : again E9 1, (begin) @ here - 2 - 2, ; [/quote]
[code]begin ... begin <cond> until again[/code]
Куда пойдет again?
|
|
|
|
Добавлено: Вт мар 02, 2010 15:13 |
|
|
|
|
|
Заголовок сообщения: |
|
|
|
mOleg писал(а): Все понятно. То есть, как я и предполагал, State никуда не делась, а была "развернута" в код. Мне так показалось лучше. Зачем таскать флаги, лучше сразу делать то, что надо. И если интерпретаторы существенно разные, почему бы не иметь их оба? Тем более, что дублирование минимальное. mOleg писал(а): кстати, а каким образом работает again ?
Код: [ forth var (begin)
macro : begin here (begin) ! ; : again E9 1, (begin) @ here - 2 - 2, ;
[quote="mOleg"]Все понятно. То есть, как я и предполагал, State никуда не делась, а была "развернута" в код.[/quote] Мне так показалось лучше. ;) Зачем таскать флаги, лучше сразу делать то, что надо. И если интерпретаторы существенно разные, почему бы не иметь их оба? ;) Тем более, что дублирование минимальное.
[quote="mOleg"]кстати, а каким образом работает again ?[/quote]
[code][ forth var (begin)
macro : begin here (begin) ! ; : again E9 1, (begin) @ here - 2 - 2, ; [/code]
|
|
|
|
Добавлено: Вт мар 02, 2010 15:10 |
|
|
|
|
|
Заголовок сообщения: |
|
|
|
in4 писал(а): ie - собственно интерпретатор или компилятор...
Все понятно. То есть, как я и предполагал, State никуда не делась, а была "развернута" в код.
Самое главное, мне не показался такой транслятор более простым 8( со state выглядело элегантнее. Кроме того не понятно, что делать, если захочется "понять" в каком же сейчас состоянии находится система. То есть, если в похожем случае с числами я за убирание глобальной переменной BASE, то тут я преимуществ не вижу.
кстати, а каким образом работает again ?
[quote="in4"]ie - собственно интерпретатор или компилятор... [/quote]
Все понятно. То есть, как я и предполагал, State никуда не делась, а была "развернута" в код.
Самое главное, мне не показался такой транслятор более простым 8( со state выглядело элегантнее. Кроме того не понятно, что делать, если захочется "понять" в каком же сейчас состоянии находится система. То есть, если в похожем случае с числами я за убирание глобальной переменной BASE, то тут я преимуществ не вижу.
кстати, а каким образом работает again ? ;)
|
|
|
|
Добавлено: Вт мар 02, 2010 08:08 |
|
|
|
|