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

...
Google Search
Forth-FAQ Spy Grafic

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




Начать новую тему Ответить на тему  [ Сообщений: 94 ]  На страницу Пред.  1, 2, 3, 4, 5, 6, 7  След.
Автор Сообщение
 Заголовок сообщения: Re: Forth на inline asm. Это реально?
СообщениеДобавлено: Сб май 02, 2015 19:17 
<удалено из-за того, что коллега mOleg этого не понял>


Последний раз редактировалось gudleifr Пн июн 08, 2015 21:06, всего редактировалось 1 раз.

Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Forth на inline asm. Это реально?
СообщениеДобавлено: Вс май 03, 2015 20:14 
<удалено из-за того, что коллега mOleg этого не понял>


Последний раз редактировалось gudleifr Пн июн 08, 2015 21:07, всего редактировалось 1 раз.

Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Forth на inline asm. Это реально?
СообщениеДобавлено: Вт май 05, 2015 19:08 
Не в сети
Administrator
Administrator
Аватара пользователя

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

Может быть, есть вариант поменьше? От половины полей по ссылке можно безболезненно избавиться.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Forth на inline asm. Это реально?
СообщениеДобавлено: Вт май 05, 2015 19:49 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 5062
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 23 раз.
Поблагодарили: 63 раз.
Hishnik писал(а):
От половины полей по ссылке можно безболезненно избавиться.

например?

_________________
Мне бы только мой крошечный вклад внести,
За короткую жизнь сплести
Хотя бы ниточку шёлка.
fleur


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Forth на inline asm. Это реально?
СообщениеДобавлено: Вт май 05, 2015 20:24 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7960
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
Цитата:
0. &SMG - признак недоступности слова для find
1. &NON - признак неисполнимости слова
2. &DAS - слово создано с помощью DOES>
3. &VOC - признак того, что слово является словарем
4. &IMM - признак немедленности исполнения слова
5. &ALS - признак слова-заголовка nickname
6. &PRI - слово - примитив
7. &UNUSED - не используется


По пунктам.

SMUDGE - да, упоминается в большинстве источников. Оставляем. Хотя если уж совсем придираться, зависит от реализации. Оно нужно, чтобы можно было внутри определения слова с имеющимся именем пользоваться старой версией того же слова. Например, для добавления функциональности. Но оставляем.
NON - это что и зачем?
DAS - понятно, что это. Работать же без него не перестанет?
VOC - да.
IMM - однозначно да.
ALS - а если их вообще нет?
PRI - аналогично DOES. Без этого атрибута работоспособность не пропадает.

С полями словарей аналогично. Если можно обойтись, то это уже развитие и улучшение, а значит, расширенная реализация. У другого автора на эту тему могут быть собственные соображения.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Forth на inline asm. Это реально?
СообщениеДобавлено: Вт май 05, 2015 20:29 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 5062
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 23 раз.
Поблагодарили: 63 раз.
Hishnik писал(а):
По пунктам.

вы избавили поле флагов от 3-4 занимаемых бит :D (Колоссальный выигрыш, тем более, что всеравно теряется байт)

Hishnik писал(а):
С полями словарей аналогично

тут нужно не аналогично, а предметно.

_________________
Мне бы только мой крошечный вклад внести,
За короткую жизнь сплести
Хотя бы ниточку шёлка.
fleur


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Forth на inline asm. Это реально?
СообщениеДобавлено: Вт май 05, 2015 20:51 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7960
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
mOleg писал(а):
вы избавили поле флагов от 3-4 занимаемых бит :D

А что, тут речь идет об экономии битов? :)) А почему бы тогда не добавить поля ARM-COMPATIBLE и WEB-READY? А программист пусть думает, как это обеспечивать. Даже простые и понятные флаги - это не только лишняя работа по их заполнению, это еще и проверка того, что везде в последующем коде работа с ними идет правильно. Допустим, я по каким-то причинам добавил слово, которое делает в принципе то же, что DOES>, но как-то иначе. Оно должно устанавливать флаг DAS? А почему (здесь независимо от ответа на первый вопрос)? А что будет, если оно сделает наоборот?

