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

...
Google Search
Forth-FAQ Spy Grafic

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




Начать новую тему Ответить на тему  [ Сообщений: 150 ]  На страницу Пред.  1, 2, 3, 4, 5 ... 10  След.
Автор Сообщение
 Заголовок сообщения:
СообщениеДобавлено: Чт июн 28, 2007 23:09 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7960
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
Гм, гм, гм... А уже что-то реальное есть в таком стиле? А то сдается мне, что это еще одна стадия "устроиться поудобнее и потом уже написать все сразу, и навсегда". И есть эффект "официант, попробуйте суп!" :) Это к тому, что умозрительно, не разрабатывая переносимые Форты, ну никак нельзя угадать, что именно там понадобится. Метаассемблер пишется на раз... если уметь писать их вообще. Просто если уметь их писать, то и метаассемблер не очень нужен - в процессе написания становится понятно, что для нормальной последующей адаптации к совсем-совсем новым процессорам его надо сразу обкладывать кучей тестов. И проверка, что новый процессор тоже нормально поддержан, по трудоемкости примерно соответствует правке кодогенератора уже существующего ассемблера. Универсальное (тем более с прицелом на заранее неизвестные архитектуры) всегда делать сложнее, чем набор конкретных продуктов.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пт июн 29, 2007 00:15 
Не в сети

Зарегистрирован: Вт май 09, 2006 12:31
Сообщения: 3438
Благодарил (а): 5 раз.
Поблагодарили: 16 раз.
Хищник писал(а):
Гм, гм, гм... А уже что-то реальное есть в таком стиле? А то сдается мне, что это еще одна стадия "устроиться поудобнее и потом уже написать все сразу, и навсегда".
Я и спрашиваю - не делал ли кто-нибудь?


Хищник писал(а):
И есть эффект "официант, попробуйте суп!" :) Это к тому, что умозрительно, не разрабатывая переносимые Форты, ну никак нельзя угадать, что именно там понадобится.

Это почему? Ведь форт не на всех командах процессора базируется, например loadall в х86 точно не использует (интересно, она ещё есть?)

Хищник писал(а):
Метаассемблер пишется на раз... если уметь писать их вообще. Просто если уметь их писать, то и метаассемблер не очень нужен - в процессе написания становится понятно, что для нормальной последующей адаптации к совсем-совсем новым процессорам его надо сразу обкладывать кучей тестов.
Пишется однажды, адаптируется многократно. Есть разница между тем, чтобы самому решать , куда и что положить и какие регистры использовать и тем, чтбы просто описать существующие регистры, а метаассемблер соотнесёт их с абстрактными (метаассемблерными) именами ... способами адрессации, ...

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

_________________
понимаю некоторую бестолковость некоторых вопросов


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пт июн 29, 2007 00:32 
Не в сети

Зарегистрирован: Вт май 09, 2006 12:31
Сообщения: 3438
Благодарил (а): 5 раз.
Поблагодарили: 16 раз.
Цитата:
Это к тому, что умозрительно, не разрабатывая переносимые Форты, ну никак нельзя угадать, что именно там понадобится.
Реализация стеков, ввода-вывода, адресация памяти...
Что ещё? :D :D

_________________
понимаю некоторую бестолковость некоторых вопросов


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пт июн 29, 2007 00:49 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7960
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
вопрос писал(а):
Я и спрашиваю - не делал ли кто-нибудь?

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

вопрос писал(а):
Это почему? Ведь форт не на всех командах процессора базируется, например loadall в х86 точно не использует (интересно, она ещё есть?)


Действительно, команд надо не так уж много. Однако, если довести размышления до конца, по сути мы меняем шило на мыло. Вот смотрим: мы хотим работать с разными именами регистров в разных процессорах. Но складывать-то числа надо? Делаем так: вместо add eax, ebx заводим понятия "первый математический регистр" и "второй математический регистр". Далее делаем макросы "забрать со стека в первый регистр", "забрать со стека во второй регистр", "сложить в регистрах", "отправить на стек". Прекрасно! Получаем:

Код:
stack->reg1
stack->reg2
add
reg_result->stack
ret


Не правда ли, получилось вполне абстрактно? Достаточно обеспечить эти самые регистры, написать макросы, и все! И такое действительно работает. Только смотрим дальше. Что нам надо для адаптации нового процессора? Просмотреть список макросов, регистров и команд, убедиться, что это все тут есть, посмотреть, нет ли побочных эффектов (например, флаг какой-нибудь устанавливается), и собственно, все написать на ассемблере этого процессора. Дальше попробовать сгенерировать код и протестировать его на предмет
а) проблем самого ассемблера
б) проблем нашей адаптации
И что мы выиграли? Да, формально, команд стало меньше (хотя ненамного). Зато добавился пункт для проверки, к тому же появилась некая прослойка, которая потенциально может быть источником проблем (ну вот, к примеру, нету какой-то команды, мы ее не сделали, а она сидит внутри другой - вот и баг).
вопрос писал(а):
Пишется однажды, адаптируется многократно. Есть разница между тем, чтобы самому решать , куда и что положить и какие регистры использовать и тем, чтбы просто описать существующие регистры, а метаассемблер соотнесёт их с абстрактными (метаассемблерными) именами ... способами адрессации, ...

Да, есть. Если программист сам пишет ассемблерные реализации базовых слов, он может отследить, что, где и как выполняется. Если он делает это автоматически - появляется уже описанная проблема. Чтобы годилось для разных архитектур, надо делать максимально универсально. А значит, сознательно ограничивать набор операций, потому что любой процессор выполнить любой набор команд не может.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пт июн 29, 2007 00:55 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7960
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
вопрос писал(а):
Реализация стеков, ввода-вывода, адресация памяти...
Что ещё?

А что, этого мало? :)))

"Ракета состоит из двигателя, спускаемого аппарата и стабилизаторов. Что еще?" :))


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пт июн 29, 2007 07:39 
Не в сети

Зарегистрирован: Вт авг 08, 2006 13:49
Сообщения: 47
Благодарил (а): 2 раз.
Поблагодарили: 1 раз.
В какой-то степени обсуждение в этом топике перекликается с темой http://www.wasm.ru/forum/viewtopic.php?id=19293. Там, кстати, обсуждение началось со ссылки на этот фортовский форум; такая, понимаешь, получается рекурсия :roll:


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пт июн 29, 2007 08:05 
Не в сети
Moderator
Moderator

Зарегистрирован: Ср май 10, 2006 15:37
Сообщения: 1132
Откуда: Chelyabinsk ( Ural)
Благодарил (а): 0 раз.
Поблагодарили: 9 раз.
вопрос писал(а):
Я и спрашиваю - не делал ли кто-нибудь?


В i-nete попадались некоторые статьи, где делались попытки обозначить
универсальный способ задания формата кода команды для произвольного процессора, на основе вычленения общей структуры.

И тогда появляется возможность, в какой-то степени, сделать общий
способ формирования ассемблера для произвольного CPU.
( например для DSP и контроллеров, что практически очень трудно)

Далее процессор рассматривается как набор поддерживаемых устройств
служащих для ускорения выполнения алгоритма.
Например: есть поддержка плавающей арифметики хорошо, нет то программный
остается программный алгоритм

P.S. Реализация ассемблера для конретного CPU, на основе близкого по архитектуре
довольно просто. Но решение вопроса затронутого в топике интересно.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пт июн 29, 2007 10:29 
Не в сети

Зарегистрирован: Вт май 09, 2006 12:31
Сообщения: 3438
Благодарил (а): 5 раз.
Поблагодарили: 16 раз.
Хищник писал(а):
вопрос писал(а):
Реализация стеков, ввода-вывода, адресация памяти...
Что ещё?

