Forth http://fforum.winglion.ru/ |
|
"Слепой" связанный список для описания полей структур http://fforum.winglion.ru/viewtopic.php?f=23&t=3144 |
Страница 1 из 2 |
Автор: | Hishnik [ Вс окт 01, 2017 17:10 ] |
Заголовок сообщения: | "Слепой" связанный список для описания полей структур |
Идея с локальными объявлениями неожиданно получила продолжение. Сначала - что такое локальные объявления в Кварке. Имеем такую запись: : 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. Пока не реализовано, однако в процессе проработки. |
Автор: | F-MAP [ Вс окт 01, 2017 18:29 ] |
Заголовок сообщения: | Re: "Слепой" связанный список для описания полей структур |
Все хорошо, но видно нет единства в форт сообществе.. нет коллектива |
Автор: | Hishnik [ Вс окт 01, 2017 18:49 ] |
Заголовок сообщения: | Re: "Слепой" связанный список для описания полей структур |
F-MAP писал(а): Все хорошо, но видно нет единства в форт сообществе.. нет коллектива Ну не знаю, мне есть с кем пообщаться и поработать. И кстати, можно подумать, что в С++ или Java все ходят стройными рядами и имеют по любому вопросу строго выверенное мнение. |
Автор: | Victor__v [ Вс окт 01, 2017 20:32 ] |
Заголовок сообщения: | Re: "Слепой" связанный список для описания полей структур |
Полёт мысли Структура слова имеет поле LocLink ( назовём её так ) Все локальные объявления и пр связываются по этому полю. Следующее слово должно очистить это поле, тупо поставить нолик. ( вопроса зачем очищать не ставим. Надо значит надо ) Вопрос как отделить слово-полусловарь от локальных определений? Самое простое флаг. Т.е. слово LOC[ даёт словам после себя флаг blindbranch . ]LOC эту традицию прекращает. Следующее определение запускает очистку. blindbranch = IF исключить из поиска До тех пор пока не найдём слово без этого флага. |
Автор: | F-MAP [ Вс окт 01, 2017 22:02 ] |
Заголовок сообщения: | Re: "Слепой" связанный список для описания полей структур |
Hishnik писал(а): F-MAP писал(а): Все хорошо, но видно нет единства в форт сообществе.. нет коллектива Ну не знаю, мне есть с кем пообщаться и поработать. И кстати, можно подумать, что в С++ или Java все ходят стройными рядами и имеют по любому вопросу строго выверенное мнение. Я имел ввиду, все же ядро языка, которое есть и в C++. а так ведь все под себя делают.. |
Автор: | Hishnik [ Вс окт 01, 2017 22:16 ] |
Заголовок сообщения: | Re: "Слепой" связанный список для описания полей структур |
F-MAP писал(а): Я имел ввиду, все же ядро языка, которое есть и в C++. а так ведь все под себя делают.. Речь ведь и идет о том, чтобы найти варианты улучшения ядра языка, небольшие по трудоемкости, но дающие ощутимый и полезный эффект. |
Автор: | Victor__v [ Чт окт 05, 2017 14:19 ] |
Заголовок сообщения: | Re: "Слепой" связанный список для описания полей структур |
Кстати, А чем обоснована необходимость в словах с словарным поведением? |
Автор: | Hishnik [ Чт окт 05, 2017 14:24 ] |
Заголовок сообщения: | Re: "Слепой" связанный список для описания полей структур |
Хочется писать так: Код: : POINT1
LOC[ VARIABLE X VARIABLE Y ]LOC ; : POINT2 LOC[ VARIABLE X VARIABLE Y ]LOC ; POINT1 X @ POINT1 Y @ POINT2 X @ POINT2 Y @ |
Автор: | Victor__v [ Чт окт 05, 2017 14:50 ] |
Заголовок сообщения: | Re: "Слепой" связанный список для описания полей структур |
А-а, структурки, что-то такое я предполагал. Ну и как это можно реализовать? Цитата: 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 ; |
Автор: | Victor__v [ Чт окт 05, 2017 14:55 ] |
Заголовок сообщения: | Re: "Слепой" связанный список для описания полей структур |
А если зайти с другого боку? К примеру из-уже имеющихся в словаре слов создать новый слепой словарь? Что то вроде Цитата: VARIABLE X VARIABLE Y VARIABLE Z BLINDER: TEST X Y Z ; TEST X TEST при этом тупо берёт слово из входного потока и ищет его внутри своего списка |
Автор: | Hishnik [ Чт окт 05, 2017 15:14 ] |
Заголовок сообщения: | Re: "Слепой" связанный список для описания полей структур |
Victor__v писал(а): При таком подходе слово point1 должно явно или неявно использовать парсинг. Нет, просто оно подключает к поиску свою локальную цепочку слов. POINT1 <- X <- Y - локальные слова, видимые после интерпретации POINT1 ^ | POINT2 <- X <- Y - локальные слова, видимые после интерпретации POINT2 ^ | основная цепочка словаря |
Автор: | Hishnik [ Чт окт 05, 2017 15:21 ] |
Заголовок сообщения: | Re: "Слепой" связанный список для описания полей структур |
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 и т.д. |
Автор: | Victor__v [ Чт окт 05, 2017 17:32 ] |
Заголовок сообщения: | Re: "Слепой" связанный список для описания полей структур |
Цитата: то каждое упоминание в тексте какого-то слова разрешит упоминать после него и любые вложенные в это слово слова А с побочкой как? Слова явно не клоны noop Как его поведение учитывать? Навряд ли захочется писать : TEST 10 20 + LOC[ : TT * 4 ; ]LOC ; LOC: TEST TT Как форт-система должна распознать, что тут у нас просто слово test а тут это уже словарь и надо подсоединить список к поиску, не выполняя слово? А вообще можно поменять порядок X POINT X - слово опр. в POINT Не найдя это слово в словаре, из входного потока берётся слово и проверяется на "словарность" |
Автор: | Hishnik [ Чт окт 05, 2017 17:56 ] |
Заголовок сообщения: | Re: "Слепой" связанный список для описания полей структур |
Victor__v писал(а): Как форт-система должна распознать, что тут у нас просто слово test а тут это уже словарь и надо подсоединить список к поиску, не выполняя слово? Стоп, немного не понял. "Просто слово" оно всегда. Однако оно за собой тащит свои локальные определения. Сейчас они доступны внутри этого слова, а я хочу сделать так, чтобы были доступны и сразу за словом. Это действительно чревато тем, что будет перекрытие областей видимости, но тут ведь можно и как-то так: Код: Point1 -> X , где слово -> подключит внутренние слова из Point1, но только на один раз. И Point1 это слово само по себе, которое может что-то делать, но может и не делать, а служить только инструментом указания интерпретатору, где искать дальше. |
Автор: | Victor__v [ Чт окт 05, 2017 18:24 ] |
Заголовок сообщения: | Re: "Слепой" связанный список для описания полей структур |
Цитата: Point1 -> X Ладно при компиляции это сработает -> узнает про список просто проанализировав вызов ранее, но при интерпретации это как должно работать? Ладно я буду исходить из следующего Слово всегда при упоминании включает в поиск свой список и делает заложенные в него действия. Тогда в чём проблема? Скинем всё на флаги пусть тот же Point1 имеет флаг "дополнить поиск" При интерпретации/компиляции поиск дополняется Следующее слово в данном случае Х просто проверяет наличие дополнительного связного списка и, если он есть, отрубает его. Вместо Х может быть любое другое слово из форта. Что-то вроде : Upd-wlist \ flags xt -- OVER &blindBranch = IF \ тут подсоединяем к поиску лок.цепочку ELSE unmount-wlist THEN ; Всовываем это чудо в интерпретатор и всё. |
Страница 1 из 2 | Часовой пояс: UTC + 3 часа [ Летнее время ] |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |