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

...
Google Search
Forth-FAQ Spy Grafic

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




Ответить
Имя пользователя:
Заголовок:
Текст сообщения:
Введите текст вашего сообщения. Длина сообщения в символах не более: 60000

Размер шрифта:
Цвет шрифта
Настройки:
BBCode ВКЛЮЧЕН
[img] ВЫКЛЮЧЕН
[flash] ВЫКЛЮЧЕН
[url] ВКЛЮЧЕН
Смайлики ВЫКЛЮЧЕНЫ
Отключить в этом сообщении BBCode
Не преобразовывать адреса URL в ссылки
Вопрос
Теперь гостю придется вводить здесь пароль. Не от своей учетной записи, а ПАРОЛЬ ДЛЯ ГОСТЯ, получить который можно после регистрации на форуме через ЛС.:
Этот вопрос предназначен для выявления и предотвращения автоматических регистраций.
   

Обзор темы - структура словарей и поле флагов
Автор Сообщение
  Заголовок сообщения:  Re: структура словарей и поле флагов  Ответить с цитатой
Код:
Каково устройство слова CONTEXT

В моём варианте это VALUE-переменная
Цитата:
как двигаться в обратном направлении? То-есть слово PREVIOUS

Как?
Код:
: PREVIOUS CONTEXT 0! [ CELL NEGATE LIT, ] +TO CONTEXT ;


Цитата:
Каков размер этого стека

В СПФ восемь ячеек, пусть будет также, хотя обычно требуется меньше.

Цитата:
как предполагается отрабатывать выход за пределы этого стека? Лишний PREVIOUS и система рухнет

вариант 1) Никак.
вариант 2) Поскольку по-любому потребуется слово дно-стека-контекста, то можно ввести проверку, на исчерпаемость.
Вопрос в другом, насколько эта проверка вообще нужна?

Цитата:
стека списков

Копался в СПФ когда-то по этому поводу, переход на след. словарь там что-то вроде @ cell+ ,

Цитата:
В чем отличие стека от списка? А стека контекста от списка контекста?

В организации работы с памятью.
След. элемент стека это либо ячейка+ либо ячейка-
След. элемент списка можно взять по-разному.
К примеру cell+ @ или @ cell- или ещё как-то.
Список предполагает расширяемость, стек нет.

Короче, стеком сделать проще. Расширить тоже можно при необходимости.
Сообщение Добавлено: Пн апр 10, 2017 09:36
  Заголовок сообщения:  Re: структура словарей и поле флагов  Ответить с цитатой
Victor__v писал(а):
Если бы тут был не список, а стек можно было бы сделать иначе.
К примеру,
Код:
: ALSO CONTEXT @ CELL +TO CONTEXT CONTEXT ! ;

Что есть +TO? Предполагаю, что это такая префиксная запись +! Но смысл всего построения от меня утекает. CONTEXT @ дает нам контекстный список, CELL - по-идее размер ячейки, +TO CONTEXT как надо понимать? Может быть должно быть CONTEXT CELL +? Не, кажется догадываюсь.
CONTEXT у вас кладет адрес вершины какбы стека, CELL +TO CONTEXT призван этот адрес увеличить на размер ячейки. Идея понятна. Два вопроса, как двигаться в обратном направлении? То-есть слово PREVIOUS. Каков размер этого стека и как предполагается отрабатывать выход за пределы этого стека? Лишний PREVIOUS и система рухнет. Каково устройство слова CONTEXT в Вашем варианте?

Цитата:
Списки как раз причём. из-за них такая реализация ALSO вышла
Стек контекста здесь выглядит уместней , чем список контекста.

Против списков лично ничего не имею. Вещь полезная.

В SPF как раз стек контекстов. Зарезервирован массив, в который словом ALSO пушится очередной список. Вернее, выполняется DUP на вершине стека списков. Слово, определенное через VOCABULARY, подменяет собой вершину стека списков.

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

И опять, по-моему, недоразумения с терминологией. В чем отличие стека от списка? А стека контекста от списка контекста?
Сообщение Добавлено: Вс апр 09, 2017 23:50
  Заголовок сообщения:  Re: структура словарей и поле флагов  Ответить с цитатой
Если бы тут был не список, а стек можно было бы сделать иначе.
К примеру,
Код:
: ALSO CONTEXT @ CELL +TO CONTEXT CONTEXT ! ;


Цитата:
Списки тут не причем. Кому-то очень нравится дергать стек. А списки - очень ценная вещь

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