mOleg писал(а):
тут нужно не аналогично, а предметно.


Цитата:
to_link - поле связи, состоящее из следующих адресных полей:
off_link - ссылка на предыдущее определенное в данном словаре слово,


То есть само определение словаря - не первое в словаре? Это как - сначала слова поместили куда-то, а потом заявили, что есть словарь? Или уже динамически перетряхнули порядок слов?

Цитата:
off_vocid - ссылка на родительский словарь,
off_thread - ссылка на предыдущее на треде слово (хешированный поиск),


Уже появилось хэширование. Можно обойтись? Да, масса реализаций обходится. Вывод: опционально и необязательно, можно говорить как о расширении.

Цитата:
off_code - ссылка на поле кода (то есть на off_cfa),
to_flag - поле флагов:
off_flags - битовых: &SMG &NON &DAS &VOC &IMM &ALS &PRI ,
off_eow - размер определения (всего два байта),


Размер определения - зачем? Что будет, если реальный размер не совпадает с установленным здесь? Как должно заполняться это поле и каков контроль за адекватностью помещенных сюда данных?

Цитата:
to_name - поле имени,
off_report - количество ссылок на определение (опциональное поле),


Хорошо, что опциональное. То есть место под него все равно отведено, но вполне возможно, что там будет просто 0 или мусор, потому что никто не заполнит. И чтобы ненароком не удалить определение, на которое все равно нет ссылок (согласно этому полю), нужно будет задуматься, заполнено ли оно, а то вдруг там 0, просто потому что никто не считал.

Цитата:
off_name - строка со счетчиком, хранящее идентификатор слова, причем, идентификатором может быть набор данных произвольной длины.


Счетчик фиксированной длины, а идентификатор - произвольной? :) Или 2^32 в конкретных условиях может выступать аналогом "очень-очень много, все равно столько не будет"? А если счетчик однобайтовый, то все-таки устанавливаем предел в 255 символов? Или это все же надо определить в спецификации?

Цитата:
off_cfa - поле кода (сюда указывает ссылка из lfa),


То есть lfa не образуют цепной список, а указывают на свои cfa?

Цитата:
Описанный формат словарной статьи на самом деле не важен, он может меняться от словаря к словарю.


Вот с этого следовало начать :) Таким образом, мы возвращаемся к вопросу необходимого минимума, без которого невозможно запуститься. А дальше уже идут расширения, улучшения и дополнения, которые Форт не запрещает.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Forth на inline asm. Это реально?
СообщениеДобавлено: Вт май 05, 2015 21:25 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 5062
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 23 раз.
Поблагодарили: 63 раз.
Hishnik писал(а):
mOleg писал(а):вы избавили поле флагов от 3-4 занимаемых бит :DА что, тут речь идет об экономии битов? :)) А почему бы тогда не добавить поля ARM-COMPATIBLE и WEB-READY? А программист пусть думает, как это обеспечивать. Даже простые и понятные флаги - это не только лишняя работа по их заполнению, это еще и проверка того, что везде в последующем коде работа с ними идет правильно. Допустим, я по каким-то причинам добавил слово, которое делает в принципе то же, что DOES>, но как-то иначе. Оно должно устанавливать флаг DAS? А почему (здесь независимо от ответа на первый вопрос)? А что будет, если оно сделает наоборот?

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

Hishnik писал(а):
То есть само определение словаря - не первое в словаре?

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

Hishnik писал(а):
Это как - сначала слова поместили куда-то, а потом заявили, что есть словарь?

нет, в форке сначала резервируется место в хранилище, которое связано с именем словаря, а лишь потом что-то туда добавляем. Правда, это не касается временно компилируемых определений вида
10 0 DO I , LOOP и т.п. которые после выполнения забываются(но и там сохраняется правило - сначала резервируем, потом сохраням)

Hishnik писал(а):
Размер определения - зачем? Что будет, если реальный размер не совпадает с установленным здесь? Как должно заполняться это поле и каков контроль за адекватностью помещенных сюда данных?

