Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Пт дек 14, 2018 16:07

...
Google Search
Forth-FAQ Spy Grafic

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




Начать новую тему Ответить на тему  [ Сообщений: 48 ]  На страницу Пред.  1, 2, 3, 4  След.
Автор Сообщение
 Заголовок сообщения: Re: обсуждение src4-mc10-b562@24.04.2011
СообщениеДобавлено: Пн авг 15, 2011 20:41 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 4956
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 18 раз.
Поблагодарили: 56 раз.
_Harry писал(а):
mOleg писал(а):
да, недодумано малость, но исправимо, собственно я уже понял, что придется создать словарь-прототип (или как его назвать), который будет оказываться в CURRENT при попытке изменит CURRENT на недопустимый вариант. Другой вариант, класть туда, к примеру FORTH и делать исключение, но лучше ли это?
Ни в коем случае так делать нельзя. Такая автоматика будет источником опасных и трудно определяемых ошибок.

ну, вот, смотри, есть такая ситуация:
в контексте следующие словари: ROOT NUMBERS FORT NUMBERS SOMEVOC
то есть на верху словарь, в который мы что-то добавляем, а под ним словарь, в который нельзя направлять компиляцию.
Обычно, когда словарь становится ненужным, я делаю RECENT - слово делает предыдущий словарь текущим, т.е. выполняет последовательность PREVIOUS DEFINITIONS - просто и удобно, но вызовет ошибку, что неприятно. Ну не всегда хочется думать, какой словарь под верхним (а иногда это вообще не возможно). если есть словарь пустышка, с именем, скажем, NULL , можно его сделать текущим. Ошибка от нас никуда не денется, если, конечно, попытаемся что-то добавить в NULL, но повторный RECENT ситуацию выправит. (проблема не надуманная, уже наталкивался на сию неприятность).

_Harry писал(а):
Какой словарь будет текущим должен определять программист.

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

_Harry писал(а):
Такой вариант вынудит программиста исправить свою ошибку. Чем это хуже .

дык и другой вынудит исправить, только ошибка будет "звучать несколько иначе"
вот набросок:
 vocs/ vocab.fts

ALSO HIDDEN DEFINITIONS

:> 'allot ( ? --> ) ERROR" В данном словаре нельзя резервировать память!" ;
:> 'header ( ? --> ) ERROR" В данном словаре нельзя создавать словарные статьи!" ;
:> 'conclude ( ? --> ) ERROR" В данном словаре нет незавершонных словарных статей!" ;
:> 'attr ( ? --> ) ERROR" В данном словаре нет определений!" ;
:> 'link ( ? --> ) ERROR" Нельзя!" ;
:> 'dp ( ? --> ) ERROR" Не имеет адресного пространства!" ;
:> 'latest ( vid --> ) DROP FALSE ;
:> 'xmount ( vid --> ) DROP ;
:> 'quest ( asc # vid --> 0 | lfa ) TDROP FALSE ;

ALSO ROOT DEFINITIONS \ NULL определим в ROOT

\ создание словаря пустышки
init: VOCABULARY
VOC-LIST A@ >L
&vinit L@ off_vflags B!
'xmount L@ off_umount A!
'xmount L@ off_mount A!
'quest L@ off_quest A!
0 L@ off_temp A!
'attr L@ off_get-attr A!
'link L@ off_linkvoc A!
'latest L@ off_latest A!
1 L@ off_threads# B!
voc-table DUP L>

off_vtable A! >L
'dp L@ off_vdp A!
'allot L@ off_allot A!
'header L@ off_header A!
'conclude L@ off_conclude A!
'attr L@ off_set-attr A!
LDROP
;stop NULL

\ проверка можно ли делать словарь текущим
\ если нет vtable а так же если нет метода allot!
:> 'check-voc ( vid --> vid )
DUP off_vtable A@
*IF off_allot A@ IF ;THEN THEN DDROP
WHO NULL ;

'check-voc IS check-voc

RECENT RECENT

\


