Rambler's Top100
"Knowledge itself is power"
F.Bacon
Поиск | Карта сайта | Помощь | О проекте | ТТХ  
 Базарная площадь
  
О разделе

Основная страница

Группы обсуждений


Тематический каталог обсуждений

Архив

 
 К н и г и
 
Книжная полка
 
 
Библиотека
 
  
  
 


Поиск
 
Поиск по КС
Поиск в статьях
Яndex© + Google©
Поиск книг

 
  
Тематический каталог
Все манускрипты

 
  
Карта VCL
ОШИБКИ
Сообщения системы

 
Форумы
 
Круглый стол
Новые вопросы

 
  
Базарная площадь
Городская площадь

 
   
С Л С

 
Летопись
 
Королевские Хроники
Рыцарский Зал
Глас народа!

 
  
ТТХ
Конкурсы
Королевская клюква

 
Разделы
 
Hello, World!
Лицей

Квинтана

 
  
Сокровищница
Подземелье Магов
Подводные камни
Свитки

 
  
Школа ОБЕРОНА

 
  
Арсенальная башня
Фолианты
Полигон

 
  
Книга Песка
Дальние земли

 
  
АРХИВЫ

 
 

Сейчас на сайте присутствуют:
 
 
 10:33 inferno
 
 
Во Флориде и в Королевстве сейчас  10:38[Войти] | [Зарегистрироваться]
Обсуждение темы:
Component Pascal и среда разработки BlackBox

Здравствуйте!
Начал изучать новый язык программирования Component Pascal
http://www.oberon.ch/
http://www.inr.ac.ru/~info21/
http://www.uni-vologda.ac.ru/oberon/
Но нигде не нашел рускоязычного сайта, на котором был бы форум посвященный этому языку.
Наверняка среди посетителей этого сайта есть специалисты по языку Component Pascal и среде BlackBox.
А посему, перейду сразу к делу. У меня есть вопрос про сборщик мусора в BlackBox. Может быть кто-нибудь сможет объяснить что нужно сделать чтобы он заработал?
Я имею в виду следующую простейшую тестовую програмку:

MODULE  sgTest003;
IMPORT  StdLog;

PROCEDURE   Проверка*;
  TYPE A = POINTER TO ARRAY 10000000 OF INTEGER;
  VAR a: A;
BEGIN
  StdLog.String(" Создаю "); StdLog.Ln();
  NEW(a);    (* В этом месте я вижу через Windows Task Manager  как BlackBox забрал
память*)
  StdLog.String(" Выхожу из области видимости "); StdLog.Ln();
  a := NIL; (* Я думаю, что сборщик мусора должен активизироваться в этом месте *)
END Do;
(* В этом месте я ожидаю, что BlackBox отдаст память обратно в распоряжение Windows
XP*)

BEGIN
END  sgTest003.
Вызываю процедуру Проверка посредством кликания мышью на
(Коммандер)sgTest003.Проверка
и наблюдаю через Task Manager за памятью. BlackBox ее только забирает и назад не отдает.
Даже если я выгружу модуль Dev ---> Unload, все равно BlackBox не вернет память обратно в распоряжение Windows XP. Память возвращается только когда я выключаю сам BlackBox 1.4 Shareware Edition.
Кто-нибудь понимает в чем дело?

С уважением,

 Сергей Губанов

Количество сообщений на странице

Порядок сортировки сообщений
Новое сообщение вверху списка (сетевая хронология)
Первое сообщение вверху списка (обычная хронология)

Перейти на конкретную страницу по номеру


Всего в теме 117 сообщений

Добавить свое сообщение

Отслеживать это обсуждение

Обсуждение из раздела
Школа ОБЕРОНА

<<<... | 97—88 | 87—78 | 77—68 | ...>>>
Всего сообщений в теме: 117; страниц: 12; текущая страница: 4


№ 87   08-06-2006 05:09 Ответить на это сообщение Ответить на это сообщение с цитированием
Ответ на »сообщение 86« (Андрей Хохлов)
___________________________

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

И как-то уж очень некрасиво сделали модификаторы - запятая перед NEW совсем не к месту.
Так уж повелось в Паскалях. В Турбо и Object. Ничего особо некрасивого, по-моему, нет. Согласуется с правилами русского языка, кстати - определение, стоящее после подлежащего и отделенное длинной фразой. "Объект с именем А, новый"


