Forth http://www.fforum.winglion.ru/ |
|
о природе слов и словарей http://www.fforum.winglion.ru/viewtopic.php?f=25&t=2784 |
Страница 1 из 5 |
Автор: | mOleg [ Чт дек 08, 2011 16:09 ] |
Заголовок сообщения: | о природе слов и словарей |
gudleifr писал(а): Пока мне непонятно: если механизм вызова слов одинаков, то зачем нужны умные словари, а если разный - то полетит схема наследования словарей. Впрочем, для целевой компиляции подход полезный. "умные словари" - это не совсем верное название, ведь пересмотрено и изменено устройство и поведение всего форта сразу в большом количестве ээ аспектов: 1) определего главное поле словарной статьи, вся структура словаря перестроена относительно него; 2) пересмотрено понятие флага слова, и работа с флагами пересмотрена; 3) пересмотрен обязательный состав словарной статьи, полностью изменена работа с ее полями; 4) изменен метод поиска имен в словаре и в контексте (т.е. словарях); 5) изменен механизм компиляции определений (сборка, возможная оптимизация); 6) изменен механизм резервирования имеющегося пространства в словаре - и это только на уровне слов внутри привычных статических словарей (впрочем уже любых). На уровне самих словарей так же значительные изменения, которые позволяют использовать привычную в форте методику трансляции текст (т.е. INTERPRET , хотя последний так же изменен). Вобщем я начал описывать устойство всего перечисленного, правда до ума еще не довел. Кстати, что подразумевается под схемой наследования словарей? |
Автор: | gudleifr [ Чт дек 08, 2011 16:17 ] |
Заголовок сообщения: | Re: НА ЧТО СПОСОБЕН И НА ЧТО ДОЛЖЕН БЫТЬ СПОСОБЕН FORTH? |
mOleg писал(а): ... "умные словари" - это не совсем верное название... Вот тут я, в свою очередь, не понял, зачем это надо? mOleg писал(а): Кстати, что подразумевается под схемой наследования словарей? Когда после неудачного поиска в словаре поиск продолжается в словаре, над которым он создан.
|
Автор: | mOleg [ Пт дек 09, 2011 18:08 ] |
Заголовок сообщения: | Re: НА ЧТО СПОСОБЕН И НА ЧТО ДОЛЖЕН БЫТЬ СПОСОБЕН FORTH? |
gudleifr писал(а): mOleg писал(а):Кстати, что подразумевается под схемой наследования словарей?Когда после неудачного поиска в словаре поиск продолжается в словаре, над которым он создан. мне не нравится эта методика работы со словарями, пользуюсь контекстом, поиск ведется только в указанном словаре, поэтому совсем не вижу проблемы. gudleifr писал(а): mOleg писал(а):... "умные словари" - это не совсем верное название...Вот тут я, в свою очередь, не понял, зачем это надо? в первую очередь для того, чтобы иметь возможность работать с разнообразными данными однообразно. Т.е. имеется стандартный интерфейс через который можно взаимодействовать с любыми данными, расположенными в любом месте, хранимыми любым образом. |
Автор: | gudleifr [ Пт дек 09, 2011 18:39 ] |
Заголовок сообщения: | Re: НА ЧТО СПОСОБЕН И НА ЧТО ДОЛЖЕН БЫТЬ СПОСОБЕН FORTH? |
mOleg писал(а): мне не нравится эта методика работы со словарями Зачем же выкидывать хорошую вещь? По-моему, концепция общих и частных случаев вполне человеческая.gudleifr писал(а): Т.е. имеется стандартный интерфейс через который можно взаимодействовать с любыми данными, расположенными в любом месте, хранимыми любым образом. Вспомнил, что это мне напоминает - Btrieve (старенький прибамбасик для работы с базами данных практически произвольного формата)! Однако, все равно не понимаю, что, окромя запросов на чтение данных, может работать в таких условиях? Допустим, имею кусок шитого кода и DLL-библиотеку - каким образом и какую пользу можно извлечь от упаковывания их в объект одного типа?
|
Автор: | mOleg [ Пт дек 09, 2011 20:34 ] |
Заголовок сообщения: | Re: НА ЧТО СПОСОБЕН И НА ЧТО ДОЛЖЕН БЫТЬ СПОСОБЕН FORTH? |
gudleifr писал(а): mOleg писал(а):мне не нравится эта методика работы со словарямиЗачем же выкидывать хорошую вещь? По-моему, концепция общих и частных случаев вполне человеческая. право на жизнь, конечно, имеет, но контекст удобнее. gudleifr писал(а): Однако, все равно не понимаю, что, окромя запросов на чтение данных, может работать в таких условиях? вобщем-то, это тема для другого топика gudleifr писал(а): Допустим, имею кусок шитого кода и DLL-библиотеку - каким образом и какую пользу можно извлечь от упаковывания их в объект одного типа? все зависит и от потребнстей и от фантазий, мне, лично приятно уже то, что можно напрямую без объявления вызывать функции АПИ, или вот такое: ALSO KERNEL32.DLL WORDS |
Автор: | gudleifr [ Пт дек 09, 2011 21:08 ] |
Заголовок сообщения: | Re: НА ЧТО СПОСОБЕН И НА ЧТО ДОЛЖЕН БЫТЬ СПОСОБЕН FORTH? |
mOleg писал(а): ALSO KERNEL32.DLL WORDS Я и говорю, запросы на чтение проходят на "Ура!" А как с выполнением? Все равно надо обвешивать процедурами сохранения/восстановления регистров, загодя приводить свою работу со стеками в соответствие с Windows... Это еще повезло, что Win-32 зафиксировал размер стековых параметров... И все это ради возможности вызывать Win-функции без префикса? Работая над FOBOS, я утвердился в мысли, что простой вызов практически любой API-функции смысла не имеет - обязательно надо поддерживать некий контекст. А раз его все равно нужно писать, то вызов любой Win-фукции встречается в Forth-программе ровно один раз - в слове, поддерживающем контекст. Но, конечно, выглядит красиво. Конечно, я сам виноват, приведя пример файлов (буду называть такие штуки файлами), имеющих практически одинаковый код. Впрочем, если я могу декорировать один вызов под другой, я могу считать "выполнением слова" что угодно, хоть перевод с китайского на финский, лишь бы "выполнялка" лежала в словаре. Тут только возникает вопрос: считать ли это словарем (ведь процедура поиска необходима не всегда, файл может быть исполняемым последовательно)? Или, как я - интерпретировать, добавляя ту информацию, которую удастся выдрать в обычный словарь. |
Автор: | gudleifr [ Вс дек 11, 2011 20:37 ] |
Заголовок сообщения: | Re: НА ЧТО СПОСОБЕН И НА ЧТО ДОЛЖЕН БЫТЬ СПОСОБЕН FORTH? |
mOleg писал(а): ...словари... Я понял это так. Пусть имеется некий файл произвольного формата, содержащий, среди прочей, информацию об именовании его отдельных частей, содержащих исполняемый, в широком смысле, код.Кроме того заданы алгоритмы для извлечения этой информации и способе исполнения этого кода. Постулируется два подхода к ословариванию этого файла. Ваш подход - словарный: создается специальный словарь (в случае разнотипного кода - несколько), инкапсулирующий способ выполнения FIND и EXECUTE (и некоторых других) для данного файла. Обращение к этому словарю устанавливает необходимый контекст, в котором эти слова ищутся и выполняются специфическим для этого файла способом. Мой подход - парсерный: при парсировании этого файла создаются слова-оболочки для вызова отдельных кусков кода - в обычном словаре. Преимущество словарного подхода. * Не требуется никакая подготовительная работа по парсированию для файлов уже известных типов. Нужно только создать новый словарь. В случае необходимости он выдаст все, что нам потребуется: список всех слов под, доступ к их коду... * Слова имеют свои исконные имена, не нужно придумывать новые имена для слов-оболочек. * Автоматически получаем доступ ко всем словам файла, без необходимости выдергивать их по мере надобности. * Возможно заранее создать некую межсловарную базу данных для облегчения работы с файлами данного типа (константы, парадигмы, связывание), спрятанную от остальной программы в слове создания словарей этого типа. Преимущества парсерного подхода: * Возможно выдергивание только тех слов, которые нам нужны без накладных расходов на поддержание отдельного словаря. * При создании слов-оболочек можно засунуть в них необходимые для вызова кода контекстные зависимости (передача значений по умолчанию, получение идентификаторов текущих объектов, вызовы функций поддержки). * Слово EXECUTE работает независимо от контекста. Т.е. Я могу получить адрес слова обращения к нужному участку кода и вызвать его потом из любого места программы, без необходимости помнить, из какого словаря оно взято. (При словарном методе нужно вместо адреса кода подставлять адрес соответсвующего слова-оболочки словаря, но это, по сути, будет повторение работы сделанной изначально при парсерном методе.) Я правильно понял? |
Автор: | mOleg [ Пн дек 12, 2011 15:19 ] |
Заголовок сообщения: | Re: НА ЧТО СПОСОБЕН И НА ЧТО ДОЛЖЕН БЫТЬ СПОСОБЕН FORTH? |
gudleifr писал(а): л(а):...словари...Я понял это так. Пусть имеется некий файл произвольного формата, содержащий, среди прочей, информацию об именовании его отдельных частей, содержащих исполняемый, в широком смысле, код.Кроме того заданы алгоритмы для извлечения этой информации и способе исполнения этого кода. Постулируется два подхода к ословариванию этого файла.Ваш подход - словарный: создается специальный словарь (в случае разнотипного кода - несколько), инкапсулирующий способ выполнения FIND и EXECUTE (и некоторых других) для данного файла. Обращение к этому словарю устанавливает необходимый контекст, в котором эти слова ищутся и выполняются специфическим для этого файла способом. типа того, только: gudleifr писал(а): имеется некий файл произвольного формата, содержащий, среди прочей, информацию об именовании его отдельных частей имеется нечто (файл, поток, некая абстракция, набор неперечислимых данных, вобщем чего угодно) позволяющее обращаться к себе через имя (т.е. некий ключ быть должен). gudleifr писал(а): Кроме того заданы алгоритмы для извлечения этой информации и способе исполнения этого кода. Методики преобразования запроса (ключ) и генерирования результата реализованы, соответственно внутри системы. Собственно, получается некий драйвер устройства, к которому мы обращаемся привычным нам образом. gudleifr писал(а): создается специальный словарь (в случае разнотипного кода - несколько), инкапсулирующий способ выполнения FIND и EXECUTE (и некоторых других) для данного файла. Не совсем так, скрывается методика поиска, преобразования, фиксации для данного типа данных, методика EXECUTE не меняется. Т.е. в процессе обращения к словарю при необходимости создается код, который может быть вызван напрямую форт-системой. gudleifr писал(а): Обращение к этому словарю устанавливает необходимый контекст, в котором эти слова ищутся и выполняются специфическим для этого файла способом. Обращение к такому словарю производится таким же образом, как к обычному слову, т.е. по имени. В случае упоминания имени словаря в контекст добавляется, как вы сказали "фокус", на его содержимое. Самим же фокусом можно управлять привычным образом, прямо задавая порядок поиска в словарях. gudleifr писал(а): Мой подход - парсерный: при парсировании этого файла создаются слова-оболочки для вызова отдельных кусков кода - в обычном словаре. дык, у меня тоже "оболочки" создаются, только по мере необходимости, т.е., если я добавил в контекст словарь KERNEL32.DLL, то я могу вызвать любую функцию по ее имени, однако, в пространство кода и данных будут добавляться только вызываемые функции (а не все!). gudleifr писал(а): Преимущество словарного подхода. для меня самое главное, что создав такой механизм можно однообразно работать с любыми необходимыми данными. gudleifr писал(а): * Слово EXECUTE работает независимо от контекста. это, я уже сказал, не так, EXECUTE прост, на словари не завязан, а, как и положено, завязан на исполнимые адреса. gudleifr писал(а): Я правильно понял? частично |
Автор: | gudleifr [ Пн дек 12, 2011 16:04 ] |
Заголовок сообщения: | Re: НА ЧТО СПОСОБЕН И НА ЧТО ДОЛЖЕН БЫТЬ СПОСОБЕН FORTH? |
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 |
Автор: | mOleg [ Пн дек 12, 2011 16:24 ] |
Заголовок сообщения: | Re: НА ЧТО СПОСОБЕН И НА ЧТО ДОЛЖЕН БЫТЬ СПОСОБЕН FORTH? |
gudleifr писал(а): Я по nix-овской привычке все эти "нечто" называю файлами. Однако, я опять запутался. Давай на примерах: вот есть kernel32.dll да, nix-ы приходят к тому же: начинают все строить от файловой системы. Для форта файловая система - это словно - словарная структура. gudleifr писал(а): А что происходит при словарном подходе?Что я получу, если выполнюALSO KERNEL32.DLL' GetModuleHandleA исполнимый адрес GetModuleHandleA Собственно, можешь сам это проверить в форке Однако, в статическом словаре форт-системы появится обертка к этому вызову, необходимая для связывания АР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@ ; ну и так далее, там достаточно прозрачно описано. |
Автор: | gudleifr [ Пн дек 12, 2011 16:29 ] |
Заголовок сообщения: | Re: НА ЧТО СПОСОБЕН И НА ЧТО ДОЛЖЕН БЫТЬ СПОСОБЕН FORTH? |
mOleg писал(а): исполнимый адрес GetModuleHandleA Адрес WIN-функции или адрес слова-оболочки? |
Автор: | mOleg [ Пн дек 12, 2011 16:32 ] |
Заголовок сообщения: | Re: НА ЧТО СПОСОБЕН И НА ЧТО ДОЛЖЕН БЫТЬ СПОСОБЕН FORTH? |
gudleifr писал(а): адрес слова-оболочки? да |
Автор: | gudleifr [ Пн дек 12, 2011 16:46 ] |
Заголовок сообщения: | Re: НА ЧТО СПОСОБЕН И НА ЧТО ДОЛЖЕН БЫТЬ СПОСОБЕН FORTH? |
mOleg писал(а): да Ну, тогда я не понял, зачем вообще нужны особые словари, если им в параллель создаются обычные слова-оболочки, которые можно разместить и в обычных словарях. Считать словарем все на свете? С тем же успехом можно все считать потоками? Или словами (а словарь - лишь адресный указатель в каком-либо подмножестве слов, причем, такие словари могут пересекаться)? Мне, наоборот, кажется, что по мере продвижения вверх роль словарей будет уменьшатся, уступая место ассоциативной связи между словами. |
Автор: | mOleg [ Пн дек 12, 2011 17:20 ] |
Заголовок сообщения: | Re: НА ЧТО СПОСОБЕН И НА ЧТО ДОЛЖЕН БЫТЬ СПОСОБЕН FORTH? |
gudleifr писал(а): Ну, тогда я не понял, зачем вообще нужны особые словари, если им в параллель создаются обычные слова-оболочки, которые можно разместить и в обычных словарях. кстати, я таки соврамши чуток: Код: \ а если простой вызов, то что-либо куда либо компилировать не нужно \ и достаточно выяснить адрес ф-ции, и передать на него управление! : RUNAPI ( --> ) dllz apiz api# >ASCIIZ SWAP ApiAddr *IF API-CALL ;THEN ERROR" Не могу вызвать указанную функцию!" ; то есть, таки возможен вызов без добавления. gudleifr писал(а): зачем вообще нужны особые словари, если им в параллель создаются обычные слова-оболочки, которые можно разместить и в обычных словарях. 1) не засоряется пространство имен (слишком много слов в словаре плохо, а имена апи виндошной ужасны). 2) упрощается синтаксис, т.е. проще работать. 3) вызов апи - это лишь частный случай использования словаря. gudleifr писал(а): С тем же успехом можно все считать потоками? Или словами Как раз последнее, все считается Словами, точнее определениями. gudleifr писал(а): (а словарь - лишь адресный указатель в каком-либо подмножестве слов, причем, такие словари могут пересекаться)? мысль не уловил, поясните. gudleifr писал(а): Мне, наоборот, кажется, что по мере продвижения вверх роль словарей будет уменьшатся, уступая место ассоциативной связи между словами. Тоже не понятно, что есть ассоциативная связь? |
Автор: | gudleifr [ Пн дек 12, 2011 17:41 ] |
Заголовок сообщения: | Re: НА ЧТО СПОСОБЕН И НА ЧТО ДОЛЖЕН БЫТЬ СПОСОБЕН FORTH? |
mOleg писал(а): 1) не засоряется пространство имен (слишком много слов в словаре плохо, а имена апи виндошной ужасны) Перефразируя Холмса: "Каждый сам решает, чем засорять свое пространство имен". По мне, так хорошее слово-оболочка (с приличным именем) вполне может спрятать пару-тройку связанных между собой API-вызовов.mOleg писал(а): 2) упрощается синтаксис, т.е. проще работать. А в Forth есть синтаксис?mOleg писал(а): 3) вызов апи - это лишь частный случай использования словаря. А в других случаях применение особого словаря видится еще менее естественным.mOleg писал(а): мысль [словарь - лишь адресный указатель в каком-либо подмножестве слов] не уловил Допустим есть обычный Forth-словарь. Кто мешает, поверх него, на то же множество слов, положить словари "слов начинающихся на @", "слов похожих на ...", "слов, которые недостойны считаться словами по мнению коллеги chess", "слов, которые я часто забываю"... mOleg писал(а): Тоже не понятно, что есть ассоциативная связь? Т.е. "выполнение" каждого слова делает более вероятным выполнение как-то связанных с ним слов: "сказал А - скажи и Б", "переходишь улицу - посмотри налево", "поставили елку - готовься к сессии" (устар.). Например, если ткнул пальцем в горячую плиту - словарь временно ограничивается всего двумя словами: "орать" и "прыгать".
|
Страница 1 из 5 | Часовой пояс: UTC + 3 часа [ Летнее время ] |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |