Автор |
Сообщение |
|
|
Заголовок сообщения: |
Re: словари |
|
|
mOleg писал(а): С контекстом все просто и удобно, кроме того, очень удобно, когда в текущем словаре поиск не ведется (только проверка, есть ли в нем уже такое имя). Получается, что Forth-79 именно так и был сделан.
[quote="mOleg"]С контекстом все просто и удобно, кроме того, очень удобно, когда в текущем словаре поиск не ведется (только проверка, есть ли в нем уже такое имя).[/quote]Получается, что Forth-79 именно так и был сделан.
|
|
|
|
Добавлено: Чт июл 14, 2011 23:10 |
|
|
|
|
|
Заголовок сообщения: |
Re: словари |
|
|
ну и сколько можно тему-то перетирать? решение без контекста (когда есть поиск не в одном локальном словаре а в целой цепочке) не подходит для многопоточных программ и нереентерабелен, кроме того, лично я неоднократно попадал в ситуацию, когда непонятно как вообще вызвать слово из ээ соседней ветки или, недай бог, поменять порядок просмотра словарей, например, реверсировать его. С контекстом все просто и удобно, кроме того, очень удобно, когда в текущем словаре поиск не ведется (только проверка, есть ли в нем уже такое имя).
ну и сколько можно тему-то перетирать? решение без контекста (когда есть поиск не в одном локальном словаре а в целой цепочке) не подходит для многопоточных программ и нереентерабелен, кроме того, лично я неоднократно попадал в ситуацию, когда непонятно как вообще вызвать слово из ээ соседней ветки или, недай бог, поменять порядок просмотра словарей, например, реверсировать его. С контекстом все просто и удобно, кроме того, очень удобно, когда в текущем словаре поиск не ведется (только проверка, есть ли в нем уже такое имя).
|
|
|
|
Добавлено: Чт июл 14, 2011 20:03 |
|
|
|
|
|
Заголовок сообщения: |
Re: словари |
|
|
угу, и получается, что вместо одного слова МАСЛО я должен писать МАСЛО-МАСЛЯНОЕ-ИЗ-МАСЛЯНОГО-СЛОВАРЯ...
угу, и получается, что вместо одного слова МАСЛО я должен писать МАСЛО-МАСЛЯНОЕ-ИЗ-МАСЛЯНОГО-СЛОВАРЯ...
|
|
|
|
Добавлено: Чт июл 14, 2011 17:33 |
|
|
|
|
|
Заголовок сообщения: |
Re: словари |
|
|
WingLion писал(а): A теперь представим, что есть еще и словарь G,родителем которого является непросматриваемый родитель словаря из CONTEXT... И получаем при поиске - ?Кукиш, когда этот словарь надо подключить для работы. Или гемор по управлению содержимым CONTEXT. Не гемор. Просто внутри создаваемого определения указываешь нужный словарь. : NEW_WORD ... ИМЯ_СЛОВАРЯ СЛОВО_ИЗ_СЛОВАРЯ ... ; Примерно как в ООП Класс.Метод, где Класс=Словарь, Метод=Слово_из_него
[quote="WingLion"]A теперь представим, что есть еще и словарь G,родителем которого является непросматриваемый родитель словаря из CONTEXT... И получаем при поиске [b][size=200]- ?Кукиш[/size][/b], когда этот словарь надо подключить для работы. Или гемор по управлению содержимым CONTEXT.[/quote] Не гемор. Просто внутри создаваемого определения указываешь нужный словарь. : NEW_WORD ... ИМЯ_СЛОВАРЯ СЛОВО_ИЗ_СЛОВАРЯ ... ; Примерно как в ООП Класс.Метод, где Класс=Словарь, Метод=Слово_из_него
|
|
|
|
Добавлено: Чт июл 14, 2011 16:40 |
|
|
|
|
|
Заголовок сообщения: |
Re: словари |
|
|
_Harry писал(а): Тут закономерный вопрос может стек словарей не так уж и плох По крайней мере Форт не запрещает не пользоваться стеком словарей. В отдельных случаях контекстные словари все-таки дают какой-то эффект( в основном это касается написания кросс-компиляторов), правда даже в этом случае достаточно двух словарей CONTEXT и CURRENT.
[quote="_Harry"]Тут закономерный вопрос может стек словарей не так уж и плох [/quote] По крайней мере Форт не запрещает не пользоваться стеком словарей. В отдельных случаях контекстные словари все-таки дают какой-то эффект( в основном это касается написания кросс-компиляторов), правда даже в этом случае достаточно двух словарей CONTEXT и CURRENT.
|
|
|
|
Добавлено: Чт июл 14, 2011 09:42 |
|
|
|
|
|
Заголовок сообщения: |
Re: словари |
|
|
WingLion писал(а): И получаем при поиске - ?Кукиш, Тут закономерный вопрос может стек словарей не так уж и плох
[quote="WingLion"]И получаем при поиске - ?Кукиш,[/quote]Тут закономерный вопрос может стек словарей не так уж и плох :?:
|
|
|
|
Добавлено: Чт июл 14, 2011 08:37 |
|
|
|
|
|
Заголовок сообщения: |
Re: словари |
|
|
A теперь представим, что есть еще и словарь G,родителем которого является непросматриваемый родитель словаря из CONTEXT... И получаем при поиске - ?Кукиш, когда этот словарь надо подключить для работы. Или гемор по управлению содержимым CONTEXT.
A теперь представим, что есть еще и словарь G,родителем которого является непросматриваемый родитель словаря из CONTEXT... И получаем при поиске [b][size=200]- ?Кукиш[/size][/b], когда этот словарь надо подключить для работы. Или гемор по управлению содержимым CONTEXT.
|
|
|
|
Добавлено: Чт июл 14, 2011 04:52 |
|
|
|
|
|
Заголовок сообщения: |
Re: словари |
|
|
Разобрался с особенностями реализации словарей в Fig-Forth и Forth-79. 1.) Fig-Forthа.) Первый проход поиска начинается со словаря на который указывает CONTEXT. б.) Второй проход поиска начинается со словаря на который указывает CURRENT. в.) На каждом проходе у каждого из словарей последовательно обходятся родители вплоть до самого древнего предка (которым является FORTH). Поиск продолжается до нахождения слова, поэтому рассматриваем случай, когда слово никак не находится и поэтому поиск продолжается до конца. При этом для нарисованной картинки поиск будет проходить в таком порядке : первый проход : A->F B->I E->J, второй проход : C->G D->H E->J. Забавно, но в итоге получается обход словарей в таком порядке : CONTEXT,ПОСЛЕДОВАТЕЛЬНО_РОДИТЕЛИ_CONTEXT,FORTH,CURRENT,ПОСЛЕДОВАТЕЛЬНО_РОДИТЕЛИ_CURRENT,FORTH, причем словарь FORTH просматривается дважды. 2.) Forth-79а.) Первый проход поиска начинается со словаря на который указывает CONTEXT. б.) Второй проход поиска начинается со словаря на который указывает FORTH. в.) Родители словарей не просматриваются. Поиск продолжается до нахождения слова, поэтому рассматриваем случай, когда слово никак не находится и поэтому поиск продолжается до конца. При этом для нарисованной картинки поиск будет проходить в таком порядке : первый проход : A->F, второй проход : E->J. В итоге получается обход словарей в таком порядке : CONTEXT,FORTH. 3.) Вариант, который я залепил в своем Форте, согласно тому как понял Баранова и Ноздрунова. а.) Первый проход поиска начинается со словаря на который указывает CONTEXT. б.) Второй проход поиска начинается со словаря на который указывает CURRENT. в.) Третий проход поиска начинается со словаря на который указывает FORTH. г.) Родители словарей не просматриваются. Поиск продолжается до нахождения слова, поэтому рассматриваем случай, когда слово никак не находится и поэтому поиск продолжается до конца. При этом для нарисованной картинки поиск будет проходить в таком порядке : первый проход : A->F, второй проход : C->G, третий проход : E->J. В итоге получается обход словрей в таком порядке : CONTEXT,CURRENT,FORTH.
[img]http://s40.radikal.ru/i090/1107/b0/633136dd34ac.bmp[/img] Разобрался с особенностями реализации словарей в Fig-Forth и Forth-79.
1.) [b]Fig-Forth[/b] а.) Первый проход поиска начинается со словаря на который указывает CONTEXT. б.) Второй проход поиска начинается со словаря на который указывает CURRENT. в.) На каждом проходе у каждого из словарей последовательно обходятся родители вплоть до самого древнего предка (которым является FORTH). Поиск продолжается до нахождения слова, поэтому рассматриваем случай, когда слово никак не находится и поэтому поиск продолжается до конца. При этом для нарисованной картинки поиск будет проходить в таком порядке : первый проход : A->F B->I E->J, второй проход : C->G D->H E->J. Забавно, но в итоге получается обход словарей в таком порядке : CONTEXT,ПОСЛЕДОВАТЕЛЬНО_РОДИТЕЛИ_CONTEXT,FORTH,CURRENT,ПОСЛЕДОВАТЕЛЬНО_РОДИТЕЛИ_CURRENT,FORTH, причем словарь FORTH просматривается дважды.
2.) [b]Forth-79[/b] а.) Первый проход поиска начинается со словаря на который указывает CONTEXT. б.) Второй проход поиска начинается со словаря на который указывает FORTH. в.) Родители словарей не просматриваются. Поиск продолжается до нахождения слова, поэтому рассматриваем случай, когда слово никак не находится и поэтому поиск продолжается до конца. При этом для нарисованной картинки поиск будет проходить в таком порядке : первый проход : A->F, второй проход : E->J. В итоге получается обход словарей в таком порядке : CONTEXT,FORTH.
3.) Вариант, который я залепил в своем Форте, согласно тому как понял Баранова и Ноздрунова. а.) Первый проход поиска начинается со словаря на который указывает CONTEXT. б.) Второй проход поиска начинается со словаря на который указывает CURRENT. в.) Третий проход поиска начинается со словаря на который указывает FORTH. г.) Родители словарей не просматриваются. Поиск продолжается до нахождения слова, поэтому рассматриваем случай, когда слово никак не находится и поэтому поиск продолжается до конца. При этом для нарисованной картинки поиск будет проходить в таком порядке : первый проход : A->F, второй проход : C->G, третий проход : E->J. В итоге получается обход словрей в таком порядке : CONTEXT,CURRENT,FORTH.
|
|
|
|
Добавлено: Ср июл 13, 2011 23:44 |
|
|
|
|
|
Заголовок сообщения: |
Re: словари |
|
|
Ethereal писал(а): Создатели FIG-форта не следовали никакому стандарту и у них та-же фигня. Создатели стандартов 79/83 не принимали FIG-форт в рассчет и у них та-же хрень. Неспроста это ... Они явно чего-то имели ввиду ... Так надо не для стандарта, а для дела писать. Если какое-то поведение словарей вызывает проблемы в прикладных программах, изменяем поведение словарей. Только не умозрительно, и не для подгонки под два-три абстрактных примера, а как итог накопленного в проектах опыта.
[quote="Ethereal"]Создатели FIG-форта не следовали никакому стандарту и у них та-же фигня. Создатели стандартов 79/83 не принимали FIG-форт в рассчет и у них та-же хрень. Неспроста это ... Они явно чего-то имели ввиду ... [/quote] Так надо не для стандарта, а для дела писать. Если какое-то поведение словарей вызывает проблемы в прикладных программах, изменяем поведение словарей. Только не умозрительно, и не для подгонки под два-три абстрактных примера, а как итог накопленного в проектах опыта.
|
|
|
|
Добавлено: Вс мар 27, 2011 20:31 |
|
|
|
|
|
Заголовок сообщения: |
Re: словари |
|
|
Создатели FIG-форта не следовали никакому стандарту и у них та-же фигня. Создатели стандартов 79/83 не принимали FIG-форт в рассчет и у них та-же хрень. Неспроста это ... Они явно чего-то имели ввиду ... P.S. Во, чего накопал. Автор MVP-FORTH хвастается, что в его форте можно переключать организацию словарей со словарей в духе FIG на словари в духе 79 и обратно : There are two flavors of vocabularies available in MVP-FORTH. In one all vocabularies chain directly to FORTH. That is, when a vocabulary is invoked, it will be searched first and then the FORTH vocabulary will be searched. If you were to define a second vocabulary within another vocabulary, the search would only search the current one and jump directly to the FORTH vocabulary. The other flavor allows the sequential searching of parent vocabularies all of the way back to FORTH. The latter is known as <VOCABULARYFIG>. The former is <VOCABULARY79>. The function of VOCABULARY is vectored through 'VOCABULARY.Разбираюсь за счет чего выходили столь разные эффекты в FIG и 79. P.P.S. Вот словари в 79 и FIG сделаны по разному, но все равно у обоих малопонятное : : ... CURRENT @ CONTEXT ! ... ;
Создатели FIG-форта не следовали никакому стандарту и у них та-же фигня. Создатели стандартов 79/83 не принимали FIG-форт в рассчет и у них та-же хрень. Неспроста это ... :shuffle; Они явно чего-то имели ввиду ... :shuffle;
P.S. Во, чего накопал. Автор MVP-FORTH хвастается, что в его форте можно переключать организацию словарей со словарей в духе FIG на словари в духе 79 и обратно : [b]There are two flavors of vocabularies available in MVP-FORTH. In one all vocabularies chain directly to FORTH. That is, when a vocabulary is invoked, it will be searched first and then the FORTH vocabulary will be searched. If you were to define a second vocabulary within another vocabulary, the search would only search the current one and jump directly to the FORTH vocabulary. The other flavor allows the sequential searching of parent vocabularies all of the way back to FORTH. The latter is known as <VOCABULARYFIG>. The former is <VOCABULARY79>. The function of VOCABULARY is vectored through 'VOCABULARY.[/b] Разбираюсь за счет чего выходили столь разные эффекты в FIG и 79.
P.P.S. Вот словари в 79 и FIG сделаны по разному, но все равно у обоих малопонятное : : ... CURRENT @ CONTEXT ! ... ;
|
|
|
|
Добавлено: Вс мар 27, 2011 19:12 |
|
|
|
|
|
Заголовок сообщения: |
Re: словари |
|
|
Ethereal писал(а): Ошибочно ? И так три раза подряд ? И что тут такого? Разве от следования стандарту автор транслятора Форта получает много полезного?
[quote="Ethereal"]Ошибочно ? И так три раза подряд ?[/quote] И что тут такого? Разве от следования стандарту автор транслятора Форта получает много полезного?
|
|
|
|
Добавлено: Вс мар 27, 2011 15:42 |
|
|
|
|
|
Заголовок сообщения: |
Re: словари |
|
|
Хищник писал(а): Ethereal писал(а): Скомпилированные слова всегда будут найдены, поскольку само слово : "colon" во всех 3-х старых стандартах cделает current контекстом. Предположим, что такое поведение введено в стандарт ошибочно. Что тогда? Ошибочно ? И так три раза подряд ?
[quote="Хищник"][quote="Ethereal"] Скомпилированные слова всегда будут найдены, поскольку само слово : "colon" во всех 3-х старых стандартах cделает current контекстом.[/quote] Предположим, что такое поведение введено в стандарт ошибочно. Что тогда?[/quote] Ошибочно ? И так три раза подряд ?
|
|
|
|
Добавлено: Вс мар 27, 2011 15:37 |
|
|
|
|
|
Заголовок сообщения: |
Re: словари |
|
|
К словарям в стандарте ANSI есть претензии. - Их реализация накладна для систем с катастрофически малыми ресурсами. - Мысленно отслеживать составной контекст сложно, а потому идея стека словарей избыточна Понимать как работали старые системы важно, если создаешь свои. Позволяет найти минимальное эффективное решение.
Я, по прочтении Баранова и Ноздрунова сделал так : Порядок поиска: CONTEXT->CURRENT->FORTH Держишь в голове только три вещи - в каком контексте определяешь слова, в какой словарь, ну и базовые слова Форта есть в наличии по умолчанию. Применение плавающего + из словаря FLOAT для определения слова в словаре FORTH у меня будет таким (изначально CONTEXT=CURRENT=FORTH) : FLOAT : SHIT_1 ... + ... ; : SHIT_2 ... + ... ; FORTH Но оказалось, что это идет вразрез со всеми старыми стандартами.
Вот что я еще накопал в стандарте Forth-83. Previously standardized words continue in their use: VOCABULARY, FORTH, DEFINITIONS, and FORGET. However, this proposal assumes that vocabulary names are not IMMEDIATE . А отсюда следует, что до Forth-83 словари были немедленного исполнения. А значит они переключали контекст в т.ч. и ВНУТРИ форт-определений.
Ах вот значит как ! В Forth-79 порядок поиска CONTEXT->FORTH, каждое новое определение по : само переключает CONTEXT на CURRENT, чтобы видеть переопределение слова в словаре, если такое произойдет, и мой пример, приведенный выше, выглядел бы так : : SHIT_1 FLOAT ... + ... ; : SHIT_2 FLOAT ... + ... ; FORTH , т.е. контекст каждый раз надо заново задавать внутри Форт-определений. Получается так ! Правда, мой вариант мне все-таки больше нравится.
К словарям в стандарте ANSI есть претензии. - Их реализация накладна для систем с катастрофически малыми ресурсами. - Мысленно отслеживать составной контекст сложно, а потому идея стека словарей избыточна Понимать как работали старые системы важно, если создаешь свои. Позволяет найти минимальное эффективное решение.
Я, по прочтении Баранова и Ноздрунова сделал так : Порядок поиска: CONTEXT->CURRENT->FORTH Держишь в голове только три вещи - в каком контексте определяешь слова, в какой словарь, ну и базовые слова Форта есть в наличии по умолчанию. Применение плавающего + из словаря FLOAT для определения слова в словаре FORTH у меня будет таким (изначально CONTEXT=CURRENT=FORTH) : FLOAT : SHIT_1 ... + ... ; : SHIT_2 ... + ... ; FORTH Но оказалось, что это идет вразрез со всеми старыми стандартами.
Вот что я еще накопал в стандарте Forth-83. [b]Previously standardized words continue in their use: VOCABULARY, FORTH, DEFINITIONS, and FORGET. However, this proposal assumes that vocabulary names are not IMMEDIATE .[/b] А отсюда следует, что до Forth-83 словари были немедленного исполнения. А значит они переключали контекст в т.ч. и ВНУТРИ форт-определений.
Ах вот значит как ! В Forth-79 порядок поиска CONTEXT->FORTH, каждое новое определение по : само переключает CONTEXT на CURRENT, чтобы видеть переопределение слова в словаре, если такое произойдет, и мой пример, приведенный выше, выглядел бы так : : SHIT_1 FLOAT ... + ... ; : SHIT_2 FLOAT ... + ... ; FORTH , т.е. контекст каждый раз надо заново задавать внутри Форт-определений. Получается так ! Правда, мой вариант мне все-таки больше нравится.
|
|
|
|
Добавлено: Вс мар 27, 2011 15:36 |
|
|
|
|
|
Заголовок сообщения: |
Re: словари |
|
|
Ethereal писал(а): Скомпилированные слова всегда будут найдены, поскольку само слово : "colon" во всех 3-х старых стандартах cделает current контекстом. Предположим, что такое поведение введено в стандарт ошибочно. Что тогда?
[quote="Ethereal"] Скомпилированные слова всегда будут найдены, поскольку само слово : "colon" во всех 3-х старых стандартах cделает current контекстом.[/quote] Предположим, что такое поведение введено в стандарт ошибочно. Что тогда?
|
|
|
|
Добавлено: Вс мар 27, 2011 14:49 |
|
|
|
|
|
Заголовок сообщения: |
Re: словари |
|
|
mOleg писал(а): В любом случае стек контекстный отменил все проблемы, Не все он отменил. Не все. Для переключения контекста нужно применять танцы с бубном. Вложение:
Forth_voc_dic.GIF [ 22.28 Кб | Просмотров: 24594 ]
Каждый кружок - это определение (группа определений). Линии контекста определяют, какие словари нужны для определений в словаре WORK. И получается, что перед каждым новым определением (группой определений) надо контекст дергать. Мало того, надо самому ПОМНИТЬ (системе то все пофиг!), что надо подключить, а что отключить, чтобы не напортачить.
[quote="mOleg"]В любом случае стек контекстный отменил все проблемы,[/quote]
Не все он отменил. Не все.
Для переключения контекста нужно применять танцы с бубном.[attachment=0]Forth_voc_dic.GIF[/attachment]
Каждый кружок - это определение (группа определений). Линии контекста определяют, какие словари нужны для определений в словаре WORK. И получается, что перед каждым новым определением (группой определений) надо контекст дергать. Мало того, надо самому ПОМНИТЬ (системе то все пофиг!), что надо подключить, а что отключить, чтобы не напортачить.
|
|
|
|
Добавлено: Вс мар 27, 2011 12:42 |
|
|
|
|