Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Пт мар 29, 2024 11:35

...
Google Search
Forth-FAQ Spy Grafic

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




Начать новую тему Ответить на тему  [ Сообщений: 66 ]  На страницу Пред.  1, 2, 3, 4, 5  След.
Автор Сообщение
 Заголовок сообщения: Re: О компиляции литералов и новом виде слов
СообщениеДобавлено: Пн июл 07, 2014 22:47 
Не в сети
Administrator
Administrator
Аватара пользователя

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

Так в итоге в чем проблема-то? Ну да, есть заранее определенные типы литералов. При необходимости перед распознаванием (и/или после) ставится векторное слово и дораспознает любой пользовательский каприз.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: О компиляции литералов и новом виде слов
СообщениеДобавлено: Пн июл 07, 2014 23:05 
Хищник писал(а):
Так в итоге в чем проблема-то?

В частном случае:
В наличии смысловой неформализуемой связи между обособленными фрагментами интерпретатора. Как бы, если мы вводим в "нормальных" языках программирования некоторый тип (класс), то потом, наследуя его описание в обоих фрагментах, автоматом получаем его одинаковое "понимание" и там, и там.
В FORTH же я должен параллельно изменять "распознаватель" и "компилятор", внося и туда, и сюда параллельно ОДИНАКОВЫЕ изменения, не имея возможности формализовать их.

В общем случае:
Это один из случаев, где передача алгоритма - естественный способ коммуникации между двумя фрагментами кода.

P.S. Как бы, "векторное слово" - это слово имеющее несколько заранее прописанных вариантов действия ("вектор" в смысле набор значений - одномерный массив), а совсем не переопределяемое слово (указатель на функцию).
См. Баранов & Ноздрунов.
Типа, "похоже" на вектор прерывания?


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: О компиляции литералов и новом виде слов
СообщениеДобавлено: Вт июл 08, 2014 15:11 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7960
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
gudleifr писал(а):
В FORTH же я должен параллельно изменять "распознаватель" и "компилятор", внося и туда, и сюда параллельно ОДИНАКОВЫЕ изменения, не имея возможности формализовать их.

Распознавание и так будет в интерпретаторе. Потом нужно или ничего не делать (литерал остается на нужном стеке), или скомпилировать его (компилирующее слово все равно нужно писать).

gudleifr писал(а):
P.S. Как бы, "векторное слово" - это слово имеющее несколько заранее прописанных вариантов действия ("вектор" в смысле набор значений - одномерный массив), а совсем не переопределяемое слово (указатель на функцию).
См. Баранов & Ноздрунов.
Типа, "похоже" на вектор прерывания?


http://www.forth.org/novice.pdf - в конце второй страницы. И там же прямым текстом написано о словах, которые появляются после (а не заранее). Так что именно как "вектор прерывания".


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: О компиляции литералов и новом виде слов
СообщениеДобавлено: Вт июл 08, 2014 15:52 
Хищник писал(а):
... (компилирующее слово все равно нужно писать).
Так о том и спич... Что нужная для его написания информация инкапсулирована в распознавателе.

Хищник писал(а):
http://www.forth.org/novice.pdf - в конце второй страницы.
А-а... Просто неудачное название примера. Почему-то такая хрень приживается.

P.S. Спасибо за наводку. Добавил этот вариант DEFER в копилку FORTH-маразмов.


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: О компиляции литералов и новом виде слов
СообщениеДобавлено: Вт июл 08, 2014 16:08 
Не в сети
Administrator
Administrator
Аватара пользователя

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

По сути надо просто выбрать нужный стек и размер литерала. Это дольше осознавать и проверять, чем писать.
gudleifr писал(а):
А-а... Просто неудачное название примера. Почему-то такая хрень приживается.

У меня везде живет VECT. Его переименовали в DEFER, ну и пусть их. В любом случае, это слово-указатель с возможностью смены адреса в рантайме. В SPF ограничились векторным (возможно, "векторизованным" звучит и корректнее, но векторным - уже жаргон) NOTFOUND, хотя аккуратная расстановка таких слов внутри интерпретатора существенно снижает сложность точечной коррекции разбора литералов.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: О компиляции литералов и новом виде слов
СообщениеДобавлено: Вт июл 08, 2014 17:12 
Хищник писал(а):
По сути надо просто выбрать нужный стек и размер литерала.
В простом случае - да. Но смысл примера состоял в том, что при аккуратном решении можно допустить сколь угодно сложную компиляцию (хеширование, перенос из кратковременной памяти в долговременную, регистрация, переиндексирование, сборка мусора и пр.). Т.к. проблемно-ориентированный язык может уметь работать с любыми данными, грешно изначально закладывать в FORTH ограничения и мучиться вопросом, все ли нужные типы предусмотрены.


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: О компиляции литералов и новом виде слов
СообщениеДобавлено: Вт июл 08, 2014 17:37 
Не в сети
Moderator
Moderator
Аватара пользователя

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

