Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Ср окт 23, 2019 13:49

...
Google Search
Forth-FAQ Spy Grafic

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




Начать новую тему Ответить на тему  [ Сообщений: 62 ]  На страницу 1, 2, 3, 4, 5  След.
Автор Сообщение
 Заголовок сообщения: о природе слов и словарей
СообщениеДобавлено: Чт дек 08, 2011 16:09 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 4997
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 20 раз.
Поблагодарили: 58 раз.
gudleifr писал(а):
Пока мне непонятно: если механизм вызова слов одинаков, то зачем нужны умные словари, а если разный - то полетит схема наследования словарей. Впрочем, для целевой компиляции подход полезный.

"умные словари" - это не совсем верное название, ведь пересмотрено и изменено устройство и поведение всего форта сразу в большом количестве ээ аспектов:
1) определего главное поле словарной статьи, вся структура словаря перестроена относительно него;
2) пересмотрено понятие флага слова, и работа с флагами пересмотрена;
3) пересмотрен обязательный состав словарной статьи, полностью изменена работа с ее полями;
4) изменен метод поиска имен в словаре и в контексте (т.е. словарях);
5) изменен механизм компиляции определений (сборка, возможная оптимизация);
6) изменен механизм резервирования имеющегося пространства в словаре
- и это только на уровне слов внутри привычных статических словарей (впрочем уже любых). На уровне самих словарей так же значительные изменения, которые позволяют использовать привычную в форте методику трансляции текст (т.е. INTERPRET , хотя последний так же изменен). Вобщем я начал описывать устойство всего перечисленного, правда до ума еще не довел.

Кстати, что подразумевается под схемой наследования словарей?

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: НА ЧТО СПОСОБЕН И НА ЧТО ДОЛЖЕН БЫТЬ СПОСОБЕН FORTH?
СообщениеДобавлено: Чт дек 08, 2011 16:17 
mOleg писал(а):
... "умные словари" - это не совсем верное название...
Вот тут я, в свою очередь, не понял, зачем это надо?
mOleg писал(а):
Кстати, что подразумевается под схемой наследования словарей?
Когда после неудачного поиска в словаре поиск продолжается в словаре, над которым он создан.


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: НА ЧТО СПОСОБЕН И НА ЧТО ДОЛЖЕН БЫТЬ СПОСОБЕН FORTH?
СообщениеДобавлено: Пт дек 09, 2011 18:08 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 4997
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 20 раз.
Поблагодарили: 58 раз.
gudleifr писал(а):
mOleg писал(а):Кстати, что подразумевается под схемой наследования словарей?Когда после неудачного поиска в словаре поиск продолжается в словаре, над которым он создан.

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

gudleifr писал(а):
mOleg писал(а):... "умные словари" - это не совсем верное название...Вот тут я, в свою очередь, не понял, зачем это надо?

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

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: НА ЧТО СПОСОБЕН И НА ЧТО ДОЛЖЕН БЫТЬ СПОСОБЕН FORTH?
СообщениеДобавлено: Пт дек 09, 2011 18:39 
mOleg писал(а):
мне не нравится эта методика работы со словарями
Зачем же выкидывать хорошую вещь? По-моему, концепция общих и частных случаев вполне человеческая.
gudleifr писал(а):
Т.е. имеется стандартный интерфейс через который можно взаимодействовать с любыми данными, расположенными в любом месте, хранимыми любым образом.
Вспомнил, что это мне напоминает - Btrieve (старенький прибамбасик для работы с базами данных практически произвольного формата)! Однако, все равно не понимаю, что, окромя запросов на чтение данных, может работать в таких условиях? Допустим, имею кусок шитого кода и DLL-библиотеку - каким образом и какую пользу можно извлечь от упаковывания их в объект одного типа?


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: НА ЧТО СПОСОБЕН И НА ЧТО ДОЛЖЕН БЫТЬ СПОСОБЕН FORTH?
СообщениеДобавлено: Пт дек 09, 2011 20:34 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 4997
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 20 раз.
Поблагодарили: 58 раз.
gudleifr писал(а):
mOleg писал(а):мне не нравится эта методика работы со словарямиЗачем же выкидывать хорошую вещь? По-моему, концепция общих и частных случаев вполне человеческая.

право на жизнь, конечно, имеет, но контекст удобнее.

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

вобщем-то, это тема для другого топика 8)
gudleifr писал(а):
Допустим, имею кусок шитого кода и DLL-библиотеку - каким образом и какую пользу можно извлечь от упаковывания их в объект одного типа?

все зависит и от потребнстей и от фантазий, мне, лично приятно уже то, что можно напрямую без объявления вызывать функции АПИ, или вот такое:
ALSO KERNEL32.DLL
WORDS

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: НА ЧТО СПОСОБЕН И НА ЧТО ДОЛЖЕН БЫТЬ СПОСОБЕН FORTH?
СообщениеДобавлено: Пт дек 09, 2011 21:08 
mOleg писал(а):
ALSO KERNEL32.DLL
WORDS

Я и говорю, запросы на чтение проходят на "Ура!" А как с выполнением? Все равно надо обвешивать процедурами сохранения/восстановления регистров, загодя приводить свою работу со стеками в соответствие с Windows... Это еще повезло, что Win-32 зафиксировал размер стековых параметров... И все это ради возможности вызывать Win-функции без префикса? Работая над FOBOS, я утвердился в мысли, что простой вызов практически любой API-функции смысла не имеет - обязательно надо поддерживать некий контекст. А раз его все равно нужно писать, то вызов любой Win-фукции встречается в Forth-программе ровно один раз - в слове, поддерживающем контекст.

Но, конечно, выглядит красиво.

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


Последний раз редактировалось gudleifr Сб дек 10, 2011 13:19, всего редактировалось 3 раз(а).

Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: НА ЧТО СПОСОБЕН И НА ЧТО ДОЛЖЕН БЫТЬ СПОСОБЕН FORTH?
СообщениеДобавлено: Вс дек 11, 2011 20:37 
mOleg писал(а):
...словари...
Я понял это так. Пусть имеется некий файл произвольного формата, содержащий, среди прочей, информацию об именовании его отдельных частей, содержащих исполняемый, в широком смысле, код.
Кроме того заданы алгоритмы для извлечения этой информации и способе исполнения этого кода. Постулируется два подхода к ословариванию этого файла.
Ваш подход - словарный: создается специальный словарь (в случае разнотипного кода - несколько), инкапсулирующий способ выполнения FIND и EXECUTE (и некоторых других) для данного файла. Обращение к этому словарю устанавливает необходимый контекст, в котором эти слова ищутся и выполняются специфическим для этого файла способом.
Мой подход - парсерный: при парсировании этого файла создаются слова-оболочки для вызова отдельных кусков кода - в обычном словаре.
Преимущество словарного подхода.
* Не требуется никакая подготовительная работа по парсированию для файлов уже известных типов. Нужно только создать новый словарь. В случае необходимости он выдаст все, что нам потребуется: список всех слов под, доступ к их коду...
* Слова имеют свои исконные имена, не нужно придумывать новые имена для слов-оболочек.
* Автоматически получаем доступ ко всем словам файла, без необходимости выдергивать их по мере надобности.
* Возможно заранее создать некую межсловарную базу данных для облегчения работы с файлами данного типа (константы, парадигмы, связывание), спрятанную от остальной программы в слове создания словарей этого типа.
Преимущества парсерного подхода:
* Возможно выдергивание только тех слов, которые нам нужны без накладных расходов на поддержание отдельного словаря.
* При создании слов-оболочек можно засунуть в них необходимые для вызова кода контекстные зависимости (передача значений по умолчанию, получение идентификаторов текущих объектов, вызовы функций поддержки).
* Слово EXECUTE работает независимо от контекста. Т.е. Я могу получить адрес слова обращения к нужному участку кода и вызвать его потом из любого места программы, без необходимости помнить, из какого словаря оно взято. (При словарном методе нужно вместо адреса кода подставлять адрес соответсвующего слова-оболочки словаря, но это, по сути, будет повторение работы сделанной изначально при парсерном методе.)
Я правильно понял?


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: НА ЧТО СПОСОБЕН И НА ЧТО ДОЛЖЕН БЫТЬ СПОСОБЕН FORTH?
СообщениеДобавлено: Пн дек 12, 2011 15:19 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 4997
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 20 раз.
Поблагодарили: 58 раз.
gudleifr писал(а):
л(а):...словари...Я понял это так. Пусть имеется некий файл произвольного формата, содержащий, среди прочей, информацию об именовании его отдельных частей, содержащих исполняемый, в широком смысле, код.Кроме того заданы алгоритмы для извлечения этой информации и способе исполнения этого кода. Постулируется два подхода к ословариванию этого файла.Ваш подход - словарный: создается специальный словарь (в случае разнотипного кода - несколько), инкапсулирующий способ выполнения FIND и EXECUTE (и некоторых других) для данного файла. Обращение к этому словарю устанавливает необходимый контекст, в котором эти слова ищутся и выполняются специфическим для этого файла способом.

типа того, только:
gudleifr писал(а):
имеется некий файл произвольного формата, содержащий, среди прочей, информацию об именовании его отдельных частей

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

gudleifr писал(а):
Кроме того заданы алгоритмы для извлечения этой информации и способе исполнения этого кода.

Методики преобразования запроса (ключ) и генерирования результата реализованы, соответственно внутри системы. Собственно, получается некий драйвер устройства, к которому мы обращаемся привычным нам образом.

gudleifr писал(а):
создается специальный словарь (в случае разнотипного кода - несколько), инкапсулирующий способ выполнения FIND и EXECUTE (и некоторых других) для данного файла.

Не совсем так, скрывается методика поиска, преобразования, фиксации для данного типа данных, методика EXECUTE не меняется. Т.е. в процессе обращения к словарю при необходимости создается код, который может быть вызван напрямую форт-системой.

gudleifr писал(а):
Обращение к этому словарю устанавливает необходимый контекст, в котором эти слова ищутся и выполняются специфическим для этого файла способом.

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

gudleifr писал(а):
Мой подход - парсерный: при парсировании этого файла создаются слова-оболочки для вызова отдельных кусков кода - в обычном словаре.

дык, у меня тоже "оболочки" создаются, только по мере необходимости, т.е., если я добавил в контекст словарь KERNEL32.DLL, то я могу вызвать любую функцию по ее имени, однако, в пространство кода и данных будут добавляться только вызываемые функции (а не все!).

gudleifr писал(а):
Преимущество словарного подхода.

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

gudleifr писал(а):
* Слово EXECUTE работает независимо от контекста.

это, я уже сказал, не так, EXECUTE прост, на словари не завязан, а, как и положено, завязан на исполнимые адреса.

gudleifr писал(а):
Я правильно понял?

частично 8)

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: НА ЧТО СПОСОБЕН И НА ЧТО ДОЛЖЕН БЫТЬ СПОСОБЕН FORTH?
СообщениеДобавлено: Пн дек 12, 2011 16:04 
mOleg писал(а):
... файл ... нечто ...
Я по nix-овской привычке все эти "нечто" называю файлами. Однако, я опять запутался. Давай на примерах: вот есть kernel32.dll

При парсерном подходе:

\ доступ к библиотеке:
Z" kernel32.dll" (DLL) CONSTANT KERNEL32 \ (DLL) - вызов LoadLibrary, соответственно, (FUNCTION) - вызов GetProcAddress
: [DLL] ( <слово> --)
CREATE , IMMEDIATE DOES> @ BL WORD COUNT OVER + 0 SWAP C! (FUNCTION) COMPILE LIT , COMPILE CALL ;
\ CALL - слово-оболочка вызова WIN-API-функций
KERNEL32 [DLL] [KERNEL32]

\ доступ к ф-ии:
0 WIN-CONST: APPINST [KERNEL32] GetModuleHandleA WIN-CONST;

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

А что происходит при словарном подходе?
Что я получу, если выполню

ALSO KERNEL32.DLL
' GetModuleHandleA


Последний раз редактировалось gudleifr Пн дек 12, 2011 16:17, всего редактировалось 1 раз.

Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: НА ЧТО СПОСОБЕН И НА ЧТО ДОЛЖЕН БЫТЬ СПОСОБЕН FORTH?
СообщениеДобавлено: Пн дек 12, 2011 16:24 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 4997
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 20 раз.
Поблагодарили: 58 раз.
gudleifr писал(а):
Я по nix-овской привычке все эти "нечто" называю файлами. Однако, я опять запутался. Давай на примерах: вот есть kernel32.dll

да, nix-ы приходят к тому же: начинают все строить от файловой системы. Для форта файловая система - это словно - словарная структура.

gudleifr писал(а):
А что происходит при словарном подходе?Что я получу, если выполнюALSO KERNEL32.DLL' GetModuleHandleA

исполнимый адрес GetModuleHandleA
Собственно, можешь сам это проверить в форке 8)
Однако, в статическом словаре форт-системы появится обертка к этому вызову, необходимая для связывания АРI шного кода (инициализация, вызов) данной ф-ции.

код можно посмотреть в vocs/ dllvoc.fts
монтирование словаря:
Код:
\ метод инициализации dll-ки
: mount-dll ( vid --> )
            DUP >L off_specific @ UA@ IF LDROP ;THEN \ если уже инициализирован
                 L@ off_vname A@ ID>ASC ?libaddr \ нашли базовый адрес dll
            *IF &vinit  L@ off_vflags B!         \ установлен только флаг init
                 L@ off_specific @ UA!           \ сохранили базовый адрес
                LDROP
            ;THEN
            ERROR" Не могу подключить dll библиотеку!" ;

структура, необходимая для связывания API- функции с вызывающим кодом:
Код:
\ добавить в текущее определение вызов указанной API
: +APIA ( dllZ asc # --> addr )
       BOX{ HERE >L /winrec ALLOT
            HERE L@ off_funname A!  S, 0 B,
                 L@ off_libname A!
                 L@ WINAPLINK >List
                 L> @API
       }BOX COMPILE off_winproc COMPILE A@ ;

ну и так далее, там достаточно прозрачно описано.

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: НА ЧТО СПОСОБЕН И НА ЧТО ДОЛЖЕН БЫТЬ СПОСОБЕН FORTH?
СообщениеДобавлено: Пн дек 12, 2011 16:29 
mOleg писал(а):
исполнимый адрес GetModuleHandleA

Адрес WIN-функции или адрес слова-оболочки?


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: НА ЧТО СПОСОБЕН И НА ЧТО ДОЛЖЕН БЫТЬ СПОСОБЕН FORTH?
СообщениеДобавлено: Пн дек 12, 2011 16:32 
Не в сети
Moderator
Moderator
Аватара пользователя

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

да

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: НА ЧТО СПОСОБЕН И НА ЧТО ДОЛЖЕН БЫТЬ СПОСОБЕН FORTH?
СообщениеДобавлено: Пн дек 12, 2011 16:46 
mOleg писал(а):
да

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


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: НА ЧТО СПОСОБЕН И НА ЧТО ДОЛЖЕН БЫТЬ СПОСОБЕН FORTH?
СообщениеДобавлено: Пн дек 12, 2011 17:20 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 4997
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 20 раз.
Поблагодарили: 58 раз.
gudleifr писал(а):
Ну, тогда я не понял, зачем вообще нужны особые словари, если им в параллель создаются обычные слова-оболочки, которые можно разместить и в обычных словарях.

кстати, я таки соврамши чуток:
Код:
\ а если простой вызов, то что-либо куда либо компилировать не нужно
\ и достаточно выяснить адрес ф-ции, и передать на него управление!
: RUNAPI ( --> )
         dllz
         apiz api#
         >ASCIIZ SWAP ApiAddr *IF API-CALL ;THEN
         ERROR" Не могу вызвать указанную функцию!" ;

то есть, таки возможен вызов без добавления.

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

1) не засоряется пространство имен (слишком много слов в словаре плохо, а имена апи виндошной ужасны).
2) упрощается синтаксис, т.е. проще работать.
3) вызов апи - это лишь частный случай использования словаря.

gudleifr писал(а):
С тем же успехом можно все считать потоками? Или словами

Как раз последнее, все считается Словами, точнее определениями.

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

мысль не уловил, поясните.

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

Тоже не понятно, что есть ассоциативная связь?

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: НА ЧТО СПОСОБЕН И НА ЧТО ДОЛЖЕН БЫТЬ СПОСОБЕН FORTH?
СообщениеДобавлено: Пн дек 12, 2011 17:41 
mOleg писал(а):
1) не засоряется пространство имен (слишком много слов в словаре плохо, а имена апи виндошной ужасны)
Перефразируя Холмса: "Каждый сам решает, чем засорять свое пространство имен". По мне, так хорошее слово-оболочка (с приличным именем) вполне может спрятать пару-тройку связанных между собой API-вызовов.
mOleg писал(а):
2) упрощается синтаксис, т.е. проще работать.
А в Forth есть синтаксис?
mOleg писал(а):
3) вызов апи - это лишь частный случай использования словаря.
А в других случаях применение особого словаря видится еще менее естественным.
mOleg писал(а):
мысль [словарь - лишь адресный указатель в каком-либо подмножестве слов] не уловил

Допустим есть обычный Forth-словарь. Кто мешает, поверх него, на то же множество слов, положить словари "слов начинающихся на @", "слов похожих на ...", "слов, которые недостойны считаться словами по мнению коллеги chess", "слов, которые я часто забываю"...
mOleg писал(а):
Тоже не понятно, что есть ассоциативная связь?
Т.е. "выполнение" каждого слова делает более вероятным выполнение как-то связанных с ним слов: "сказал А - скажи и Б", "переходишь улицу - посмотри налево", "поставили елку - готовься к сессии" (устар.). Например, если ткнул пальцем в горячую плиту - словарь временно ограничивается всего двумя словами: "орать" и "прыгать".


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

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


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

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


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

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