Против списков лично ничего не имею. Вещь полезная.
Сообщение Добавлено: Вс апр 09, 2017 21:33
  Заголовок сообщения:  Re: структура словарей и поле флагов  Ответить с цитатой
Victor__v писал(а):
Это все знают, вопрос в том как.
Примерный код слова also
: ALSO GET-ORDER OVER SWAP 1+ SET-ORDER ;

Круто, что сказать. А во всём виноваты списки :twisted: всё же время говорят, СТЕК КОНТЕКСТА

Да не так и сложно. Коряво немного, да. Уж как спроектировано.
Код:
: ALSO   
            GET-ORDER ( wid1 ... widn n )
               1+ >R DUP R>
            ( wid1 .. widn widn n+1 ) SET-ORDER ;

Так, наверное, понятнее.
Списки тут не причем. Кому-то очень нравится дергать стек. А списки - очень ценная вещь.
Сообщение Добавлено: Вс апр 09, 2017 21:18
  Заголовок сообщения:  Re: структура словарей и поле флагов  Ответить с цитатой
Цитата:
я знаю что ALSO делает

Это все знают, вопрос в том как.
Примерный код слова also
: ALSO GET-ORDER OVER SWAP 1+ SET-ORDER ;

Круто, что сказать. А во всём виноваты списки :twisted: всё же время говорят, СТЕК КОНТЕКСТА

Цитата:
По-моему, чем реверсить чужую форт-систему, проще написать свою.

Считайте, я учусь на чужих ошибках :_)
Сообщение Добавлено: Вс апр 09, 2017 21:07
  Заголовок сообщения:  Re: структура словарей и поле флагов  Ответить с цитатой
vpn289 писал(а):
По-моему, чем реверсить чужую форт-систему, проще написать свою.

Вооооот! :wink:
Сообщение Добавлено: Вс апр 09, 2017 20:26
  Заголовок сообщения:  Re: структура словарей и поле флагов  Ответить с цитатой
Victor__v писал(а):
Советую посмотреть дизассемблером слово ALSO для разогрева.
А так, хорошая система. Как и все остальные со своими закидонами.

Мммм.. Зачем дизассемблером? Во-первых, я знаю что ALSO делает. Во-вторых, в SPF есть какой-то оптимизирующий компилятор, так что дизассемблировать явно очень тяжко.
По-моему, чем реверсить чужую форт-систему, проще написать свою. :)
Сообщение Добавлено: Вс апр 09, 2017 19:42
  Заголовок сообщения:  Re: структура словарей и поле флагов  Ответить с цитатой
Цитата:
В каком-то смысле это можно назвать префиксами. Только эти префиксы действуют не на одно следующее слово, а до следующего префикса.

А-а, что-то вроде [ IMMEDIATE-VOCS ] КОД1 КОД2 [ FORTH-VOCS ]

Цитата:
А заглянуть в исходный текст или справочник разве нельзя?

Можно, но мы же не знаем что мы наворотили пару лет назад :) Что из какого контекста было содрано.
А так это гибкий механизм упрощающий отладку и не только.

Цитата:
Тот же SPF намного легче изучать, заглядывая в исходные тексты.

Ага. Особенно когда простые вещи выражаются через сложные, по исходникам это сразу не просечёшь. Но дизассемблер наше всё 8)
Советую посмотреть дизассемблером слово ALSO для разогрева.
А так, хорошая система. Как и все остальные со своими закидонами.
Сообщение Добавлено: Вс апр 09, 2017 14:43
  Заголовок сообщения:  Re: структура словарей и поле флагов  Ответить с цитатой
Victor__v писал(а):
Так-то оно так, а как же поиск по контекстам? Ему же надо перебрать некоторое кол-во контекстов, дабы найти слово с нужным признаком. У вас какая-то эвристика что ли? Дабы облегчить нахождение?

Цитата:
Просто он ищет в заданном контексте.

А это уже интересненько. Это как?
Взял интерпретатор слово из входного потока, запускает sfind . Где здесь надо подставить "заданный контекст"?
Первое что на ум приходит - префиксы. А что второе?

Намного проще. Слово sfind берет контекст из переменной CONTEXT. Обычно в системе присутствует слово аналогичное (SFIND), которое словарь для поиска ака контекст берет со стека. ( В SPF это SEARCH-WORDLIST).
В каком-то смысле это можно назвать префиксами. Только эти префиксы действуют не на одно следующее слово, а до следующего префикса.


Цитата:
1)
а. вспомнить, что есть что по прошествии энного времени
б. сделать энное действие над выборкой из списка

А заглянуть в исходный текст или справочник разве нельзя?
Цитата:
2) Есть список слов, есть слово которое может пройтись по элементам списка, к примеру WORDS.
WORDS можно выразить как ['] TYPE WORD-NAME-in-context , примерно всё от реализации зависит.
....

Понял в чем у нас основное расхождение. Вы видите систему откомпилированной, я же в виде исходников.
Тот же SPF намного легче изучать, заглядывая в исходные тексты.

Цитата:
Это не всегда возможно. Не то что на русском, на английском непонятно как сформировать.
К примеру, как назвать слово берущее со стека число, систему исчисления, и адрес слова, и выдающее число в виде строки, с которой будут произведены некие манипуляции, зависящие от адреса слова.
т.е n base xt // xt: addr u -- ??
Вот как его назвать?
Я пока называю NUM>??
как назвать получше без потери смысла и записи имени в виде предложения?
Вариант num>str>непонятная_ересь не предлагать

Здесь мне сложно сказать что-то конкретное. Возможно, это слово нужно разбить на два-три, возможно нельзя. Но опять я вижу ответ на вопрос КАК, а не ЧТО? Вы мне описываете как оно работает и то не полностью. Собственно num>str было бы нормальным именем, если бы не непоятная ересь с некими манипуляциями. Может их как раз вынести в отдельное слово? И писать в два слова num>str> manipulations ?
Все равно ведь эти манипуляции определены отдельно.
Сообщение Добавлено: Вс апр 09, 2017 14:14
  Заголовок сообщения:  Re: структура словарей и поле флагов  Ответить с цитатой
Код:
Для слов, определённых через двоеточие - это ссылка на адресный интерпретатор, для слов, созданных определяющими словами - на точку DOES> определяющего слова

Ну если так, то возможно, когда писал, представлял себе натив без адресного интерпретатора :)

Цитата:
Чем короче список, тем раньше закончится поиск по нему. Специализированный список явно будет короче общего списка. И время компиляции уменьшится.

Так-то оно так, а как же поиск по контекстам? Ему же надо перебрать некоторое кол-во контекстов, дабы найти слово с нужным признаком. У вас какая-то эвристика что ли? Дабы облегчить нахождение?

Цитата:
Просто он ищет в заданном контексте.

А это уже интересненько. Это как?
Взял интерпретатор слово из входного потока, запускает sfind . Где здесь надо подставить "заданный контекст"?
Первое что на ум приходит - префиксы. А что второе?

Цитата:
А что дает механизм проверки? Как он действует? Как им пользоваться? Он потребует разработки специальной среды разработки?

1)
а. вспомнить, что есть что по прошествии энного времени
б. сделать энное действие над выборкой из списка

2) Есть список слов, есть слово которое может пройтись по элементам списка, к примеру WORDS.
WORDS можно выразить как ['] TYPE WORD-NAME-in-context , примерно всё от реализации зависит.
Дам стек.диаграмму.
WORD-LIST-XT ( xt voc \\ xt: LFA -- ?? )

слово для проверки на флаг immediate
: IMMEDIATE-FLAG >R R@ LFA>FFA @ 0x2 MOD IF R@ LFA>NAME TYPE CR THEN RDROP ;

Итого:
' IMMEDIATE-FLAG ' FORTH WORD-LIST-XT

3) см пункт 2)
4) нет

Цитата:
сразу будет понятно ЧТО оно делает

Это не всегда возможно. Не то что на русском, на английском непонятно как сформировать.
К примеру, как назвать слово берущее со стека число, систему исчисления, и адрес слова, и выдающее число в виде строки, с которой будут произведены некие манипуляции, зависящие от адреса слова.
т.е n base xt // xt: addr u -- ??
Вот как его назвать?
Я пока называю NUM>??
как назвать получше без потери смысла и записи имени в виде предложения?
Вариант num>str>непонятная_ересь не предлагать
Сообщение Добавлено: Вс апр 09, 2017 10:13
  Заголовок сообщения:  Re: структура словарей и поле флагов  Ответить с цитатой
Victor__v писал(а):
Цитата:
к примеру, FIND сможет класть на стек только xt, почему бы не сделать так. Пусть все происходит как бы само.

Но для доп данных нужны флаги. Они-то и облегчают
Если find возвращает только xt , то как определить, что это за слово?

А зачем определять? Пусть оно делает свое дело. Кроме того, xt однозначно определяет тип слова. Для слов, определённых через двоеточие - это ссылка на адресный интерпретатор, для слов, созданных определяющими словами - на точку DOES> определяющего слова. К чему дублировать существующий механизм?
Victor__v писал(а):
Можно создать с десяток специализированных словарей, для инлайн-слов, immediate-ов, и пр. И как результат увеличение времени компиляции.
Данный подход потребует, по моим представлениям, наличие отдельного sfind для каждого спец.словаря.
Зачем, ежели влаги облегчают это дело.

Чем короче список, тем раньше закончится поиск по нему. Специализированный список явно будет короче общего списка. И время компиляции уменьшится.
sfind всего один. Просто он ищет в заданном контексте. Либо явно vocname sfind, либо неявно CONTEXT @ sfind. Я уверенно говорю об этом, потому что есть рабочая система, построенная по этому принципу.
Victor__v писал(а):
Кое-кто, всем известный шахматист, к примеру, приводит довод, что по происшествии н-го времени нельзя вспомнить какое слово как работает.
Не лучше ли механизм проверки ввести и вспоминать не надо будет?
К примеру, immediate-flag ' forth xt-wordlist-type

Не лучше. По заветам Мура-Броуди слово должно называться так, что сразу будет понятно ЧТО оно делает. Этому помогает правило: одно слово - одна функция. Правда тут кроется кажущееся противоречие. Неизбежно будут появляться слова, функция которых зависит от контекста. Но это только кажется. Потому что ситуация обратная. Контексты позволяют иметь слова с одинаковым именем, но разные функционально. Что дает возможность приближать форт-текст к тексту на пусть упрощенном, но человеческом, английском языке. Неизвестно, но вероятно, что иегролифические языки еще легче ложатся в эту концепцию.
А что дает механизм проверки? Как он действует? Как им пользоваться? Он потребует разработки специальной среды разработки?
Сообщение Добавлено: Сб апр 08, 2017 22:43
  Заголовок сообщения:  Re: структура словарей и поле флагов  Ответить с цитатой
Цитата:
к примеру, FIND сможет класть на стек только xt, почему бы не сделать так. Пусть все происходит как бы само.

Но для доп данных нужны флаги. Они-то и облегчают
Если find возвращает только xt , то как определить, что это за слово?
Можно создать с десяток специализированных словарей, для инлайн-слов, immediate-ов, и пр. И как результат увеличение времени компиляции.
Данный подход потребует, по моим представлениям, наличие отдельного sfind для каждого спец.словаря.
Зачем, ежели влаги облегчают это дело.

Кое-кто, всем известный шахматист, к примеру, приводит довод, что по происшествии н-го времени нельзя вспомнить какое слово как работает.
Не лучше ли механизм проверки ввести и вспоминать не надо будет?
К примеру, immediate-flag ' forth xt-wordlist-type
Сообщение Добавлено: Сб апр 08, 2017 20:59
  Заголовок сообщения:  Re: структура словарей и поле флагов  Ответить с цитатой
Victor__v писал(а):
Цитата:
построенная без флагов вообще

А смысл?
К тому же некоторые приёмы в форте также можно считать флагами.
Как "я юзверь" - USER-CODE, "я строка" - SLITERAL-CODE , "я переопределяемое слово" - VECT-CODE и пр.

Их тоже решили выкинуть?
Не флаги, но вызов данных слов может трактоваться так.

Это скользкий момент. Считать ли xt слова флагом? В конце-концов можно придумать концепцию, в которой входной поток интерпретировать как поток флагов.
Сформулирую - флаг, это то, что требует следом условного перехода.
Поясню - я не против условных переходов вообще, но по возможности стараюсь от них избавляться.
Если можно не проверять слово на IMMEDIATE или, к примеру, FIND сможет класть на стек только xt, почему бы не сделать так. Пусть все происходит как бы само.
Сообщение Добавлено: Чт апр 06, 2017 17:20
  Заголовок сообщения:  Re: структура словарей и поле флагов  Ответить с цитатой
Цитата:
построенная без флагов вообще

А смысл?
К тому же некоторые приёмы в форте также можно считать флагами.
Как "я юзверь" - USER-CODE, "я строка" - SLITERAL-CODE , "я переопределяемое слово" - VECT-CODE и пр.

Их тоже решили выкинуть?
Не флаги, но вызов данных слов может трактоваться так.
Сообщение Добавлено: Чт апр 06, 2017 13:37
  Заголовок сообщения:  Re: структура словарей и поле флагов  Ответить с цитатой
Речь о флагах как таковых, или об их размещении в поле имени, как написано в некоторых источниках? Вполне можно под флаги выделить отдельное поле, это не проблема.
Сообщение Добавлено: Сб апр 01, 2017 01:08

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


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