№ 86   08-06-2006 04:40 Ответить на это сообщение Ответить на это сообщение с цитированием
Еще вопрос. В КП (и O2?) метод может привязываться к записи и указателю на запись. И это можно смешивать:


TYPE
  T = EXTENSIBLE RECORD
    ...
  END;

  P = POINTER TO T;

PROCEDURE*(IN/VAR t: T) P1(), NEW, EXTENSIBLE;
  BEGIN
    StdLog.String ("T1.P1");
    StdLog.Ln()
  END P1;

PROCEDURE*(p: P) P2(), NEW, EXTENSIBLE;
  BEGIN
    StdLog.String ("T1.P2");
    StdLog.Ln()
  END P2;


Какой в этом смысл?

И как-то уж очень некрасиво сделали модификаторы - запятая перед NEW совсем не к месту.


№ 85   08-06-2006 04:12 Ответить на это сообщение Ответить на это сообщение с цитированием
Ответ на »сообщение 82« (AVC)
___________________________

Ответ на »сообщение 81« (Руслан Богатырев)
___________________________
Я и хочу исследовать вопрос: а можно ли гарантировать безопасность выгрузки модулей?
Первоначально этот вопрос для меня возник, когда Сергей Губанов высказал мысль (я, возможно, ее искажаю; поэтому заранее извиняюсь перед Сергеем), что модульной можно называть только такую систему, где можно подменить модуль на лету.

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

Однако идея "адаптивной модульности", когда подмена происходит прозрачно для самой системы - штука интересная. Здесь потребуется, чтобы различные реализации были совместимы "по состоянию" и могли выгружаться/загружаться в перманентный поток. Тогда для замены модуля на лету проделываем: ModuleA.Externalize(memoryStore); Unload(ModuleA); Load(ModuleB); ModuleB.Internalize(memoryStore).
Однако тут проблема не только в процедурных переменных. Экспортированные сущности могут иметь скрытые поля, содержащие указатели на экземпляры неэкспортированных сущностей, которые есть, например, в модуле A, но нет в модуле B. Так что вопрос очень сложный... Тут, видимо, потребуется замена указателей какими-то интеллектуальными прокси-объектами...


№ 84   08-06-2006 03:39 Ответить на это сообщение Ответить на это сообщение с цитированием
Ответ на »сообщение 82« (AVC)
___________________________

Я и хочу исследовать вопрос: а можно ли гарантировать безопасность выгрузки модулей?

Давайте для удобства все же делить модули на языковые (единица компиляции) и операционные (единица загрузки/исполнения).

Каждый модуль (в понимании Оберона/КП) заключает внутри себя некоторые сущности. Эти сущности двух видов: изменяемые (в ходе выполнения; переменные/объекты) и неизменяемые (константы, типы, процедуры). Модули -- это капсулы, но они связаны друг с другом -- прямо или косвенно. Т.е. существуют межмодульные связи как явные (экспорт/импорт), так и неявные (через ресурсы, включая память).

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

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

Задача имеет аналогии со сборкой мусора (памяти). При этом усугубляется задачей подмены. При подмене нужно каким-то образом гарантировать соблюдение контракта/протокола работы зависимых модулей с учетом состояния их изменяемых сущностей.

Вывод: для надежной загрузки/выгрузки модулей необходимо наличие контрактов/протоколов (межмодульных связей) у загрузчика/диспетчера модулей. Но этого недостаточно. Нужен и механизм контроля за соблюдением контрактов.


№ 83   08-06-2006 03:18 Ответить на это сообщение Ответить на это сообщение с цитированием
Ответ на »сообщение 82« (AVC)
___________________________

Опять же возвращаюсь мыслью к введению своеобразного аналога сборки для Оберона.
 AVC


№ 82   08-06-2006 03:13 Ответить на это сообщение Ответить на это сообщение с цитированием
Ответ на »сообщение 81« (Руслан Богатырев)
___________________________


Как выгружать/загружать этот модуль-диспетчер R будем? Экспорта-импорта нет. Значит, помимо запретов процедурных переменных нужна, оказывается, и грамотная финализация? А ведь хотелось бы подменить модуль на лету, т.е. не финализировать, а "приморозить"? Так как же насчет безопасности выгрузки?