_Harry писал(а):
Кстати некорректность работы со словарем по vid это опять же на совести того кто так работает можно ведь и вполне корректно написать

Да можно, но часто лень 8) сам нарывался на такое.

_Harry писал(а):
Учти что все мои рассуждения относятся к словарям в HEAP для которых уже определен метод off_umount вот именно он мне не понравился.

да понятно, но решение требуется сразу для нескольких проблем, в первую очередь, например, есть у нас в контексте такая бяка:
ROOT FORTH WORK NUMBERS WORK
и WORK так же является текущим
и тут я делаю ему UMOUNT
и по-идее должно получиться:
ROOT FORTH NUMBERS
а вот в текущем словаре что должно оказаться?
WORK уже там быть не может!
NUMBERS так же быть там не может!
что делать-то?

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: обсуждение src4-mc10-b562@24.04.2011
СообщениеДобавлено: Пн авг 15, 2011 23:21 
Не в сети
Аватара пользователя

Зарегистрирован: Пт дек 26, 2008 21:16
Сообщения: 407
Откуда: Великий Новгород
Благодарил (а): 9 раз.
Поблагодарили: 3 раз.
mOleg писал(а):
что делать-то?
Ну смешной вопрос :) ...сообщить об ошибке :wink:


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: обсуждение src4-mc10-b562@24.04.2011
СообщениеДобавлено: Вт авг 16, 2011 00:17 
Не в сети
Аватара пользователя

Зарегистрирован: Чт июн 25, 2009 11:12
Сообщения: 412
Благодарил (а): 41 раз.
Поблагодарили: 8 раз.
Запретить удаление словаря, если он в стеке контекста, что ещё.
Стек контекста изменяют только операции втолкнуть/вытолкнуть.
То же самое с CURRENT.
Вот это логично.

Для "вычистки" всех ссылок на словарь (с заменой на что-то) можно придумать отдельное слово.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: обсуждение src4-mc10-b562@24.04.2011
СообщениеДобавлено: Вт авг 16, 2011 15:13 
Не в сети
Moderator
Moderator
Аватара пользователя

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

а мне он не кажется смешным,
Имхо, словарь должен отмонтироваться в любом случае, даже, если он является текущим (или только текущим), хотя это тянет за собой другие проблемы, например, может быть не завершено создание определения (а это точно должна быть ошибка).
Приведу такой пример, под виндой перед извлечением флешки необходимо ее отмонтировать, и часто так бывает, что это не выходит (кто-то ее заблокировал), и необходимо сделать достаточно много действий, чтобы извлечь ее корректно. Я в подавляющем большинстве случаев плюю на корректность, так как обычно важна скорость. А Форт кроме всего прочего все же ближе к системам реального времени 8)

dynamic-wind писал(а):
Запретить удаление словаря, если он в стеке контекста, что ещё.

нет, как раз он должен оттуда удаляться, проблема не с контекстом а с CURRENT

dynamic-wind писал(а):
Стек контекста изменяют только операции втолкнуть/вытолкнуть.

не только, собственно базовыми операциями являются GET-ORDER и SET-ORDER

dynamic-wind писал(а):
Для "вычистки" всех ссылок на словарь (с заменой на что-то) можно придумать отдельное слово.

не проблема:
\ удалить все ссылки из контекста на указанный словарь,
\ если словарь не является текущим
: RMVID ( vid --> )
GET-CURRENT OVER = ABORT" Сначала убери словарь из CURRENT!"
>R
0 GET-ORDER >L
BEGIN *WHILE
DUP R@ = IF DROP -1 L+ ELSE L> D>L THEN
REPEAT DROP RDROP
L> DUP >R BEGIN *WHILE 1 - L> SWAP REPEAT DROP R>
SET-ORDER ;

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: обсуждение src4-mc10-b562@24.04.2011
СообщениеДобавлено: Вт авг 16, 2011 15:35 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 6454
Благодарил (а): 14 раз.
Поблагодарили: 101 раз.
mOleg писал(а):
Приведу такой пример, под виндой перед извлечением флешки необходимо ее отмонтировать, и часто так бывает, что это не выходит (кто-то ее заблокировал), и необходимо сделать достаточно много действий, чтобы извлечь ее корректно.

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: обсуждение src4-mc10-b562@24.04.2011
СообщениеДобавлено: Вт авг 16, 2011 16:47 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 4956
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 18 раз.
Поблагодарили: 56 раз.
Хищник писал(а):
Вот тут можно поподробнее?
....
А что со словарями происходит такого, что их надо отмонтировать?
К примеру, длительная переиндексация в параллельном потоке, без завершения которой содержимое словаря нельзя считать действительной?

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

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: обсуждение src4-mc10-b562@24.04.2011
СообщениеДобавлено: Вт авг 16, 2011 17:17 
Не в сети
Аватара пользователя

Зарегистрирован: Чт июн 25, 2009 11:12
Сообщения: 412
Благодарил (а): 41 раз.
Поблагодарили: 8 раз.
mOleg, может быть такое, что текущий поток не знает, кто и когда удаляет его текущий словарь?
По идее, такого нельзя допускать, логика работы потока нарушится.
Еще вариант: послать потоку асинхронный сигнал СЛОВАРЬ-КИРДЫК. Пусть он сам решает, на что заменить CURRENT. Или умирает.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: обсуждение src4-mc10-b562@24.04.2011
СообщениеДобавлено: Вт авг 16, 2011 18:27 
Не в сети
Moderator
Moderator
Аватара пользователя

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

эхм, все не так.
Вы пишете код, т.е. добавляете определения в текущий (CURRENT) словарь, и у вас есть некий контекст (CONTEXT) где ищутся уже существующие имена, для примера можно взять такое состояние:

CONTEXT: ROOT NUMBERS FORTH PROJECT
CURRENT: PROJECT

т.е. в контексте находится 4 словаря, то есть там, где ищутся определения,
и новые слова добавляются в PROJECT
Да, забыл оговориться, что и текущий словарь и контекст локальны для каждого потока! т.е. не взаимодействуют.
Что понимается под демонтированием словаря? А то, что система больше его не хочет использовать! К примеру, у вас есть динамический словарь, в который вы "сбрасывали" некие промежуточные данные в виде определений, ну, например ассемблер. После того, как вы использовали ассемблер и он стал вам не нужен закономерно желание от него избавиться и освободить память. В таком случае и будет делаться UMOUNT .
Но что делать, если у вас ассемблер упоминается несколько раз, более того в последнее время вы что-то добавляли в этот словарь (но оно уже не нужно!)? Можно, конечно, сделать текущим какой-то любой словарь, к примеру FORTH, даже, если вы не собираетесь туда что либо добавлять, а потом выполнить демонтаж словаря, т.е. освободить занимаемую им память. Кстати, еще один важный момент, никаких ссылок на удаляемый словарь из системы быть не должно.
вобщем как-то так 8)

да, вернемся к нашему PROJECT словарю. В определенный момент нам он перестает быть нужным, и хочется его убрать из контекста и перенаправить компиляцию в другой словарь, в форке это делается с помощью слова RECENT , после его выполнения в контексте останется:
ROOT NUMBERS FORTH
а текущим словарем станет FORTH
все удобно и просто, но, бывает, что вместо FORTH - то есть такого словаря, в который можно добавлять определения под нашим PROJECT лежит словарь, который нельзя делать текущим, причем это не всегда можно предсказать, то есть после законного RECENT выпадает ошибка "словарь нельзя делать текущим" - вобщем неудобно.

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: обсуждение src4-mc10-b562@24.04.2011
СообщениеДобавлено: Вт авг 16, 2011 19:25 
Не в сети

Зарегистрирован: Вт май 09, 2006 12:31
Сообщения: 3438
Благодарил (а): 5 раз.
Поблагодарили: 16 раз.
мне кажется, сложность обращения со словарями уже превосходит сложность ооп для прграммиста - там, по крайней мере, достаточно выучить синтаксис и помнить свой замысел


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: обсуждение src4-mc10-b562@24.04.2011
СообщениеДобавлено: Вт авг 16, 2011 19:59 
Не в сети
Аватара пользователя