немного не так:
Код:
: INTERPRET_ ( -> ) \ интерпретировать входной поток
  BEGIN
    PARSE-NAME DUP
  WHILE
    SFIND ?DUP
    IF
         STATE @ =
         IF COMPILE, ELSE EXECUTE THEN
    ELSE
         S" NOTFOUND" SFIND
         IF EXECUTE
         ELSE 2DROP ?SLITERAL THEN
    THEN
    ?STACK
  REPEAT 2DROP
;


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

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: О компиляции литералов и новом виде слов
СообщениеДобавлено: Вт июл 08, 2014 18:23 
mOleg писал(а):
Код:
         S" NOTFOUND" SFIND
         IF EXECUTE
         ELSE 2DROP ?SLITERAL THEN

Видите? В данном случае никто не гарантирует одинакового понимания термина "литерал" у текущего "NOTFOUND" и ?SLITERAL.

mOleg писал(а):
Код:
         S" NOTFOUND" SFIND

Оффтоп. Конечно FORTH позволяет многое, но хоть кто-нибудь из фортеров хоть когда-нибудь обосновывал подобное "решение"? Нет, я, понимаю, что могут быть словари, нестандартно реагирующие на литералы/ошибки ввода, но каков их удельный вес в "типовом проблемно-ориентированном языке"? Каков удельный вес других "ошибок", которые в принципе можно распознавать "словарно-зависимо"? Насколько это перевешивает отказ от наследования словарей? От хранения "обработчиков" в специально-отведенном месте словаря? Вообще, кто-нибудь видел хоть какую-то практическую пользу от нескольких словарей (кроме целевой компиляции)?


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: О компиляции литералов и новом виде слов
СообщениеДобавлено: Вт июл 08, 2014 19:04 
Не в сети
Moderator
Moderator
Аватара пользователя

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

решение никогда не нравилось, мне больше по душе так:
Код:

\ интерпретировать одну лексему ?
: EVAL-TOKEN ( asc # --> )
             SFINDLFA  *IF ?EXECUTABLE LINK>XTI  ELSE ERROR" Имя в контексте не найдено!" THEN
             0 > IF EXECUTE ;THEN
                    REGULAR ;

\ интерпретировать входной поток ?
: (INTERPRET) ( --> )
              BEGIN NextWord *WHILE
                    EVAL-TOKEN ?STACK
              REPEAT DDROP ;


gudleifr писал(а):
Вообще, кто-нибудь видел хоть какую-то практическую пользу от нескольких словарей (кроме целевой компиляции)?

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

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: О компиляции литералов и новом виде слов
СообщениеДобавлено: Вт июл 08, 2014 19:20 
mOleg писал(а):
(INTERPRET)...
А где спрятана компиляция?

mOleg писал(а):
да удобно.
А практическая польза? Например, для меня использование Вами словарей представляет практическое неудобство. Очень тяжело понять, что Вы имеете в виду.
(Примерно, как в обычном языке программирования - к смысловым операторам добавлены описания, определения, блоковые скобки и прочая структурная обфускация).


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: О компиляции литералов и новом виде слов
СообщениеДобавлено: Вт июл 08, 2014 19:42 
Не в сети
Moderator
Moderator
Аватара пользователя

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

Код:
\ в зависимости от значение переменной state либо исполнить слово,
\ представленное своим xt, либо компилировать его в текущее определение.
: REGULAR ( xt --> ) state IF COMPILE, ;THEN EXECUTE ;


gudleifr писал(а):
А практическая польза?

Меньше бардака в рабочем словаре как минимум.

gudleifr писал(а):
Например, для меня использование Вами словарей представляет практическое неудобство. Очень тяжело понять, что Вы имеете в виду.

странно. Ничего сверхестественного в словарях нет, вы же пользуетесь каталогами на диске, надесюь 8) а не сваливаете все в одну кучу.

gudleifr писал(а):
(Примерно, как в обычном языке программирования - к смысловым операторам добавлены описания, определения, блоковые скобки и прочая структурная обфускация).

