Re[24]: cppcms
От: Evgeny.Panasyuk Россия  
Дата: 26.09.14 16:28
Оценка:
Здравствуйте, Ночной Смотрящий, Вы писали:

EP>>Для того чтобы знать что конкретно требуется тщательно проверять и не разрешать лишнего — нужен fine-grained контроль за отдельными функциями

НС>CLR это позволяет. На сборки навешивается только общая политика, так что не программистом задается, а администратором. А разметка кода вполне опускается до уровня конкретных методов.

Какие keyword'ы поискать по теме?

НС>>>Я ж говорю, изобретаешь CLR.

EP>>Ок, как определить используется ли в вызываемом методе операции, которые могут привести к переполнению целых?
НС>Есть соотвествующие метки контекста.

Метки кто расставляет?

EP>> Или, например, возможен ли вылет исключения?

НС>Тут все совсем просто — вылет исключения возможен всегда. Только какое это имеет отношение к безопасности? CLR не С++, неперехваченное исключение память не портит.

С исключениями как раз в C#/Java проблем больше, using'и/try-with-resources это полумера, с транзитивностью распространения is-a-resource никак не помогает. Тема уже не раз обсуждалась.
Но суть в другом — если код не готов к исключению, то оно может поломать инварианты, грубо говоря прервать транзакцию на пол пути. Обвешивать избыточными try/using'ами — тоже не всегда оправданно. Более того, откатить "транзакцию" до приемлемого состояния даже не всегда возможно. Поэтому иногда приходится требовать чтобы некоторые операции не кидали исключений.
Опять таки, в Haskell'е есть монада Exceptional: не заметить что вызываемый код может "выкинуть" исключение — никак нельзя. И это форсится языком — у функции которая "кидает" исключение просто другая сигнатура, и использовать таким же образом как обычную уже не получится.
А к безопасности это имеет самое прямое отношение — большинство проблем с безопасностью происходят от нарушения предусловий/инвариантов, пусть и не всегда явных.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.