Ada_Ru форум

Обсуждение языка Ада

UI: сборка мусора

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

Сообщения

Vadim Godunko
UI: сборка мусора
2005-08-15 07:50:57

Итак, сборка мусора.

 

На мой взгляд для UI это достаточно полезно. Если не в чистом виде, то по крайней мере, например, в описанном исполнении.

 

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

 

Что это даёт? А то, что даже после уничтожения виждетов очень часто связанная информация остаётся не освобожденной или продолжают сужествовать ссылки на эту информацию. Что рано или поздно приведёт к... нежелательным последствиям.

 

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

 

К тому же так можно реализовать и идею с подменой реализаций, но это будет в следующем письме.

 

 

-- Vadim Godunko

 

Technoserv A/S

Rostov-on-Don, Russia

On Mon, 15 Aug 2005 11:50:57 +0400, Vadim Godunko <godunko@...> wrote:

 

Итак, сборка мусора.

 

На мой взгляд для UI это достаточно полезно. Если не в чистом виде, то

по крайней мере, например, в описанном исполнении.

 

"Ссылкой" на компонент фактически является "умный указатель",

занимающийся подсчётом числа ссылок на структуру данных компонента.

После потери последней ссылки происходит освобождение структуры данных.

Всем известный механизм.

 

 

Сборка мусора со счетчиком ссылок появилась очень давно, еще в 70х.

(кажется smalltalk? Впрочем не важно...)

 

А вот применительно к Аде вопрос интересный - можно ли языку

объяснить правила работы с такими указателями?

 

С точки зрения программирования впринципе понятно - надо чтобы

программист относился к такой ссылке как к самому объекту.

Тоесть если выделил динамически память, то будь добр освободи

ее когда она не нужна. Так-же и тут - надо относиться к такому

указателю будто это копия самого объекта и удалять его когда не нужен.

Если не дебил и пофигист, то больших проблем нет, могут только

остаться опечатки и тп...

 

А теперь интересный философский вопрос :) А можно ли стандартными

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

Например, обычно при выходе из процедуры автоматом освобождается

память из-под локальных переменных. Дак вот, можно ли так описать

тип, чтобы при удалении такого указателя компилятор сам следил

и автоматически корректировал и счетчик ссылок при выходе

из процедуры и удалении такого указателя и тп случаях?..

 

Vladimir

 

-- Using Opera's revolutionary e-mail client: http://www.opera.com/m2/

А вот применительно к Аде вопрос интересный - можно ли языку

объяснить правила работы с такими указателями?

 

Можно. Концепции языка Ада концепция уборки мусора отнюдь не противоречит. Более того, говоря словами Руководства,

 

4.8(27) "Implementations are permitted, but not required, to provide garbage collection"

 

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

 

У AdaCore в частности есть проект это реализовать для GNAT, но он не оплачен конкретным контрактом на разработку, поэтому имеет низкий приоритет.

 

ВФ

Vasiliy Fofanov wrote:

А вот применительно к Аде вопрос интересный - можно ли языку

объяснить правила работы с такими указателями?

 

 

Можно. Концепции языка Ада концепция уборки мусора отнюдь не противоречит.

Более того, говоря словами Руководства,

 

4.8(27) "Implementations are permitted, but not required, to provide garbage collection"

 

Имеется даже специальная прагма Controlled для работы с реализациями языка,

поддерживающими сборку мусора.

 

У AdaCore в частности есть проект это реализовать для GNAT, но он не

оплачен конкретным контрактом на разработку, поэтому имеет низкий

приоритет.

 

Хм... Интересно ;)

 

И что, все ссылочные типы станут таковыми? Или можно будет явно указывать какие должны быть "умными", а какие - нет?

 

-- Vadim Godunko

 

Technoserv A/S

Rostov-on-Don, Russia

Увы, подробностей не знаю, это не мой проект :)

 

И что, все ссылочные типы станут таковыми? Или можно будет явно

указывать какие должны быть "умными", а какие - нет?

 