ну нет, не в дополнительном синтаксисе смысл.
представьте, что словари - это каталоги.
У вас есть рабочий, куда вы что-то складываете,
некоторое количество подручных (path)
и куча всяки других не нужных сейчас(для решения конкретной задач).
Усе как в DOSе.
По необходимости вы правите path, чтобы не лезть куда-то за нужным сейчас файлом,
а просто набирать его имя. Если работали в консоли ДОСа, вполне должны понимать,
о чем я говорю.
Собственно, это почти то же самое, но фортовее, в смысле path реализован как стек, и, вобщем-то, все.

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: О компиляции литералов и новом виде слов
СообщениеДобавлено: Вт июл 08, 2014 20:15 
mOleg писал(а):
: REGULAR ( xt --> ) state IF COMPILE, ;THEN EXECUTE ;

Мне трудно следить за Вашими подробностями. Сами посмотрите на свой код: на одном уровне вложения/понимания конструкции компиляции слов и литералов, или одно закопано глубже? Или, вообще, используются ничем не похожие друг на друга механизмы?
И как передается информация от распознавателя литералов к его компилятору?
Тут важно, не красиво ли смотрится Ваш интерпретатор, а не слишком ли геморройно изменять список распознаваемых литералов.
Мне, например, проще принять распознавание всех потребных литералов в одном месте, чем запоминать в каком контексте (словаре) что и как распознается.
Повторю, компиляция словарей - только пример. Тема-то, о "ран-тайм компиляции".

mOleg писал(а):
Меньше бардака в рабочем словаре как минимум.
В приводимых Вами примерах, например, удаление "словарных механизмов" только уменьшит бардак.

mOleg писал(а):
странно. Ничего сверхестественного в словарях нет

Мне тут коллега Хищник подкинул пример про vector (см. выше). Тоже ничего сверхъестественного: ну подумаешь, локальные переменные, вложенные слова, генерация имен... А потом - смысловая часть: куча lit, и postpone. И я уверен, что на количество последних (а именно они и определяют семантику "вектора"), и, тем более, на эффективность работы применение упомянутых фич никакого влияние не оказывает.
Такое же на обычного человека оказывают применяемые Вами словарные ухищрения.

mOleg писал(а):
вы же пользуетесь каталогами на диске
Хуже. При том объеме библиотечных данных, какой у меня на диске, каталоги уже не помогают. Кое-как спасают файлы-напоминалки и функция поиска... А при углубление в каую-либо работу каталоги, действительно, практически не нужны - приходится все переносить в одно место...

mOleg писал(а):
Если работали в консоли ДОСа, вполне должны понимать,
Не знаю, как у Вас, а я при работе в DOS первым делом сносил с компа Norton Commander и писал простенький циклический BAT-ник, который содержал все нужные команды. Один даже сохранился
Код:
@ echo off
c:\bin\kirillsb
REM c:\bin\sgr
c:
cd \crazy\forth
:Loop
echo ***** FOBOS ***** Softfeet 1992-2000 *****
echo A)ssembler E)xit D)ebug G)ame L)ist M)ake N)ote P)roject R)un T)ime
c:\bin\ask AaEeDdLlMmNnRrTtGgPp
if errorlevel 19 goto Project
if errorlevel 17 goto Game
if errorlevel 15 goto Time
if errorlevel 13 goto Run
if errorlevel 11 goto Note
if errorlevel  9 goto Make
if errorlevel  7 goto List
if errorlevel  5 goto Debug
if errorlevel  3 C:\bat\quit
c:\bin\ne g1.asm
goto Loop
:Project
c:\bin\ne forth.alg
goto Loop
:Game
c:\bin\ne \games\txt\next.alg
goto Loop
Debug
debug g1.com
goto Loop
:List
c:\bin\ne g1.lst
goto Loop
:Make
c:\bin\make g1
goto Loop
:Note
c:\bin\ne \txt\note.txt
goto Loop
:Run
g1
goto Loop
:Time
time <\bat\yes.dat
goto Loop

Т.е. как в FORTH - алгоритмы вместо структур данных.

P.S. Простите, конечно, за оверквотинг, но данный пример мне кажется достаточно FORTH-показательным. Имеем простейший Цикл Управления. Механизм создания новых слов? Простейшим способом - в редакторе (через "двоеточие" (!)). А если бы я начал структурировать? Сортировать и упорядочивать каталоги, сохранять пути в переменных?


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: О компиляции литералов и новом виде слов
СообщениеДобавлено: Вт июл 08, 2014 22:08 
Не в сети
Moderator
Moderator
Аватара пользователя

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

бывает. Собственно REGULAR по семантике похож на LITERAL, только работает с токенами (т.е. исполнимыми адресами).

gudleifr писал(а):
Сами посмотрите на свой код: на одном уровне вложения/понимания конструкции компиляции слов и литералов, или одно закопано глубже?

а зачем делать на одном уровне?
на каждом уровне получается настолько простой код, на сколько это возможно.
цикл INTERPRET берет следующий токен и отдает его EVAL-TOKEN - куда проще?
EVAL-TOKEN ищет лексему в контексте, и либо находит и выполняет\компилирует, либо возвращает ошибку.
есть дополнительный код содержащий ?EXECUTABLE - но это отдельный механизм, запрещающий использовать опасные слова. Опять же, проще некуда.
при этом никто не запрещает устраивать бардак в вашем рабочем словаре, не обязывает манипулировать словарями.

gudleifr писал(а):
И как передается информация от распознавателя литералов к его компилятору?

для этого лучше рассмотреть код 8) а простой ответ - обычно.

gudleifr писал(а):
Тут важно, не красиво ли смотрится Ваш интерпретатор, а не слишком ли геморройно изменять список распознаваемых литералов.

А какая сложность в упоминании имени словаря? это просто слово, пускай со сложным поведением, но это достаточно привычно.

gudleifr писал(а):
Мне, например, проще принять распознавание всех потребных литералов в одном месте, чем запоминать в каком контексте (словаре) что и как распознается.

даже, если они не нужны, или мешают?

gudleifr писал(а):
mOleg писал(а):Меньше бардака в рабочем словаре как минимум.В приводимых Вами примерах, например, удаление "словарных механизмов" только уменьшит бардак.

о каких примерах речь?

gudleifr писал(а):
Такое же на обычного человека оказывают применяемые Вами словарные ухищрения.

не льстите себе, вы не обычный человек - вы редкостный зануда 8)
(вот даже не думал пытаться обидеть ни сколечки)

Любой механизм имеет право на жизнь, посему не вижу плохого в варианте Хищника.
Применяемость того или иного механизма на вашей совести (как программиста).

gudleifr писал(а):
Хуже. При том объеме библиотечных данных, какой у меня на диске, каталоги уже не помогают.

чтож, похоже вам больше подходит бардачный стиль больше, это ужастно, но, увы, распространено.

gudleifr писал(а):
Не знаю, как у Вас, а я при работе в DOS первым делом

То есть, что такое path и как оно работает вы не в курсе?

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: О компиляции литералов и новом виде слов
СообщениеДобавлено: Вт июл 08, 2014 22:21 
Не в сети
Moderator
Moderator
Аватара пользователя

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

Код:
  \ ячейка для хранения последнего распознанного числа
  USER-CREATE last-number 2 CELLS TC-USER-ALLOT

\ методы работы с числами возвращаемые транслятору
: (vlit)  ( --> n ) last-number  @  literal ; IMMEDIATE
: (vdlit) ( --> d ) last-number D@ dliteral ; IMMEDIATE

\ попытаться распознать строку asc # , как число,
\ в случае успеха вернуть lfa слова, ассоциируемого с числом
: sNumLfa ( asc # vid --> lfa | 0 ) DROP  \ vid словаря не нужен
          snNumber *IF 1 - IF    last-number D! LFA (vdlit)
                            ELSE last-number  ! LFA (vlit)
                           THEN
                    THEN ;

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: О компиляции литералов и новом виде слов
СообщениеДобавлено: Вт июл 08, 2014 22:31 
mOleg писал(а):
а зачем делать на одном уровне?
Удобнее, код получается более управляемым.
mOleg писал(а):
при этом никто не запрещает устраивать бардак в вашем рабочем словаре, не обязывает манипулировать словарями.
...
даже, если они не нужны, или мешают?
Сами спросили, сами ответили...
mOleg писал(а):
простой ответ - обычно.
Обычно - раком. Нет, пардон, заметил Ваше обновление - у Вас еще хуже. Как бы, странное противоречие получается - столько слов для обеспечения универсальности, что универсальность сведена к нулю.
Самое смешное, это, действительно, пример ран-тайм компиляции, однако, настолько ограниченный, что его можно рекомендовать в качестве отрезвляющего средства всем, кто вдруг решит, что от этого метода может быть польза.
mOleg писал(а):
о каких примерах речь?
Выбирайте любой. Избыточность у Вас везде зашкаливает.
mOleg писал(а):
чтож, похоже вам больше подходит бардачный стиль больше, это ужастно, но, увы, распространено.
Спорное утверждение. К счастью - не по делу.
mOleg писал(а):
То есть, что такое path и как оно работает вы не в курсе?
Логика этого высказывания мне непонятна. Я что, обязан в любом программном огрызке использовать весь список известных мне операторов? В данном случае применение path было бы вредной избыточностью (я бы даже сказал "избыточностью по Броуди").


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

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


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

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


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

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