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

...
Google Search
Forth-FAQ Spy Grafic

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




Начать новую тему Ответить на тему  [ Сообщений: 23 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: "Слепой" связанный список для описания полей структур
СообщениеДобавлено: Вс окт 01, 2017 17:10 
Не в сети
Administrator
Administrator
Аватара пользователя

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

Имеем такую запись:

: TEST
LOC[ VARIABLE X
]LOC
<код, использующий X>
;

Как это реализовано. Слово LOC[ запоминает вход в текущий словарь на стеке control flow и переключает в режим интерпретации. Дальше вплоть до ]LOC идет стандартная интерпретация с любыми действиями, объявлениями слов и прочим, т.е. VARIABLE - это совершенно обычное VARIABLE. Если объявляются новые слова (в данном случае X), то они достраивают себя после того, что видят, а видят они TEST (после X следующее слово будет указывать, естественно, на X). Порция кода LOC[ ]LOC будет перепрыгнута в TEST вставкой JMP.

Что можно добавить еще. Сейчас все локальные объявления TEST видны только внутри TEST. Вытащить из наружу означает устроить хаос в словаре. Однако возникла идея в развитие вот этих "слепых словарных веток". Конкретно - добавить еще одно поле, аналогичное LFA, для поиска там локальных определений в процессе обычной интерпретации/компиляции.

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

: DATA
LOC[ VARIABLE X VARIABLE Y ]LOC

должно выстроить поиск так: DATA <- X <- Y <- вход
Но уже следующее слово (например, DATA2) будет видеть DATA <- DATA2 <- вход

Разница в том, что найденное слово DATA "прицепляет" свой локальный список к началу цепочки поиска, поэтому сразу после обработки DATA (неважно, в режиме интерпретации или компиляции, его локальные слова окажутся доступны для поиска... но только на один раз. Т.е. DATA X Y не сработает (точнее, попытается найти глобальное слово Y), но DATA X DATA Y будет находить локальные определения X Y.

Пока не реализовано, однако в процессе проработки.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: "Слепой" связанный список для описания полей структур
СообщениеДобавлено: Вс окт 01, 2017 18:29 
Не в сети

Зарегистрирован: Пт июн 06, 2008 14:21
Сообщения: 128
Откуда: Карелия
Благодарил (а): 1 раз.
Поблагодарили: 4 раз.
Все хорошо, но видно нет единства в форт сообществе.. нет коллектива


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: "Слепой" связанный список для описания полей структур
СообщениеДобавлено: Вс окт 01, 2017 18:49 
Не в сети
Administrator
Administrator
Аватара пользователя

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

Ну не знаю, мне есть с кем пообщаться и поработать. И кстати, можно подумать, что в С++ или Java все ходят стройными рядами и имеют по любому вопросу строго выверенное мнение.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: "Слепой" связанный список для описания полей структур
СообщениеДобавлено: Вс окт 01, 2017 20:32 
Не в сети

Зарегистрирован: Чт янв 07, 2016 19:14
Сообщения: 1288
Благодарил (а): 3 раз.
Поблагодарили: 18 раз.
Полёт мысли
Структура слова имеет поле LocLink ( назовём её так )
Все локальные объявления и пр связываются по этому полю.

Следующее слово должно очистить это поле, тупо поставить нолик. ( вопроса зачем очищать не ставим. Надо значит надо )

Вопрос как отделить слово-полусловарь от локальных определений?
Самое простое флаг.
Т.е. слово LOC[ даёт словам после себя флаг blindbranch . ]LOC эту традицию прекращает.
Следующее определение запускает очистку.
blindbranch = IF исключить из поиска
До тех пор пока не найдём слово без этого флага.

_________________
Цель: сделать 64-битную Нову под Винду


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: "Слепой" связанный список для описания полей структур
СообщениеДобавлено: Вс окт 01, 2017 22:02 
Не в сети

Зарегистрирован: Пт июн 06, 2008 14:21
Сообщения: 128
Откуда: Карелия
Благодарил (а): 1 раз.
Поблагодарили: 4 раз.
Hishnik писал(а):
F-MAP писал(а):
Все хорошо, но видно нет единства в форт сообществе.. нет коллектива

Ну не знаю, мне есть с кем пообщаться и поработать. И кстати, можно подумать, что в С++ или Java все ходят стройными рядами и имеют по любому вопросу строго выверенное мнение.

Я имел ввиду, все же ядро языка, которое есть и в C++. а так ведь все под себя делают..


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: "Слепой" связанный список для описания полей структур
СообщениеДобавлено: Вс окт 01, 2017 22:16 
Не в сети
Administrator
Administrator
Аватара пользователя

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

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: "Слепой" связанный список для описания полей структур
СообщениеДобавлено: Чт окт 05, 2017 14:19 
Не в сети

Зарегистрирован: Чт янв 07, 2016 19:14
Сообщения: 1288
Благодарил (а): 3 раз.
Поблагодарили: 18 раз.
Кстати,
А чем обоснована необходимость в словах с словарным поведением?

_________________
Цель: сделать 64-битную Нову под Винду


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: "Слепой" связанный список для описания полей структур
СообщениеДобавлено: Чт окт 05, 2017 14:24 
Не в сети
Administrator
Administrator
Аватара пользователя

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

Код:
: POINT1
  LOC[
    VARIABLE X
    VARIABLE Y
  ]LOC
;

: POINT2
  LOC[
    VARIABLE X
    VARIABLE Y
  ]LOC
;


POINT1 X @
POINT1 Y @

POINT2 X @
POINT2 Y @


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: "Слепой" связанный список для описания полей структур
СообщениеДобавлено: Чт окт 05, 2017 14:50 
Не в сети

Зарегистрирован: Чт янв 07, 2016 19:14
Сообщения: 1288
Благодарил (а): 3 раз.
Поблагодарили: 18 раз.
А-а, структурки, что-то такое я предполагал.
Ну и как это можно реализовать?
Цитата:
POINT1 X @

При таком подходе слово point1 должно явно или неявно использовать парсинг. Как я понял ещё подразумевается использования слова point1 отдельно? Если да, то возможны неприятные ситуации
Легче реализовать таким образом POINT.X @
Изменения в интерпретатор минимальны относительно, конечно.
Пример
Код:
:interpret
begin
parse-name dup while
sfind
if ....
else 2dup s" ." split if 2swap blindbranch? if ( a u lfa ) sfind-in-blind
if >r 2drop r> ....
then
else notfound
then
then
repeat
;
     

_________________
Цель: сделать 64-битную Нову под Винду


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: "Слепой" связанный список для описания полей структур
СообщениеДобавлено: Чт окт 05, 2017 14:55 
Не в сети

Зарегистрирован: Чт янв 07, 2016 19:14
Сообщения: 1288
Благодарил (а): 3 раз.
Поблагодарили: 18 раз.
А если зайти с другого боку?
К примеру из-уже имеющихся в словаре слов создать новый слепой словарь?
Что то вроде
Цитата:
VARIABLE X
VARIABLE Y
VARIABLE Z

BLINDER: TEST X Y Z ;

TEST X


TEST при этом тупо берёт слово из входного потока и ищет его внутри своего списка

_________________
Цель: сделать 64-битную Нову под Винду


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: "Слепой" связанный список для описания полей структур
СообщениеДобавлено: Чт окт 05, 2017 15:14 
Не в сети
Administrator
Administrator
Аватара пользователя

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

Нет, просто оно подключает к поиску свою локальную цепочку слов.

POINT1 <- X <- Y - локальные слова, видимые после интерпретации POINT1
^
|
POINT2 <- X <- Y - локальные слова, видимые после интерпретации POINT2
^
|
основная цепочка словаря


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: "Слепой" связанный список для описания полей структур
СообщениеДобавлено: Чт окт 05, 2017 15:21 
Не в сети
Administrator
Administrator
Аватара пользователя

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

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

В текущей реализации LOC[ ]LOC в Кварке локальный список строится только на этапе компиляции слова, и после завершения построенный "отросток" отключается. Если предусмотреть его временное подключение и в режиме интерпретации, то каждое упоминание в тексте какого-то слова разрешит упоминать после него и любые вложенные в это слово слова. Причем именно слова, во всех вариантах, а не какие-то "локалсы", которые имеют размер cell и ведут себя строго определенно. Что интересно, подобный подход реализует и вложенность.

Код:
: RECT
LOC[
  : Point1
      LOC[
         VARIABLE X
         VARIABLE Y
      ]LOC
  ; 
  : Point2
      LOC[
         VARIABLE X
         VARIABLE Y
      ]LOC
  ;
]LOC

;

...

RECT Point1 X
RECT Point1 Y


Надо только подумать над создающими определениями для слов, подобных RECT. Чтобы можно было писать

: RECT CREATE

RECT RECT1
RECT RECT2

и потом иметь RECT1 Point1 X и т.д.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: "Слепой" связанный список для описания полей структур
СообщениеДобавлено: Чт окт 05, 2017 17:32 
Не в сети

Зарегистрирован: Чт янв 07, 2016 19:14
Сообщения: 1288
Благодарил (а): 3 раз.
Поблагодарили: 18 раз.
Цитата:
то каждое упоминание в тексте какого-то слова разрешит упоминать после него и любые вложенные в это слово слова


А с побочкой как?
Слова явно не клоны noop
Как его поведение учитывать?
Навряд ли захочется писать
: TEST
10 20 +
LOC[ : TT * 4 ; ]LOC
;
LOC: TEST TT

Как форт-система должна распознать, что тут у нас просто слово test а тут это уже словарь и надо подсоединить список к поиску, не выполняя слово?
А вообще можно поменять порядок
X POINT
X - слово опр. в POINT
Не найдя это слово в словаре, из входного потока берётся слово и проверяется на "словарность"

_________________
Цель: сделать 64-битную Нову под Винду


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: "Слепой" связанный список для описания полей структур
СообщениеДобавлено: Чт окт 05, 2017 17:56 
Не в сети
Administrator
Administrator
Аватара пользователя

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

Стоп, немного не понял. "Просто слово" оно всегда. Однако оно за собой тащит свои локальные определения. Сейчас они доступны внутри этого слова, а я хочу сделать так, чтобы были доступны и сразу за словом. Это действительно чревато тем, что будет перекрытие областей видимости, но тут ведь можно и как-то так:

Код:
Point1 -> X


, где слово -> подключит внутренние слова из Point1, но только на один раз. И Point1 это слово само по себе, которое может что-то делать, но может и не делать, а служить только инструментом указания интерпретатору, где искать дальше.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: "Слепой" связанный список для описания полей структур
СообщениеДобавлено: Чт окт 05, 2017 18:24 
Не в сети

Зарегистрирован: Чт янв 07, 2016 19:14
Сообщения: 1288
Благодарил (а): 3 раз.
Поблагодарили: 18 раз.
Цитата:
Point1 -> X

Ладно при компиляции это сработает
-> узнает про список просто проанализировав вызов ранее, но при интерпретации это как должно работать?

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

Тогда в чём проблема?
Скинем всё на флаги
пусть тот же Point1 имеет флаг "дополнить поиск"
При интерпретации/компиляции поиск дополняется
Следующее слово в данном случае Х просто проверяет наличие дополнительного связного списка и, если он есть, отрубает его.
Вместо Х может быть любое другое слово из форта.

Что-то вроде
: Upd-wlist \ flags xt --
OVER &blindBranch =
IF \ тут подсоединяем к поиску лок.цепочку
ELSE
unmount-wlist
THEN

;

Всовываем это чудо в интерпретатор и всё.

_________________
Цель: сделать 64-битную Нову под Винду


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

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


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

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


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

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