возможны проблемы, если потребуется переносить содержимое словарной статьи в другую область памяти. Если такая необходимость отсутствует, его можно не заполнять.
размер вычисляется автоматически с помощью ;CREATE которое завершает любое определение.
Контроля адекватности любых данных в форте отсутствует.

Hishnik писал(а):
Хорошо, что опциональное. То есть место под него все равно отведено

нет, оно зависит от опции в параметрах сборки, т.е. в содержимом options.f

Hishnik писал(а):
Уже появилось хэширование. Можно обойтись?

изначально было.
Обойтись можно. Вообще, устройство словаря в форке - это интимное дело самого словаря, важно соблюсти интерфейс 8)

Hishnik писал(а):
Счетчик фиксированной длины, а идентификатор - произвольной? :)

Именно.
собственно, опять это дело конкретного словаря ( в одном может быть так, в ином этак).

Hishnik писал(а):
То есть lfa не образуют цепной список, а указывают на свои cfa?

то есть код может храниться раздельно. А lfa - это основное поле, зная которое можно определить и имя слова, и предыдущее слово на треде, и предыдущее словов в родном словаре, и имя слова и любые атрибуты.

Hishnik писал(а):
Вот с этого следовало начать :) Таким образом, мы возвращаемся к вопросу необходимого минимума

Начал, с чего считал необходимым 8)
А необходимый минимум в каждом случае свой. У меня не стояло цели сделать "жирное ядро", наоборот, старался все, без чего можно обойтись выкидывать в библиотеки.

_________________
Мне бы только мой крошечный вклад внести,
За короткую жизнь сплести
Хотя бы ниточку шёлка.
fleur


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Forth на inline asm. Это реально?
СообщениеДобавлено: Вт май 05, 2015 21:37 
Не в сети
Administrator
Administrator
Аватара пользователя

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

Чем же она удобна на старте? Это вариант, когда уже идет некая поисковая работа, и с базовыми тремя полями и тремя флагами работать... скучно.
mOleg писал(а):
собственно, словарь обычно определен внутри другого словаря, причем в форке они могут находится в различных адресных пространствах.

Я читаю вот это:
off_link - ссылка на предыдущее определенное в данном словаре слово,
Что означает "в данном словаре"? Данный словарь определен в родительском, там он, понятное дело, не первый. Но если уж говорить "в данном словаре", то в первую очередь в голову приходит какой-нибудь MY-VOC. Вот мы написали VOCABULAY MY-VOC... и у него что, сразу есть поле "ссылка на предыдущее определенное в данном словаре слово"? Или это предыдущее слово в том словаре, где определен MY-VOC?
mOleg писал(а):
А необходимый минимум в каждом случае свой.

Речь ведь зашла о необходимом минимуме для реализации конкретного проекта mgw, разве нет? Насколько сейчас будет полезно рассказывать о возможных вариантах, которые, тем не менее, обязательными не являются?

На мой вкус, простейший вариант выглядит так:

LFA - указатель на предыдущий LFA, 4 байта
NFA - имя определения, строка со счетчиком или ASCIIZ
FFA - флаги (1 байт)
smudge - установлен, пока идет определение слова, если установлен, FIND это слово пока не находит. Можно и не делать.
immediate - обязательно, для структур управления
vocabulary - без словарей формально можно обойтись, но не так интересно
Дальше идет код, завершающийся машинной командой RET. Адрес, с которого он начинается, можно пометить как CFA, но это вопрос вкуса. Выйти сюда можно, зная, что FFA - один байт, а размер имени определяется либо по счетчику, либо по завершающему нулю.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Forth на inline asm. Это реально?
СообщениеДобавлено: Вт май 05, 2015 22:34 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 5062
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 23 раз.
Поблагодарили: 63 раз.
Hishnik писал(а):
Чем же она удобна на старте?

А причем тут "на старте"?
Я ведь всего лишь дал ссылку на описание, как сделано и почему в конкретной системе.

Hishnik писал(а):
Я читаю вот это:off_link - ссылка на предыдущее определенное в данном словаре слово, Что означает "в данном словаре"?

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

