Цитата:
Там как раз идёт усиление гарантий - и в итоге разработчик имеет абстракцию надёжного канала, и уже не должен контролировать корректность передачи данных. Ошибки обрабатываются ниже.
имеются ввиду не те ошибки. ошибки передачи пакетов разумеется не могут выноситься на уровень не только прикладного программирования, но и даже программирования самой оси. они закрыты внутри реализаций протоколов. ошибки в виде разрыва канала связи и его восстановления(если оно произошло в течении некотрого промежутка времени) тоже закрыты в соотв. реализациях протоколов.
имеется ввиду, если уж брать аналогию с tcpip просто отсутствие данного ip адреса. и недостаточной реальной гарантированности посылки мессаги.
Цитата:
По такому же принципу можно "наслоить" между сетевым соединением и descriptor.Call слой, который "дообеспечивает". И в случае отказа соединения, исчезновения объекта и т.п. этот слой не должен выплёскивать проблему клиентскому коду, а должен приводить в действие какие-то спец. обработчики исключения, которые уже принимают конкретные решения - восстанавливать соединение, пересоздавать объект, предложить объект-заменитель, сообщить об ошибке кому-либо и т.п.
Обработкой этого занимается само приложение, но не в тех местах, где описана логика нормального взаимодействия (идут прозрачные вызовы), а в обособленных обработчиках. Т.е. основной код "прозрачен", а разница в гарантиях компенсируется специальными сценариями, которые приходят в действие в особых ситуациях.
не нужно никаких сценариев. поскольку общего, даже приблизительно сценария для обьекта-заглушки, старающего сэмулировать пропавший удаленный реальный обьект нет. либо такие заглушки нужно писать руками, и предоставлять как реализацию актера, так и реализацию "глухого актера". лишнее это.
просто нужно уметь проверять доставлено ли ваше сообщение, у сообщения должны быть методы -
bool is_received(); //неблокирующая проверка доставки
bool wait_is_received(timeout);//блокирующая, то есть текущий тред встает в ожидание события доставки с таймаутом.
и опять таймауты вылезают на уровень прикладного программирования, поскольку даже если вы пишете простой текстовый коммуникатор по радиоканалу типа точка-точка, вам придется убеждаться в успехе доставки ваших сообщений в прикладном коде. и этот код должен уметь варьировать таймаут. например его увеличить или уменьшить.
по поводу инверсии приоритетов. проблема чиста академическая. в реальности, в хорошо спроектрованной системе треды высокоприоритетные не видят тредов низкого приоритета. ничего о них не знают. треды пользователя имеют свой диапазон приоритетов, а системные - свой. более высокий и не пересекающийся с пользователями. а также системные треды вращаются в другом пространстве имен. в ядре оси могут быть конечно треды низкого приоритета, однако они образуют специфичное подмножество и хоть высокприоритетные треды ядра и видят(в пространстве имен) эти системные низкоприоритетные, но они также не обращатся к ним с сообщениями, на которые необходимо ждать ответ. поскольку только в этом случае может произойти блокировка высокоприоритетного треда низкоприоритетным(то есть высокоприоритетный джет ответа от низкоприоритетного).
потому всерьез проблемы нет.
Цитата:
Тут же к вопросу об обработке исключений - мне кажется, что конструкции try-except (в полезности которых многие давно сомневались) совершенно бесполезны в параллельных приложениях. Т.к. искать обработчик исключительной ситуации раскруткой стека текущего потока бессмысленно, этот поток не может и не должен ничего знать об обработке исключений (а если всё-таки должен, то достаточно обычных кодов ошибок).
полезность исключительных ситуаций формально постулируется так. не помню автора, возможно майер(если не ошибаюсь), автор Эйфеля.
исключительная ситауция должна возникнуть тогда, когда функция проверив на корректность предусловия, не может своим кодом выполнить постусловия. Все остальное от лукавого. То есть с точки зрения теории, выход из функции заперт невыполнимыми постусловиями. тогда необходима иная форма выхода - что и есть генерирование искл. ситуации.
Любовь к исключениям просто для передачи результата навроде - хотели файл открыть а его нету! это вульгарное использование механизма исключений, порождающее споры с мордобоем, зачем они вообще.
Исходя из определения видно, что если вы ослабите постусловия функций, вы теоретически можете сократить необходимость исключений до нуля - при постусловиях, что любая постситуация не нарушает корректности функции.
то есть спор - нужно-не нужно абстрактен. зависит от того, какими вы видите постусловия ваших функций. лично я исключения стараюсь не использовать вообще, если это в моей власти.