Ну так это уже вроде стандартом языка предусмотрено, см. упомянутую уже прагму Controlled.

 

ВФ

Vasiliy Fofanov wrote:

 

Ну так это уже вроде стандартом языка предусмотрено, см. упомянутую уже прагму Controlled.

 

Согласен. Это я что-то запутался.

 

--

Vadim Godunko

On Tue, Aug 16, 2005 at 07:29:49PM +0400, Vadim Godunko wrote:

Vasiliy Fofanov wrote:

 

Ну так это уже вроде стандартом языка предусмотрено, см. упомянутую уже прагму Controlled.

 

Согласен. Это я что-то запутался.

 

Имеется ввиду, наверное, Storage_Pool со сборкой мусора.

Есть Open Source реализация, кстати,

на http://adacl.sourceforge.net/

 

--

Maxim Reznik

Maxim Reznik wrote:

On Tue, Aug 16, 2005 at 07:29:49PM +0400, Vadim Godunko wrote:

 

>Vasiliy Fofanov wrote:

 

>Ну так это уже вроде стандартом языка предусмотрено, см. упомянутую уже >прагму Controlled.

 

 

>Согласен. Это я что-то запутался.

 

 

Имеется ввиду, наверное, Storage_Pool со сборкой мусора.

Есть Open Source реализация, кстати,

на http://adacl.sourceforge.net/

 

Тут подвох есть (в котором я и запутался). Согласно стандарту, именно _стандартный_ пул и должен иметь механизм сборки мусора.

 

"Стандартный" адский пул не имеет необходимых операций (там есть только распредление и освобождение).

 

А вот pragma Controlled как раз и отключает использование этого

механизма для стандартного пула.

 

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

Вот только подсчёт ссылок не работает на циклических структурах. :(

 

--

Vadim Godunko

On Tue, 16 Aug 2005 13:09:29 +0400, Vadim Godunko <godunko@...> wrote:

 

Vasiliy Fofanov wrote:

А вот применительно к Аде вопрос интересный - можно ли языку

объяснить правила работы с такими указателями?

 

 

Можно. Концепции языка Ада концепция уборки мусора отнюдь не противоречит.

Более того, говоря словами Руководства,

 

4.8(27) "Implementations are permitted, but not required, to provide garbage collection"

 

Имеется даже специальная прагма Controlled для работы с реализациями языка,

поддерживающими сборку мусора.

 

У AdaCore в частности есть проект это реализовать для GNAT, но он не

оплачен конкретным контрактом на разработку, поэтому имеет низкий

приоритет.

 

Хм... Интересно ;)

 

И что, все ссылочные типы станут таковыми? Или можно будет явно

указывать какие должны быть "умными", а какие - нет?

 

Кстати, философский вопрос :)

 

А ссылки (по названию я как понимаю намек в Аде на "доступ к" вообще,

а не просто адрес) могут содержать только адрес памяти, или это

впринципе можно расширить более широко(теоретически,

ну тоесть идеологически)?

 

А то ведь даже PC имеет несколько пространств адресов ввода-вывода,

как миниум порты ввода-вывода и память... Да и всякие видеопамяти

и регистры CRT впринципе можно так рассматривать...

 

Vladimir

 

-- Using Opera's revolutionary e-mail client: http://www.opera.com/m2/

teplouhov@... wrote:

 

>И что, все ссылочные типы станут таковыми? Или можно будет явно

>указывать какие должны быть "умными", а какие - нет?

 

 

Кстати, философский вопрос :)

 

А ссылки (по названию я как понимаю намек в Аде на "доступ к" вообще, а не просто адрес) могут содержать только адрес памяти, или это

впринципе можно расширить более широко(теоретически,

ну тоесть идеологически)?

 

Могут содержать всё, что угодно. В частности, для распределенной

программы они кроме адреса содержат и номер раздела.

 

 

--

Vadim Godunko

Новое сообщение:
Страницы: 1

Чтобы оставить новое сообщение необходимо Зарегистрироваться и Войти