Hishnik писал(а):
Речь ведь зашла о необходимом минимуме для реализации конкретного проекта mgw, разве нет?

нет.

_________________
Мне бы только мой крошечный вклад внести,
За короткую жизнь сплести
Хотя бы ниточку шёлка.
fleur


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Forth на inline asm. Это реально?
СообщениеДобавлено: Вт май 05, 2015 22:58 
Не в сети
Administrator
Administrator
Аватара пользователя

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

Ах, так это просто любая словарная статья? А меня сильно сбило с толку наличие ссылки на родительский словарь. Это сразу наводит на мысль о VOCABULARY. И получается, что каждое слово имеет ссылку... зачем? Выглядит перетяжеленным, если не сопровождать это конкретными методиками использования.

mOleg писал(а):
Hishnik писал(а):
Речь ведь зашла о необходимом минимуме для реализации конкретного проекта mgw, разве нет?

нет.


Ну не знаю. Я бы сконцентрировался на получении работоспособной реализации, по всему основному спектру применений.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Forth на inline asm. Это реально?
СообщениеДобавлено: Ср май 13, 2015 12:10 
<удалено из-за того, что коллега mOleg этого не понял>


Последний раз редактировалось gudleifr Пн июн 08, 2015 21:07, всего редактировалось 1 раз.

Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Forth на inline asm. Это реально?
СообщениеДобавлено: Ср май 13, 2015 23:43 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7960
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
gudleifr писал(а):
Вам "по-нормальному" или "по-форумному"?
По нормальному (см. Баранов-Ноздрунов): слово имеющее "несколько CFA" (на само деле, конечно, один, остальные - обычные параметры, доступ к которым, осуществляется при помощи слов-префиксов, как в "13 TO ПЕРЕМЕННАЯ").
По форумному - слово-указатель на другое слово, т.е. с "изменяемым значением CFA".


Цитируем Баранова и Ноздрунова:

Цитата:
По аналогии со словом QUAN определим слово VECT (от VECTOR — вектор), которое также создает словарную статью с векторным полем кода из трех элементов:
: VECT ( -> ) 0 CONSTANT
LATEST NAME> DUP @ , ( КОД 2CFA)
ПРИСВ DUP @ ( 1CFA) SWAP >BODY ! ['] ABORT ,
DOES> ( КОД ДЛЯ 0CFA) 4 + @ EXECUTE ;

Код для поля 2CFA указывает на исполняющую часть из определяющего слова CONSTANT, поле 1CFA такое же, как и для слова QUAN, оно выполняет присваивание нового значения. Наконец, поле 0CFA, которое задается исполняющей частью определения VECT, исполняет слово, адрес поля кода которого является текущим значением поля 0PFA. Для получения текущего значения и засылки нового по-прежнему используются определенные ранее слова AT и TO. Вот пример на использование этих слов: VECT V ' DUP TO V. Теперь исполнение слова V равносильно исполнению DUP. Таким образом, слова, определенные через VECT, можно рассматривать как переменные, значениями которых являются другие слова.


Где противоречие-то?


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Forth на inline asm. Это реально?
СообщениеДобавлено: Ср май 13, 2015 23:59 
<удалено из-за того, что коллега mOleg этого не понял>


Последний раз редактировалось gudleifr Пн июн 08, 2015 21:07, всего редактировалось 1 раз.

Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Forth на inline asm. Это реально?
СообщениеДобавлено: Чт май 14, 2015 00:11 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7960
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
gudleifr писал(а):
В том, что указателем является третье поле векторного слова, а не все слово. Слово QUAN (VALUE) там тоже называется векторным, хотя указателей не содержит.

У меня VECT реализован вообще без этих трех полей. Слово, определенное через VECT, содержит код:

mov eax, NNNN
jmp eax

Это не мешает пользоваться именем, которое ассоциируется с определенным поведением слова. Ксерокс и унитаз тоже не были именами нарицательными, их применение в таком качестве сложилось исторически.


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

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


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

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


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

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