Здравствуйте, VladD2, Вы писали:
_>>Да и пусть. Тем более что этот прокси и не обязан существовать в il, компилятору достаточно помнить про него и сгенерировать в конце функции finally-блок с Dispose. Для меня основная проблема с отсутствием деструкторов в c# не в необходимости вызывать Dispose на самом верху, а в необходимости реализовывать Dispose pattern в каждом классе, косвенно владеющем unmanaged-ресурсами.
VD>Разработчики заявляют именно о прокси. Я согласен, что компилятор мог бы все сделать и на более низком уровне. Но за что купил...
В любом случае лучше подождать релиза и проверить.
_>>В c# lock, using и T::~T уже прячут подробности. Кажется, всех это только радует
VD>Для Шарпа это нормально. Он изначально язык более высокого уровня.
Для плюсов тоже совершенно нормально генерировать нетривиальный код, например, для корректного вызова деструкторов локальных переменных при исключении.
VD>T::~T там правда никакого нет. Там есть финалайзеры. Это не одно и тоже.
Есть синтаксис ~T(){...}, превращающийся в финалайзер автоматическим дописыванием вызова предка в finally.
VD>Проблема в том, что CLI/С++ не прячет все подробности. Он делает это изберательно. Нарваться на дэнглинг-поинтер и т.п. так же просто как и рашьше, но при этом кишки работы компилятора не видны. И это не только с финализацией (с ней-то получилось более менее красиво). Более логично было бы делать в С++ некие код-парерны.
Да, там логичнее выставить из ядра минимальную функциональность, а остальное сделать классами и шаблонами.