Есть ли примеры для языков программирования, поддерживающих автоматическое управление ресурсами помимо памяти? - PullRequest
1 голос
/ 29 января 2009

Идея автоматического управления памятью получила большую поддержку с новыми языками программирования. Мне интересно, существуют ли концепции для автоматического управления другими ресурсами, такими как файлы, сетевые сокеты и т. Д .?

Ответы [ 3 ]

5 голосов
/ 29 января 2009

Для однопоточных приложений шаблон ресурса, доступного для блока кода, с очисткой в ​​конце, существует на нескольких языках. Примерами являются использование RAII в C ++ или with-open-file в Common Lisp (и эквивалент в новых языках, подверженных влиянию Lisp - то же самое в Dylan, C # , Python и в Ruby вы можете передать блок объекту файла).

Я не знаю ничего лучше, подходящего для многопоточных сред, где блестит современная сборка мусора, если не считать объединения RAII и подсчета ссылок или auto_ptr в C ++, что не всегда является тривиальной комбинацией.

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

1 голос
/ 29 января 2009

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

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

Если у вас есть функция, позволяющая получить страницу по ее URL-адресу, сочтете ли вы это своего рода автоматическим управлением сокетами?

1 голос
/ 29 января 2009

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

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

Других ресурсов, таких как файловые дескрипторы и сокеты, гораздо меньше, и их все же нужно обрабатывать вручную (каламбур).

Рассмотрим также компактную среду .net. Нередко для мобильных устройств Windows бывает 32 МБ или 64 МБ энергозависимой памяти, с которой, если подумать, все еще много.

Мне интересно, что такое компактный каркас .net и как он будет работать на телефоне Nokia с 4 МБ энергозависимой памяти.

У кого-нибудь есть идеи? (Это ответ в вики, не стесняйтесь исправлять или добавлять более подробную информацию)

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

...