OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Понедельник, 29 Апрель, 2024 11:37

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 50 ]  На страницу Пред.  1, 2, 3  След.
Автор Сообщение
 Заголовок сообщения: Re: Blackbox on OpenSolaris or Linux?
СообщениеДобавлено: Вторник, 03 Ноябрь, 2009 12:13 
Аватара пользователя

Зарегистрирован: Среда, 29 Март, 2006 12:09
Сообщения: 495
Илья Ермаков писал(а):
Димыч писал(а):
...

Вот в таких случаях (системных) я ставлю экспорт только на чтение, а устанавливаю значение через Kernel.ThisObject + SYSTEM.PUT.

Можно пример?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Blackbox on OpenSolaris or Linux?
СообщениеДобавлено: Вторник, 03 Ноябрь, 2009 12:17 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Вот пример:

Код:
MODULE Kernel;
....

VAR
baseStack-: INTEGER


Какой-нить другой модуль:
Код:
SYSTEM.GETREG(4, sp);
SYSTEM.PUT(SYSTEM.ADR(Kernel.baseStack), sp);


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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: конкурс
СообщениеДобавлено: Вторник, 03 Ноябрь, 2009 12:54 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
Димыч писал(а):
Info21 писал(а):
Задачка. Придумать механизм, эквивалентный сказанному ограниченному импорту (см. посты), оставаясь внутри ББ.
... Можно так:
Условие задачки подразумевает, что Блэкбокс менять нельзя. SYSTEM тоже плохо.

Anyone?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: конкурс
СообщениеДобавлено: Вторник, 03 Ноябрь, 2009 13:22 
Аватара пользователя

Зарегистрирован: Среда, 29 Март, 2006 12:09
Сообщения: 495
Info21 писал(а):
Димыч писал(а):
Info21 писал(а):
Задачка. Придумать механизм, эквивалентный сказанному ограниченному импорту (см. посты), оставаясь внутри ББ.
... Можно так:
Условие задачки подразумевает, что Блэкбокс менять нельзя. SYSTEM тоже плохо.

Anyone?

Set/Get процедуры?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Blackbox on OpenSolaris or Linux?
СообщениеДобавлено: Вторник, 03 Ноябрь, 2009 14:04 

Зарегистрирован: Понедельник, 30 Июль, 2007 10:53
Сообщения: 1538
Откуда: Беларусь, Минск
Импорт?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: конкурс
СообщениеДобавлено: Вторник, 03 Ноябрь, 2009 14:21 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 10:37
Сообщения: 875
Откуда: Россия, Владивосток
Info21 писал(а):
Условие задачки подразумевает, что Блэкбокс менять нельзя. SYSTEM тоже плохо.

Anyone?

Совсем нельзя, или компилятор и загрузчик всё-таки можно (с сохранением языка и интерфейсов)?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: конкурс
СообщениеДобавлено: Вторник, 03 Ноябрь, 2009 14:45 

Зарегистрирован: Вторник, 13 Ноябрь, 2007 20:38
Сообщения: 1056
Info21 писал(а):
igor писал(а):
Что касается ограниченного импорта, то мне тоже его не хватает :) . Но ввести его возможно только на уровне языка.
Задачка. Придумать механизм, эквивалентный сказанному ограниченному импорту (см. посты), оставаясь внутри ББ.
В чём, собственно, ограничение? В том, чтобы разрешить изменение переменной только модулю реализации, а всем остальным запретить. Но в КП нет ни абстрактных модулей, ни модулей реализации, ни прикладных модулей и т. д. Все модули равноправны (просто "модули") и связаны только отношениями импорта/экспорта (в той же Модуле-2, например, это не совсем так). Вобщем, у меня ответ пока остаётся тот же: задачка нерешабельна без изменения языка. Те же Get/Set-процедуры, которые предложил Димыч, каким образом будут разруливать ситуацию, какой такой модуль пытается изменить переменную? Ведь все модули равноправны, с точки зрения языка! Чудо можно было бы явить, используя метапрограммирование, как предложил Илья, но из примера явствует, что без SYSTEM пока никак. К тому же, я считаю, что хорошим стилем является использование метапрограммирования исключительно для целей отладки. Хотя, не настаиваю на этом.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: конкурс
СообщениеДобавлено: Вторник, 03 Ноябрь, 2009 15:35 

Зарегистрирован: Понедельник, 30 Июль, 2007 10:53
Сообщения: 1538
Откуда: Беларусь, Минск
igor писал(а):
Вобщем, у меня ответ пока остаётся тот же: задачка нерешабельна без изменения языка.
У меня есть идейка, но её нужно додумать. Впрочем, если она и будет работать, то всё равно костыль. Единственный плюс - без изменения языка и каркаса.
P.S. Это, конечно же, касается вновь создаваемых модулей. Уже созданных и являющихся частью каркаса таким способом не ограничить.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Blackbox on OpenSolaris or Linux?
СообщениеДобавлено: Вторник, 03 Ноябрь, 2009 18:11 
Аватара пользователя

Зарегистрирован: Среда, 29 Март, 2006 12:09
Сообщения: 495
…барабанная дробь…

та-да-да-дам!

"А теперь внимание! Правильный ответ!" (с)

