Илья Ермаков писал(а):
Тут дело в том, что снять авост (привести в соответствие с документацией) - это ослабить предусловие. Это не рушит обратную совместимость!
И я практически уверен, что никто из разработчиков на ББ не полагался на авост как на часть штатного поведения в своих системах.
Поэтому снять его было вполне логичным, обратно совместимым решением, убирающим ещё проблему невозможности заранее узнать, доступен ли файл для записи или нет.
А менять интерфейс типа - это несовместимое изменение интерфейса.
И снятие каких-то признаков файла тогда уже стоило бы делать обходными путями (некая процедура Files.HandleMsg и подключаемые хуки от реализаций и т.п.).
Решение с NIL не позволяет дифференцировать ошибку на ранней стадии. Вот предположим программа стабильная, но раз в год выкидывает TRAP "разыменовывание NIL" при обращении к несуществующему Writer. Вы чешете репу, то ли память кончилась, то ли диск, то ли еще что. Ждем еще год следующего трапа. А тут вам сразу покажут, что файл был закрыт или он был открыт в режиме shared. Для отладки странных проблем Оминк сознательно сделали там ASSERT.
Ценность обратной совместимости большая. Согласен, что надо это учитывать. Но так и не сделать ничего, если ничего не сломать. Отчасти поэтому ушел из Центра, потому что тяжело мне такие дебаты даются. Вот вы бы там поактивнее обсуждали. Правильные мысли выражаете.