Зарегистрирован: Чт июн 25, 2009 11:12
Сообщения: 412
Благодарил (а): 41 раз.
Поблагодарили: 8 раз.
mOleg писал(а):
все удобно и просто, но, бывает, что вместо FORTH - то есть такого словаря, в который можно добавлять определения под нашим PROJECT лежит словарь, который нельзя делать текущим, причем это не всегда можно предсказать, то есть после законного RECENT выпадает ошибка "словарь нельзя делать текущим" - вобщем неудобно.

Ага, врубился. :^) Логика RECENT очень уж простая, в 90% годится, а дальше проблемы.
Пора CURRENT превратить в стек, как сделано с CONTEXTом :idea:


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: обсуждение src4-mc10-b562@24.04.2011
СообщениеДобавлено: Вт авг 16, 2011 20:11 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 4956
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 18 раз.
Поблагодарили: 56 раз.
dynamic-wind писал(а):
Пора CURRENT превратить в стек

гы, уже думалось, не, не катит, будет слишком сложно для восприятия и контроля. А вот положить словарь пустышку в самый раз: если возникнет желание в него что-нибудь скомпилировать, выскочит ошибка (т.е. контроль остается), если же будет пара идущих подряд RECENT , ошибки не будет, поведение предсказуемо, короче все путем 8) плюс, возможность безболезненно делать umount.

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

ню-ню, вы, наверное, в своем компе все складываете в один (корневой каталог), так ведь проще, каталоги (папки) ужасно сложная для понимания вещь - то ли дело ООП.

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: обсуждение src4-mc10-b562@24.04.2011
СообщениеДобавлено: Вт авг 16, 2011 20:18 
Не в сети

Зарегистрирован: Вт май 09, 2006 12:31
Сообщения: 3438
Благодарил (а): 5 раз.
Поблагодарили: 16 раз.
mOleg писал(а):
вы, наверное, в своем компе все складываете в один

нет, разумеется.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: обсуждение src4-mc10-b562@24.04.2011
СообщениеДобавлено: Вт авг 16, 2011 20:44 
Не в сети
Аватара пользователя

Зарегистрирован: Пт дек 26, 2008 21:16
Сообщения: 407
Откуда: Великий Новгород
Благодарил (а): 9 раз.
Поблагодарили: 3 раз.
mOleg писал(а):
"словарь нельзя делать текущим" - вобщем неудобно

Очень неудобно когда ничего не выпадает а ошибка остается. Я уже говорил тебе касательно юнитов что нужно конролировать контекст вот из за твоего любимого RECENT как раз и получаются ошибки которые достаточно трудно обнаруживать так как они проявляются совсем в других местах. Я ни как не пойму чем тебя неустраивает мгновенная реакция на ошибку. Зачем так усложнять все.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: обсуждение src4-mc10-b562@24.04.2011
СообщениеДобавлено: Вт авг 16, 2011 23:30 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 6454
Благодарил (а): 14 раз.
Поблагодарили: 101 раз.
mOleg писал(а):
Собственно словарь в форке может содержать произвольные данные.

Ага... содержать может, а навороты с размонтированием уже сейчас :)


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: обсуждение src4-mc10-b562@24.04.2011
СообщениеДобавлено: Ср авг 17, 2011 10:41 
Не в сети

Зарегистрирован: Вт май 09, 2006 12:31
Сообщения: 3438
Благодарил (а): 5 раз.
Поблагодарили: 16 раз.
_Harry писал(а):
из за твоего любимого RECENT как раз и получаются ошибки которые достаточно трудно обнаруживать
это "получившееся" или "удавшееся" обобщение - новый конструкт языка, если пройдёт проверку практикой, станет "плодотворным"
или потребуется другая идея.


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

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


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

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


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

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