Forth
http://fforum.winglion.ru/

Новый стандарт или чего бы хотелось
http://fforum.winglion.ru/viewtopic.php?f=9&t=99
Страница 1 из 11

Автор:  mOleg [ Вс июл 09, 2006 03:11 ]
Заголовок сообщения:  Новый стандарт или чего бы хотелось

Сразу несколько вопросов.
Первое, вроде уже давно была начата работа по созданию нового (нашего) стандарта. Но в этом направлении я знаю только одну завершенную работу - парсер Андрея Черезова, который сейчас используется в СПФ. И все ?(

Второе, что народу хотелось бы от нового стандарта вообще?
Лично мне кажется, что новый стандарт должен описывать гораздо меньше слов и по другому принципу их классифицировать. Чуточку больше уделить места словарям и методики работы с ними. Отделить интерпретатор от форт-ВМ. А так же выкинуть вредные слова типа ?DUP POSTPONE TUCK ROLL и прочих.

Может дать кто-нибудь ссылки на последние результаты работы в этом направлении. Все, что я смог найти - старовато 8(

Автор:  Hishnik [ Вс июл 09, 2006 12:51 ]
Заголовок сообщения: 

У меня сразу такой вопрос: а где находится основная часть фортеров, которым это было бы интересно? И не проще ли окажется собрать их здесь?

Автор:  вопрос [ Вс июл 09, 2006 12:59 ]
Заголовок сообщения: 

Что хотелось бы от нового стандарта:
    1 Возможность делать обычные ехе-шники с оптимизированным кодом, не пользоваться же конечному юзеру интерпретатором ...
    2 Для этого - оптимизация работы со стеком (реально - что полезного делает dup ? :dmad; )
    3 Стандартизация связи с другими языками (в частности, неограниченный встроенный ассемблер)
Ещё куча когда изучу как слодует.

[/list]

Автор:  WingLion [ Вс июл 09, 2006 13:21 ]
Заголовок сообщения: 

вопрос писал(а):
1 Возможность делать обычные ехе-шники с оптимизированным кодом, не пользоваться же конечному юзеру интерпретатором ...


Вообще говоря, привязывать стандарт языка к ОСи компьютера как-то неправильно. А exe-шники - это чисто осевые заморочки. Forth должен уметь их делать, но для каждой оси - свои. Стандартизировать сие дело (когда не известно, каков будет формат того же exe-шника через 5-10 лет) мне кажется несколько странно.

вопрос писал(а):
2 Для этого - оптимизация работы со стеком (реально - что полезного делает dup ? :dmad; )


DUP - это операция копирования
(по аналогии с ОСью - что полезного делает команда copy? :)) )

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


A это, опять же, вопрос реализации, а не стандарта (imho).

Автор:  вопрос [ Вс июл 09, 2006 15:02 ]
Заголовок сообщения: 

Цитата:
A это, опять же, вопрос реализации, а не стандарта (imho).

В том смысле, в котором это есть в СИ, переносимость , исполняемые файлы для к-ой ОСи (elf, coff, a.out) не помню сейчас, что касается пользы команды DUP, так если мне нужно дважды работать с одной переменной, в ассемблере (или СИ) она лежит себе тихонько в регистре (register a), затем суммирую её с другими регистрами, вычитаю, перемещаю, делаю индексом, а она себе всё лежит, никуда я её не копирую ...

Автор:  WingLion [ Вс июл 09, 2006 15:15 ]
Заголовок сообщения: 

вопрос писал(а):
В том смысле, в котором это есть в СИ, переносимость , исполняемые файлы для к-ой ОСи (elf, coff, a.out) не помню сейчас, что касается пользы команды DUP, так если мне нужно дважды работать с одной переменной, в ассемблере (или СИ) она лежит себе тихонько в регистре (register a), затем суммирую её с другими регистрами, вычитаю, перемещаю, делаю индексом, а она себе всё лежит, никуда я её не копирую ...


A мне вдруг понадобился register a для вызова некой функции, а там переменная лежит и мешает -- без копирования не обойтись, потому что после отработки вызванной функции мне эта переменная снова понадобится!

В Форте - стек - по сути есть "магазин регистров", которые используются по правилу "первым тот, что сверху", поэтому и нужны операции типа dup, drop и т.д. Чтобы "место освободить" для "рабочего регистра". А делать адресацию с командами, типа "сложить 7-й и 5-й элементы стека" -- это уже не Форт получится, а что-то монстрообразное...

Автор:  Hishnik [ Вс июл 09, 2006 15:32 ]
Заголовок сообщения: 

вопрос писал(а):
что касается пользы команды DUP, так если мне нужно дважды работать с одной переменной, в ассемблере (или СИ) она лежит себе тихонько в регистре (register a), затем суммирую её с другими регистрами, вычитаю, перемещаю, делаю индексом, а она себе всё лежит, никуда я её не копирую ...

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