Я и хочу исследовать вопрос: а можно ли гарантировать безопасность выгрузки модулей?
Первоначально этот вопрос для меня возник, когда Сергей Губанов высказал мысль (я, возможно, ее искажаю; поэтому заранее извиняюсь перед Сергеем), что модульной можно называть только такую систему, где можно подменить модуль на лету.
Если динамическая загрузка по требованию у меня проблем в понимании не вызвала, то с выгрузкой оказалось гораздо труднее.
Ведь "завязки" между модулями возникают не только через списки импорта, но и через объектные связи (указатели и процедурные переменные), и иными косвенными способами (Вы только что привели хороший пример).
Казалось бы, на выгрузке модулей можно было бы "поставить крест" и успокоиться, но меня беспокоит вопрос: а как тогда будет очищаться память в Оберон-системе, где нет отдельных процессов?
Ведь в конце концов, загруженные модули могут заполнить всю память, а выгрузка опасна.
Что делать? :)
 AVC


№ 81   08-06-2006 02:44 Ответить на это сообщение Ответить на это сообщение с цитированием
Ответ на »сообщение 80« (AVC)
___________________________

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

Простой пример. Есть модуль R, в котором осуществляется заведение (диспетчеризация) некоторых ресурсов (для простоты -- файлы). Эти ресурсы сдаются им в аренду другим модулям (M1, M2 и т.п.). Процесс передачи в аренду может быть различным -- вплоть до опосредованного (т.е. "именное связывание") через некоторый файл (файл m1.ok создан -- значит, можно пользовать (читать/писать) те файлы, чьи имена внутри него указаны).

Как выгружать/загружать этот модуль-диспетчер R будем? Экспорта-импорта нет. Значит, помимо запретов процедурных переменных нужна, оказывается, и грамотная финализация? А ведь хотелось бы подменить модуль на лету, т.е. не финализировать, а "приморозить"? Так как же насчет безопасности выгрузки?

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


№ 80   08-06-2006 02:26 Ответить на это сообщение Ответить на это сообщение с цитированием
Ответ на »сообщение 79« (AVC)
___________________________

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

Кажется, авторы КП на это намекали.
ИМХО, достаточно полное представление о языке (его достоинстве и противоречиях) можно получить только наблюдая его эволюцию.
Поэтому для изучения Оберона наличие разных диалектов и даже отдельных языков семейства дает богатую пищу для размышлений.
(Но затрудняет миграцию исходных кодов -- вопрос, который поднимал здесь Руслан Богатырев.)
 AVC


№ 79   08-06-2006 01:33 Ответить на это сообщение Ответить на это сообщение с цитированием
Ответ на »сообщение 78« (AVC)
___________________________


В принципе согласен, что сборщик мусора мог бы получить такую информацию из дескриптора типа.
Но это, опять же, только в О-2 и КП...


М-да, высказался...
Опять же получается, что я имею в виду только методы. :)
 AVC


№ 78   08-06-2006 01:25 Ответить на это сообщение Ответить на это сообщение с цитированием
Ответ на »сообщение 77« (Trurl)
___________________________


Адреса процедур также хранятся в местах, доступных сборщику мусора.


Я исходил из того, что сборщик мусора имеет дело только с указателями и объектами в куче, а процедурные переменные (даром, что тоже адреса :) ) (обычными) указателями не являются.
В принципе согласен, что сборщик мусора мог бы получить такую информацию из дескриптора типа.
Но это, опять же, только в О-2 и КП...
 AVC


<<<... | 97—88 | 87—78 | 77—68 | ...>>>
Всего сообщений в теме: 117; страниц: 12; текущая страница: 4


Добавить свое сообщение

Отслеживать это обсуждение

Дополнительная навигация:
Количество сообщений на странице

Порядок сортировки сообщений
Новое сообщение вверху списка (сетевая хронология)
Первое сообщение вверху списка (обычная хронология)

Перейти на конкретную страницу по номеру
  
Время на сайте: GMT минус 5 часов

Если вы заметили орфографическую ошибку на этой странице, просто выделите ошибку мышью и нажмите Ctrl+Enter.
Функция может не работать в некоторых версиях броузеров.

Web hosting for this web site provided by DotNetPark (ASP.NET, SharePoint, MS SQL hosting)  
Software for IIS, Hyper-V, MS SQL. Tools for Windows server administrators. Server migration utilities  

 
© При использовании любых материалов «Королевства Delphi» необходимо указывать источник информации. Перепечатка авторских статей возможна только при согласии всех авторов и администрации сайта.
Все используемые на сайте торговые марки являются собственностью их производителей.

Яндекс цитирования