:)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Blackbox on OpenSolaris or Linux?
СообщениеДобавлено: Вторник, 03 Ноябрь, 2009 22:31 

Зарегистрирован: Вторник, 29 Ноябрь, 2005 21:41
Сообщения: 1030
igor писал(а):
Кстати, об этом и был спор: прав ли компилятор, что поступает именно так, а не генерит код самостоятельно?
Так и генерирует.
igor писал(а):
Нельзя всё сваливать в одну кучу.
Кто такое предлагал?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Blackbox on OpenSolaris or Linux?
СообщениеДобавлено: Вторник, 03 Ноябрь, 2009 23:57 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
Димыч писал(а):
…барабанная дробь… ... :)
Устал барабанщик? :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Blackbox on OpenSolaris or Linux?
СообщениеДобавлено: Среда, 04 Ноябрь, 2009 14:31 

Зарегистрирован: Вторник, 29 Ноябрь, 2005 21:41
Сообщения: 1030
Среди знатоков "Что? Где? Когда?" нет барабанщиков. А вот пианисты были, по-моему.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Blackbox on OpenSolaris or Linux?
СообщениеДобавлено: Среда, 04 Ноябрь, 2009 18:48 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
Сергей Оборотов писал(а):
Среди знатоков "Что? Где? Когда?" нет барабанщиков. А вот пианисты были, по-моему.
Да, есть много свидетельств, что занятия музыкой развивает мозг. В том числе у детей (3-4-5-6-7) через мелкую моторику.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Blackbox on OpenSolaris or Linux?
СообщениеДобавлено: Четверг, 05 Ноябрь, 2009 00:40 

Зарегистрирован: Понедельник, 30 Июль, 2007 10:53
Сообщения: 1538
Откуда: Беларусь, Минск
По задаче.

Надо, чтобы импорт заданного модуля был ограничен. То есть, надо чтобы не любой модуль мог импортировать модуль с ограничением. Или иначе - чтобы при компиляции "запрещённого" исходного кода выдавалась ошибка периода компиляции. Если ограничивать модуль на импорт, то требуется решить вопрос о том, какие модули могут его импортировать, а какие - нет, но об этом позже.

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

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

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

В случае реализации специального функционала на отдельном уровне возможен как минимум следующий вариант:
1. Реализуется модуль, аналог Config, содержащий идентификатор "ограниченного" и список модулей для него. "Ограниченный" импортирует его для получения списка разрешённых модулей. Протокол может иметь вид как для предыдущего случая.

Ошибка периода исполнения. У окна трапа имеется заголовок, сообщающий причину возникновения ошибки. Полезно будет иметь заголовок вида "Запрещён доступ к импортируемому модулю".


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Blackbox on OpenSolaris or Linux?
СообщениеДобавлено: Четверг, 05 Ноябрь, 2009 07:24 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
В принципе, можно прошить работу с таблицами допустимого экспорта и HALT в случае недопустимого в модуль-загрузчик (StdLoader).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Blackbox on OpenSolaris or Linux?
СообщениеДобавлено: Четверг, 05 Ноябрь, 2009 09:41 

Зарегистрирован: Вторник, 13 Ноябрь, 2007 20:38
Сообщения: 1056
Valery Solovey писал(а):
Каким способом пресекать попытки использовать "запрещённый" функционал? Я долго на эту тему не думал и взял первый попавшийся способ: ошибка периода исполнения (т.е., трап).
А каким образом мы обоснуем трап перед пользователем? Формально он ничего не нарушал. Импортировал переменную, доступную для записи, переписал её, ибац (С) - трап!

Кстати, у меня идея. Нужно не пытаться ограничить права всех остальных модулей. А наоборот, расширить права одного только модуля реализации, чтобы он мог писать в переменную только для чтения :wink: . А вот как это сделать с учётом всех наших жёстких ограничений, не представляю :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Blackbox on OpenSolaris or Linux?
СообщениеДобавлено: Четверг, 05 Ноябрь, 2009 10:49 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
Ну вот, уже что-то похожее на решение наклевывается.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Blackbox on OpenSolaris or Linux?
СообщениеДобавлено: Четверг, 05 Ноябрь, 2009 11:06 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
А зачем тут придумывать общее решение?

Когда будет ясно, чего нужно, можно конкретный разъём-хук и сделать.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Blackbox on OpenSolaris or Linux?
СообщениеДобавлено: Четверг, 05 Ноябрь, 2009 11:15 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
Илья Ермаков писал(а):
Когда будет ясно, чего нужно, можно конкретный разъём-хук и сделать.
Но надо же понять, что это за хук, и куда его вделывать.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Blackbox on OpenSolaris or Linux?
СообщениеДобавлено: Четверг, 05 Ноябрь, 2009 11:19 

Зарегистрирован: Понедельник, 30 Июль, 2007 10:53
Сообщения: 1538
Откуда: Беларусь, Минск
igor писал(а):
чтобы он мог писать в переменную только для чтения
Дело не в том, что можно писать в переменную, а в том, что у модуля есть процедуры, и надо ограничить доступ к их использованию.


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

Часовой пояс: UTC + 3 часа


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

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


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

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2024, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB