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 ] |
Заголовок сообщения: | |
Что хотелось бы от нового стандарта:
2 Для этого - оптимизация работы со стеком (реально - что полезного делает dup ? ) 3 Стандартизация связи с другими языками (в частности, неограниченный встроенный ассемблер) [/list] |
Автор: | WingLion [ Вс июл 09, 2006 13:21 ] |
Заголовок сообщения: | |
вопрос писал(а): 1 Возможность делать обычные ехе-шники с оптимизированным кодом, не пользоваться же конечному юзеру интерпретатором ... Вообще говоря, привязывать стандарт языка к ОСи компьютера как-то неправильно. А exe-шники - это чисто осевые заморочки. Forth должен уметь их делать, но для каждой оси - свои. Стандартизировать сие дело (когда не известно, каков будет формат того же exe-шника через 5-10 лет) мне кажется несколько странно. вопрос писал(а): 2 Для этого - оптимизация работы со стеком (реально - что полезного делает dup ? ) 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 вводится именно для ускорения работы. ... А потом удивляемся, что нормальные фортеры на этом форуме не собираются Вообще необходимость употреблять копирование так часто - замедление работы (сколько раз копируется переменная, если нужно сравнить её с несколькими другими?). ... чтобы скопировать переменную, нужно сначала скопировать переменную ... |
Автор: | Гость [ Пн июл 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/ |