Автор:  mOleg [ Вс июл 09, 2006 21:23 ]
Заголовок сообщения: 

Хищник писал(а):
У меня сразу такой вопрос: а где находится основная часть фортеров, которым это было бы интересно? И не проще ли окажется собрать их здесь?


Аппетит приходит во время еды :)
Начинать можно где угодно - главное, чтобы все было последовательно и логично.

Автор:  mOleg [ Вс июл 09, 2006 21:30 ]
Заголовок сообщения: 

вопрос писал(а):
Что хотелось бы от нового стандарта:

1 Возможность делать обычные ехе-шники с оптимизированным кодом, не пользоваться же конечному юзеру интерпретатором ...
2 Для этого - оптимизация работы со стеком (реально - что полезного делает dup ? )
3 Стандартизация связи с другими языками (в частности, неограниченный встроенный ассемблер)


Ещё куча когда изучу как слодует.


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

Насчет ассемблера -это точно совсем лишнее. Так как асм-это посторонний язык, который принято использовать в рамках различных форт-систем. Но не более того.

Автор:  Balancer [ Пн июл 10, 2006 01:47 ]
Заголовок сообщения: 

Цитата:
Насчет ?DUP - так это слово какраз делает вредную вещь, а не полезную. По крайней мере в плане быстродействия программы


Удивительно, но ?DUP вводится именно для ускорения работы.

...

А потом удивляемся, что нормальные фортеры на этом форуме не собираются :)

Автор:  вопрос [ Пн июл 10, 2006 08:36 ]
Заголовок сообщения: 

Balancer писал(а):
Цитата:
Насчет ?DUP - так это слово какраз делает вредную вещь, а не полезную. По крайней мере в плане быстродействия программы


Удивительно, но ?DUP вводится именно для ускорения работы.
...
А потом удивляемся, что нормальные фортеры на этом форуме не собираются :)


Вообще необходимость употреблять копирование так часто - замедление работы (сколько раз копируется переменная, если нужно сравнить её с несколькими другими?).

... чтобы скопировать переменную, нужно сначала скопировать переменную ... :D :dmad;

Автор:  Гость [ Пн июл 10, 2006 08:54 ]
Заголовок сообщения: 

Balancer писал(а):
Цитата:
Насчет ?DUP - так это слово какраз делает вредную вещь, а не полезную. По крайней мере в плане быстродействия программы


Удивительно, но ?DUP вводится именно для ускорения работы.
...
А потом удивляемся, что нормальные фортеры на этом форуме не собираются :)


DUP, DROP, SWAP, OVER т.е. слова работающие со стеком зачастую выглядят
как зло в форт программе, но чем более эффективным заменить не известно!!!

Автор:  ygrek [ Пн июл 10, 2006 11:23 ]
Заголовок сообщения: 

Что-то я ничего не понимаю... Чем вам не нравится ?DUP и тем более DUP ?!
Про DUP и говорить нечего - без него никуда. Или вы предлагаете хранить _всё_ в именованных переменных? Нтак это можно сделать и сейчас - locals и globals есть...
?DUP выкинуть то можно, а смысл? Это же элемент факторизации.
Код:
: a1 ?DUP IF bla-bla THEN ;
: a2 DUP IF bla-bla ELSE DROP THEN ;

Если его не будет - я его определю и буду использовать.

Автор:  Mihail [ Пн июл 10, 2006 13:19 ]
Заголовок сообщения: 

oleg писал(а):
Лично мне кажется, что новый стандарт должен описывать гораздо меньше слов и по другому принципу их классифицировать. Чуточку больше уделить места словарям и методики работы с ними. Отделить интерпретатор от форт-ВМ. А так же выкинуть вредные слова типа ?DUP POSTPONE TUCK ROLL и прочих.


Одной из базовых идей форт-технологии является то, что потенциал
форт-продукта перекрывает замысел автора.
Генеральной задачей форт-стандарта является обеспечить максимальную
платформонезависимость при неограниченных возможностях для
пользователя (в том числе, возможность создания удобных для себя
синтаксиса и семантики).
Любую манипуляцию со стеком можно выразить через ROLL PICK DROP
Об эффективности следует думать в последнюю очередь,
но я бы заменил ROLL на слово меняющее второй элемент
стека и элемент на глубине заданным первым элементом (язык сломаешь).

POSTPONE , по отношению к старым [COMPILE] COMPILE ,
позволяет незадумываться о наличие признака IMMEDIATE
у слов следующих за ними.

Автор:  Hishnik [ Пн июл 10, 2006 13:59 ]
Заголовок сообщения: 

Mihail писал(а):
Любую манипуляцию со стеком можно выразить через ROLL PICK DROP

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

Страница 1 из 11 Часовой пояс: UTC + 3 часа [ Летнее время ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/