Re[10]: Haters gonna hate but with proofs
От: rg45 СССР  
Дата: 14.01.19 10:18
Оценка: +1
Здравствуйте, netch80, Вы писали:

N>Ну мне решение с defer нравится. Тем более что оно есть и в C++ — BOOST_SCOPE_EXIT. Это реально удобнее в таких последовательных действиях типа "открыли A, открыли B, аллоцировали C, открыли D, временно подменили E и F...", для которых нужен обратный откат (а если закоммитили то можно просто поставить флажок об этом).


Все та же проблема — этот самый defer должен написать полльзователь функции, а не разработчик.

Другая проблема — не работает для подобъектов. Какждый раз требуется ручное управление, что плодит ошибки времени выполнения.

Третья проблема, использую сишарпный аналог defere-а — using. Много ли найдется разработчиков C#, которые скажут сходу, какой из следующих вариантов является правильным (пример, опять же, абстрактый, просьба не придираться к прикладным аспектам):

        public static T Deserialize<T>(Stream input)
        {
            var textReader = new StreamReader(input);
            // че-то читаем из textReader

            using (var xmlReader = XmlReader.Create(textReader))
            {
                return Deserialize<T>(xmlReader);
            }
        }

или
        public static T Deserialize<T>(Stream input)
        {
            using (var textReader = new StreamReader(input))
            {
                // че-то читаем из textReader
                using (var xmlReader = XmlReader.Create(textReader))
                {
                    return Deserialize<T>(xmlReader);
                }
            }
        }


Или может, вообще можно без всяких using, как правильно?

И даже на этом веселуха еще не заканчивается — обязательно ведь найдется грамотей, который позовет Dispose (прямо либо через using) для входного стрима.

И подобные проблемы неминуемо возникают везде, где ресурс выделяется провайдером, а отвестсвенность за его осводождение лежит на консумере. Остается только радоваться разнообразию этих проблем: неосвобождение ресурсов (учетчки), повторное освобождение, несвоевременное освобождение.
--
Справедливость выше закона. А человечность выше справедливости.
Отредактировано 14.01.2019 11:27 rg45 . Предыдущая версия . Еще …
Отредактировано 14.01.2019 11:22 rg45 . Предыдущая версия .
Отредактировано 14.01.2019 11:20 rg45 . Предыдущая версия .
Отредактировано 14.01.2019 11:00 rg45 . Предыдущая версия .
Отредактировано 14.01.2019 11:00 rg45 . Предыдущая версия .
Отредактировано 14.01.2019 10:41 rg45 . Предыдущая версия .
Отредактировано 14.01.2019 10:30 rg45 . Предыдущая версия .
Отредактировано 14.01.2019 10:22 rg45 . Предыдущая версия .
Отредактировано 14.01.2019 10:21 rg45 . Предыдущая версия .
Отредактировано 14.01.2019 10:19 rg45 . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.