А что, этого мало? :)))
"Ракета состоит из двигателя, спускаемого аппарата и стабилизаторов. Что еще?" :))

Если учесть, что интеловск5ие процессоры имеют сотни команд, делящиеся уже на сколько там групп

_________________
понимаю некоторую бестолковость некоторых вопросов


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пт июн 29, 2007 10:38 
Не в сети

Зарегистрирован: Вт май 09, 2006 12:31
Сообщения: 3438
Благодарил (а): 5 раз.
Поблагодарили: 16 раз.
fplab, форт кажется мне решённой кем-то задачей на минимализм.

_________________
понимаю некоторую бестолковость некоторых вопросов


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пт июн 29, 2007 12:57 
Не в сети

Зарегистрирован: Вт май 09, 2006 12:31
Сообщения: 3438
Благодарил (а): 5 раз.
Поблагодарили: 16 раз.
to Хищник
Я изобрёл определение метаассемблера
метаасемблер для Форта - есть программа, преобразующая абстрактный алгоритм в конкретный, пользуясь описанием конкретных условий

Т.е. часть преобразования выполняется программно - неужели не экономия?

_________________
понимаю некоторую бестолковость некоторых вопросов


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пт июн 29, 2007 13:01 
Не в сети

Зарегистрирован: Ср май 03, 2006 11:27
Сообщения: 1394
Откуда: St.Petersburg
Благодарил (а): 2 раз.
Поблагодарили: 11 раз.
вопрос писал(а):
Зачем тогда делается ВМ?


Единственный смысл ВМ я вижу в ведении уровня защиты.
Как я это делаю в предоставлении форт-системы через TELNET
telnet://d14-435-04.rtc.ru:3333/ в широком доступе.
Загрузочный модуль для ВМ можно рассматривать как компактное представление программы.
Еще ее можно использовать для скрытия исходного кода (но я приверженец открытого кода).

вопрос писал(а):
Цитата:
В общем, при готовом прототипе, в течении часа.
Видимо, это будет несколько примитивный форт, хотя, см. выше о том, что меня восхщает


Это будет ровно тот форт, который использовался в качестве прототипа,
только под другую платформу.

white_TigR писал(а):
Если я правильно понимаю, то кроспроцессорность должен поддерживать язык Си?


Может поддерживать.
http://devbiol.zoo.uwo.ca/~kvt/relf-0.2.zip
http://pfe.sourceforge.net/
http://ficl.sourceforge.net/
итд

Цитата:
Если он это поддерживает, то просто указываем нужный процесор с одними и теми же исходниками для форта.
Если он это НЕ поддерживает, то как мы будем писать на нем кросспроцесорный код?!!!


В http://fforum.winglion.ru/viewtopic.php ... ight=#8885
я говорил о портироании форт-системы представленной в виде
иходников форта. Задача сводится в написание примитивов. Количество которых можно
минимизировать. Можно найти исходные тексты всех слов форта на форте. Если примитивы
писать на форт-ассемблере, то с начала, придется этот форт-ассемблер писать. Можно писать
прямо в кодах. Вот тут и можно воспользоваться неким транслятором генерирующим листинг
(не обязательно Си).(Это может быть даже экзотический язык работающий только для
требуемого нам процессора). Даже если форт-ассемблер уже есть, все равно, следует
посмотреть, какой код генерит существующий транслятор. Даже если у него не очень хороший
оптимизатор.

Я использую код типа:

Код:
int tst(int tos, int * psp)
{
*--psp=10;
tos=*psp++/tos;
tos-=*psp++;
tos*=*psp++;
// tos=-(tos<psp++);
if(tos)
{
*--psp=tos;
  tos=0x87654321;
}
return tos;
}
int main (void)  {
   tst(6,&psp0[66]);


Если нахулиганет оптимизатор, код можно проложить вызовам некой процедуры
использующий tos psp в качестве параметров.

ЗЫ: опличие от метаасемблера вижу только в отсутстри регистров, смысл которых мне
непонятен.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пт июн 29, 2007 14:15 
Не в сети

Зарегистрирован: Вт май 09, 2006 12:31
Сообщения: 3438
Благодарил (а): 5 раз.
Поблагодарили: 16 раз.
Цитата:
опличие от метаасемблера вижу только в отсутстри регистров, смысл которых мне
непонятен.
А трудоёмкость реализации С и меньшая трудоёмкость модификации условий замечается?

_________________
понимаю некоторую бестолковость некоторых вопросов


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пт июн 29, 2007 14:46 
Не в сети

Зарегистрирован: Ср май 03, 2006 11:27
Сообщения: 1394
Откуда: St.Petersburg
Благодарил (а): 2 раз.
Поблагодарили: 11 раз.
вопрос писал(а):
А трудоёмкость реализации С


Причем тут реализация С?

Цитата:
меньшая трудоёмкость модификации условий замечается?


Что за условя?
Как уменьшит трудоёмкость их модификации введение в Форт регистров?


Последний раз редактировалось Mihail Пт июн 29, 2007 17:23, всего редактировалось 2 раз(а).

Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пт июн 29, 2007 15:29 
Не в сети

Зарегистрирован: Ср май 03, 2006 11:27
Сообщения: 1394
Откуда: St.Petersburg
Благодарил (а): 2 раз.
Поблагодарили: 11 раз.
chess писал(а):
Это еще одна ступень на пути замедления и без того медленного кода Форта.


СПФ, на пример, не медленный.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пт июн 29, 2007 17:23 
Не в сети

Зарегистрирован: Вт май 09, 2006 12:31
Сообщения: 3438
Благодарил (а): 5 раз.
Поблагодарили: 16 раз.
to Mihail

Я плохо выразил мысль. Предположим, для некоторого, только сделаннго процессора, ещё нет ( и не быстро появится) С, или кто-то перепрограммировал железку для которой вообще С нет.

А тут имеем программу, которая решает логическую задачку:

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

программка строит не сам форт в целом, но только "раскидывает по командам процессора" примитивы форта, сам форт уже построен (надстроен над примитивами) и никакие регистры не включает.

Я понял, что плохо изложил.

Ну, например
в процессоре есть 2 математических регистра :)
каждый "общается" со стеком непосредственно
в этом случае метаассемблер запрограммирует операцию сравнения двух чисел так, что со стека в разные регистры будут сняты два числа и потом операция сравнения между регистрами. Причём тут регистры могут быть выбраны произвольно.
а вот предположим, что нам нужно положить на стек результат сравнения с содержимым порта, причём данные из порта может получить один регистр их 2-х
тогда метаассемблер должен "предложить" положить данные со стека в регистр, не занятый работой с портом, получить данные из порта, сравнить, положить на стек ... (примитивный пример - тут программа выбирает, в какой регистр класть данные для сравнения, 2 варианта)
Это решение вытекает из "условий"
условиями я тут назвал особенности реализации операций в конкретном процессоре, но их немного и они уже на этапе проектирования метаассемблера могли бы быть учтены

скажем, в приведенном примитивном примере метаассемблер будет ориентироваться на одно условие
особенность получения данных из порта - там вроде
порт_получениеданных AX only
или
порт_адреспорта DX or MEMORY (чёт я не припомню даже интел сейчас )

Сам метаассемблер не может быть совсем простым, т.е. однозначного соответствия между абстрактными регистрами и реальными нет, но и не может быть слишком сложным - тут работает простой "перебор с возвратом", причём ясно, что и возврат не может быть слишком далёким и прогнозировать "тупики" просто.

_________________
понимаю некоторую бестолковость некоторых вопросов


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 150 ]  На страницу Пред.  1, 2, 3, 4, 5 ... 10  След.

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


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 7


Вы не можете начинать темы
Вы можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

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