пятилетней давности, из которой следует что никто особо контракты не применяет, разве что Requires, Enusres, Assert. Прошло 5 лет.
Появился core, контракты интегрировали во фреймворк и т.д. Что-нибудь изменилось, кто-то стал их полноценно использовать? Что с производительностью? Или по-прежнему if-then-throw + Debug.Assert?
Заранее благодарю.
Удп: пациент скорее мертв -- https://github.com/dotnet/docs/issues/6361
Хотя бы Requires, Enusres, Assert использует кто? Вроде неплохие фичи. Инваринаты, вероятно, дорого. Еще что-то оттуда можно выдернуть?
пятилетней давности, из которой следует что никто особо контракты не применяет, разве что Requires, Enusres, Assert. Прошло 5 лет. S>Появился core, контракты интегрировали во фреймворк и т.д. Что-нибудь изменилось, кто-то стал их полноценно использовать? Что с производительностью? Или по-прежнему if-then-throw + Debug.Assert?
В контрактах без управляемой рантайм проверки нет особого смысла.
А рантайм проверку как раз и не интегрировали.
Поэтому да, до сих пор if-then-throw. Ну и Debug.Assert, он хоть исключения кидает.
пятилетней давности, из которой следует что никто особо контракты не применяет, разве что Requires, Enusres, Assert. Прошло 5 лет. S>>Появился core, контракты интегрировали во фреймворк и т.д. Что-нибудь изменилось, кто-то стал их полноценно использовать? Что с производительностью? Или по-прежнему if-then-throw + Debug.Assert? V>В контрактах без управляемой рантайм проверки нет особого смысла. V>А рантайм проверку как раз и не интегрировали. V>Поэтому да, до сих пор if-then-throw. Ну и Debug.Assert, он хоть исключения кидает.
Я пост обновил, посмотрите, если не трудно. А вот Ensures, Requires вроде не требуют особого rt, все кодогенерацией можно решить. Их используют?
Здравствуйте, Sharov, Вы писали:
S>Я пост обновил, посмотрите, если не трудно.
Ну да, пациент помер. Впрочем, в его состоянии это было и неудивительно.
А задумка-то была неплохая.
S>А вот Ensures, Requires вроде не требуют особого rt, все кодогенерацией можно решить. Их используют?
Не совсем понимаю, как тут можно что-то решить кодогенерацией.
Вот есть тот же Ensures, который ничего не делает. Спрашивается, зачем его применять?
Здравствуйте, vmpire, Вы писали:
S>>А вот Ensures, Requires вроде не требуют особого rt, все кодогенерацией можно решить. Их используют? V>Не совсем понимаю, как тут можно что-то решить кодогенерацией.
А в чем проблема переписать код и проверять постусловия на вовращаемом значение, параметрах или полях?
V>Вот есть тот же Ensures, который ничего не делает. Спрашивается, зачем его применять?
Увы, но да. Но по идее, он же должен бросать исключения в случае нарушения постусловий?
S>>>А вот Ensures, Requires вроде не требуют особого rt, все кодогенерацией можно решить. Их используют? V>>Не совсем понимаю, как тут можно что-то решить кодогенерацией. S>А в чем проблема переписать код и проверять постусловия на вовращаемом значение, параметрах или полях?
Чей код переписать? Контрактов? Так он внутри фреймворка. А если свой код переписывать, то зачем тогда вообще эти контракты?
V>>Вот есть тот же Ensures, который ничего не делает. Спрашивается, зачем его применять?
S>Увы, но да. Но по идее, он же должен бросать исключения в случае нарушения постусловий?
По идее — да. Но не бросает. Чтобы бросал — нужна генерационная часть, которой нет.
Насколько я знаю, в VS2017 энтузиасты прикручивали что-то вручную. Про 2019 — не интересовался.
Здравствуйте, vmpire, Вы писали:
S>>А в чем проблема переписать код и проверять постусловия на вовращаемом значение, параметрах или полях? V>Чей код переписать? Контрактов? Так он внутри фреймворка. А если свой код переписывать, то зачем тогда вообще эти контракты?
Неудачно выразился, генерационная часть, конечно же. Т.е. я пишу Ensures в самом начале, а генерируется код, который по типу finally, а скорее всего и так, проверяет мои постусловия и т.п. вещи. Кажется, что
это все же можно без rt проверять, в отличие от инвариантов (хотя и их можно дергать после каждого вызова public методов).
S>>Увы, но да. Но по идее, он же должен бросать исключения в случае нарушения постусловий? V>По идее — да. Но не бросает. Чтобы бросал — нужна генерационная часть, которой нет. V>Насколько я знаю, в VS2017 энтузиасты прикручивали что-то вручную. Про 2019 — не интересовался.
А почему ее, генератора кода, нет, они же вроде в System.Diagnostics все перенесли. Т.е. это официальный код, который... не работает\ничего не делает. В чем смылс -- я
Ладно, я понял, что связывать смысла не имеет, активности никакой, поддержки vs 2019 нету. Поэтому все делаем по страринке.