Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Видимо, DaylightIsBurning имел в виду, что под следующее описание из статьи
Но простой умный указатель — это не есть хорошо, т.к. агент B не будет удален (а значит и не будут освобождены ресурсы, которыми он владеет) пока у агента A есть умный указатель на агента B. Следовательно, нам в C++ пришлось бы использовать не просто умные указатели, а некие специальные умные прокси-ссылки. Агент А может иметь прокси-ссылку на B, но при этом B может быть безопасно удален не смотря на то, что прокси-ссылка у A продолжает оставаться.
хорошо подходит std::weak_ptr
.
Причем A может попытаться отослать сообщение уже несуществующему агенту B и эта попытка не должна приводить к катастрофическим последствиям
Если коректно проверять weak_ptr
перед использованием, то не приведёт.
Повторюсь: и?
И ничего.
Или где-то утверждалось, что weak_ptr
не может быть такой прокси-ссылкой?
Или где-то утверждалось, что может?
И ничего.Ну вот в том-то и дело, что ничего.
Или где-то утверждалось, что может?Утверждалось, что есть две проблемы. И если для решения одной weak_ptr может применяться, то что со второй?
Но если проблема решается слабыми указателями, то почему она упоминается?Еще раз: какая проблема решается?
А вторую проблему, на первый взгляд, логичней решать создавая специальный актор-повторитель один ко многим и т.п.Ну решите ее с учетом того, что единственным механизмом взаимодействия акторов является асинхронный обмен сообщениями. Который, в принципе не надежен. Может вам понравится ваша реализация подписки/отписки для broadcasting actor-а исключительно на асинхронных сообщениях.
Странно, лично мне очевидно, что реплика "weak_ptr же" сразу после цитаты "Следовательно, нам в C++ пришлось бы использовать не просто умные указатели, а некие специальные умные прокси-ссылки." как раз и означает вопрос "Почему weak_ptr не использовался в качестве прокси-ссылки на агента?"
что Вы объясняете, почему ваш подход лучше, чем сырые указателиНет, такой цели не было. Была цель обрисовать условия, находясь в которых мы, в итоге, пришли к идее mbox-ов.
В то время как было бы интересно почитать, чем ваша реализация отличается weak_ptr и почему.Так мы в конце-концов вообще ушли от того, чтобы акторы хранили ссылки друг на друга (тогда как другие фреймворки в этом плане следуют классической Модели Акторов). Вместо этого мы ввели дополнительный слой абстракции: почтовые ящики. У нас получается, что акторы для общения друг с другом должны использовать дополнительную сущность — mbox. Нет mbox-а — значит нет возможности общаться.
Почтовые ящики, которые и не ящики вовсе…