Forth
http://fforum.winglion.ru/

Новый подход к генерации Фортом машинного кода
http://fforum.winglion.ru/viewtopic.php?f=34&t=2407
Страница 3 из 3

Автор:  Mihail [ Пт янв 29, 2010 17:15 ]
Заголовок сообщения: 

be_nt_all писал(а):
Вон Михаил свой оптимизатор таки забросил.

В какой-то мере. Руки не доходят. Я продвину оптимизатор если появится
критический по быстродействию фрагмент кода. Быстродействие моих программ
меня устраивает. Если кому надо, предъявляйте фрагменты кодов.
Если кто самостоятельно захочет добавить правило, пусть задает вопросы.

Что касается предлагаемого метода. Здесь завязана оптимизация на компиляцию.
Что черевато несовместимостью т.к. Форт предоставляет программисту вмешиваться
в процесс компиляции. Оптимизация при этом явно ограничена. Вообще не
вижу преимущества над моим методом.

Автор:  Kopa [ Пт фев 19, 2010 20:22 ]
Заголовок сообщения: 

mOleg писал(а):
be_nt_all писал(а):
код для gcc генерировать ещё проще (хотя у llvm оптимизатор, судя по всему, лучше). Опять же gcc - это самый что ни на есть мейнстрим, а llvm и, тем более, cacao vm - ещё нет.

особой разницы нет, придется с собой таскать еще один компилятор. это огромный минус.

Stacker Forth-подобный язык в LLVM

P.S. Есть и компилятор stkrc для генерации байт кода.

Автор:  Гость [ Пт дек 23, 2011 08:07 ]
Заголовок сообщения:  Re:

Хищник писал(а):
Ну и тогда уж, до кучи. Вот мы сейчас смотрим на LLVM с целью написания back-endа для процессорного ядра QuarkR.

продвижение LLVM back-end существует?
В репозитарии LLVM есть реализация front-enda некоторого стекового языка Stacker.

P.S. В начале декабря вышла 3.0 версия LLVM.

Автор:  KPG [ Пт фев 22, 2019 02:40 ]
Заголовок сообщения:  Re: Новый подход к генерации Фортом машинного кода

Кто хотел LLVM "Форт"? :)

LLForth Experimental Forth implementation in LLVM.

Немного другой подход и инструментарий FirmForth

P.S. Ещё, возможно, интересно FLK is an optimizing native code forth compiler.

Автор:  ath [ Сб фев 23, 2019 04:02 ]
Заголовок сообщения:  Re: Новый подход к генерации Фортом машинного кода

Хочу сказать огромное спасибо этой теме! Прочитав перевод статьи Антона Эртла я всерьёз задумался о том, что именно может сделать автоматически оптимизатор Форта и нашёл неожиданное решение для Каллисто-2, основанное на комбинации шитого и подпрограммного кода. Интересно, был ли у кого-нибудь опыт подобного?

Если кому интересны подробности с набросками кода, вот цитата из моей темы Каллисто-2 в Контакте:
Цитата:
Изначально в Каллисто-2 был предусмотрен шитый код в области двоичных данных. Память программ же отводилась только для примитивов и служебной области — таблицы свёрток, преобразующей байт поля кода в адрес обработчика. Такой подход сильно нагружал область байтовых данных. Сегодня ночью ко мне пришло более совершенное решение, экономящее область данных и повышающее быстродействие Каллисто-2. Если кратко, то предлагается в памяти программ использовать процедурный код, а в памяти данных — старый добрый шитый код, как раньше.

Вот, как это будет устроено. Допустим, у нас есть слово высокого уровня COUNT:
: COUNT ↑ 1+ ↔ C@ ;

В таблице свёрток есть адрес обработчика этого слова, например ZCount. Через эту таблицу COUNT будет вызывать высокоуровневый код из области данных. Поэтому он будет обращаться к реализации Count в подпрограммном коде через преамбулу, КБП9 передаёт управление на NEXT:

ZCount: ПП Count КБП9
Count: ПП Dup 1 + ↔ БП Cat

Адрес Count используется для обращения к Count из подпрограммного кода в памяти программ. Такие же метки Dup и Cat используются для подпрограммной реализации примитивов ↑ и C@ например:

Cat: ПА ↔ КИПА В/О

Обращение к последнему слову C@ происходит через БП. Это обычная оптимизация более длинной и долгой фразы ПП Cat В/О. В теории даже от БП можно избавиться, размещая обработчики друг за другом. Простые обработчики слов 1+ и ↔ помещены прямо в код COUNT, в виде команд на языке МК-161.

Конечно же, для ↑ 1+ ↔ C@ существуют свои трёхшаговые «преамбулы» для вызова из шитого кода. Впрочем, адресный интерпретатор может при вызове обработчика сам делать КПП вместо КБП, самостоятельно делая NEXT после возврата. Над этим ещё подумаю, но в целом картина оптимистичная и существенно повышает быстродействие Каллисто.

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

Автор:  KPG [ Ср окт 06, 2021 17:43 ]
Заголовок сообщения:  Re: Новый подход к генерации Фортом машинного кода

Немного сподвигся погонять код проекта https://github.com/anse1/firmforth
В целом на текущих собранных LibFirm и Cparser с Github реп в рамках LiveCD Linux Puppy (если убрать добавочные биндинги команд в цикле запуска main в FirmForth.c) работает консоль - Форт цикла Interpret и создаются .so файлы а дальше появляются ньюансы по тому что считать работоспособным в рамках используемого окружения в Форт коде в текущих реалиях LibFirm и Cparser для FirmForth :) (вероятно ранее данный проект был, а возможно и сейчас полностью работоспобен и всё дело в моих кривых телодвижениях по его опробации)
т.е. Си (Форт) код рабочий на примитивах системы и есть клавиатурный ввод/вывод с печатью по Форт-точке и вводом слов в словарь и добавлению слов в него. но не так хороший как хотелось бы (есть, и зачастую, вылеты Форт системы с терминального диалога с пользователем и загрузки Форт кода в виде расширения системы)

P.S. Но, думаю, не всё в этом варианте ускорения Форт безнaдёжно, в силу сравнения вычислений 40-го числa Фибоначи в Форт и сравнении сколько на него потратит времени gForth. :) (интересно дальше оценить в других Форт алгоритмах)
Правда собранный FirmForth размером под 3,8Мб немного пугает, но результирующий бинарный код вполне получается компактным - на уровне размера исходной Форт программы. (вроде как собирается с ассемблера в файлы .so например)

Хаб LibFirm на Github не так заполнен примерами проектов: https://github.com/libfirm

Автор:  Total Vacuum [ Ср окт 27, 2021 11:48 ]
Заголовок сообщения:  Re: Новый подход к генерации Фортом машинного кода

В слове "машинный код" несколько ошибок... Правильно писать "мышиный кот"... :D

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