Code contracts. Кто-нибудь использует?
От: Sharov Россия  
Дата: 24.03.20 15:26
Оценка: +1
Здравтсвуйте.

Дискуссия
Автор: Shmj
Дата: 08.08.15
пятилетней давности, из которой следует что никто особо контракты не применяет, разве что Requires, Enusres, Assert. Прошло 5 лет.
Появился core, контракты интегрировали во фреймворк и т.д. Что-нибудь изменилось, кто-то стал их полноценно использовать? Что с производительностью? Или по-прежнему if-then-throw + Debug.Assert?

Заранее благодарю.

Удп: пациент скорее мертв -- https://github.com/dotnet/docs/issues/6361
Хотя бы Requires, Enusres, Assert использует кто? Вроде неплохие фичи. Инваринаты, вероятно, дорого. Еще что-то оттуда можно выдернуть?
Кодом людям нужно помогать!
Отредактировано 24.03.2020 16:08 Sharov . Предыдущая версия .
Re: Code contracts. Кто-нибудь использует?
От: vmpire Россия  
Дата: 24.03.20 16:08
Оценка: 5 (1)
Здравствуйте, Sharov, Вы писали:

S>Дискуссия
Автор: Shmj
Дата: 08.08.15
пятилетней давности, из которой следует что никто особо контракты не применяет, разве что Requires, Enusres, Assert. Прошло 5 лет.

S>Появился core, контракты интегрировали во фреймворк и т.д. Что-нибудь изменилось, кто-то стал их полноценно использовать? Что с производительностью? Или по-прежнему if-then-throw + Debug.Assert?
В контрактах без управляемой рантайм проверки нет особого смысла.
А рантайм проверку как раз и не интегрировали.
Поэтому да, до сих пор if-then-throw. Ну и Debug.Assert, он хоть исключения кидает.
Re[2]: Code contracts. Кто-нибудь использует?
От: Sharov Россия  
Дата: 24.03.20 16:10
Оценка:
Здравствуйте, vmpire, Вы писали:

V>Здравствуйте, Sharov, Вы писали:


S>>Дискуссия
Автор: Shmj
Дата: 08.08.15
пятилетней давности, из которой следует что никто особо контракты не применяет, разве что Requires, Enusres, Assert. Прошло 5 лет.

S>>Появился core, контракты интегрировали во фреймворк и т.д. Что-нибудь изменилось, кто-то стал их полноценно использовать? Что с производительностью? Или по-прежнему if-then-throw + Debug.Assert?
V>В контрактах без управляемой рантайм проверки нет особого смысла.
V>А рантайм проверку как раз и не интегрировали.
V>Поэтому да, до сих пор if-then-throw. Ну и Debug.Assert, он хоть исключения кидает.

Я пост обновил, посмотрите, если не трудно. А вот Ensures, Requires вроде не требуют особого rt, все кодогенерацией можно решить. Их используют?
Кодом людям нужно помогать!
Re[3]: Code contracts. Кто-нибудь использует?
От: vmpire Россия  
Дата: 24.03.20 16:47
Оценка:
Здравствуйте, Sharov, Вы писали:

S>Я пост обновил, посмотрите, если не трудно.

Ну да, пациент помер. Впрочем, в его состоянии это было и неудивительно.
А задумка-то была неплохая.

S>А вот Ensures, Requires вроде не требуют особого rt, все кодогенерацией можно решить. Их используют?

Не совсем понимаю, как тут можно что-то решить кодогенерацией.
Вот есть тот же Ensures, который ничего не делает. Спрашивается, зачем его применять?
Re[4]: Code contracts. Кто-нибудь использует?
От: Sharov Россия  
Дата: 24.03.20 16:55
Оценка:
Здравствуйте, vmpire, Вы писали:

S>>А вот Ensures, Requires вроде не требуют особого rt, все кодогенерацией можно решить. Их используют?

V>Не совсем понимаю, как тут можно что-то решить кодогенерацией.

А в чем проблема переписать код и проверять постусловия на вовращаемом значение, параметрах или полях?

V>Вот есть тот же Ensures, который ничего не делает. Спрашивается, зачем его применять?


Увы, но да. Но по идее, он же должен бросать исключения в случае нарушения постусловий?
Кодом людям нужно помогать!
Re[5]: Code contracts. Кто-нибудь использует?
От: vmpire Россия  
Дата: 24.03.20 17:53
Оценка:
Здравствуйте, Sharov, Вы писали:


S>>>А вот Ensures, Requires вроде не требуют особого rt, все кодогенерацией можно решить. Их используют?

V>>Не совсем понимаю, как тут можно что-то решить кодогенерацией.
S>А в чем проблема переписать код и проверять постусловия на вовращаемом значение, параметрах или полях?
Чей код переписать? Контрактов? Так он внутри фреймворка. А если свой код переписывать, то зачем тогда вообще эти контракты?

V>>Вот есть тот же Ensures, который ничего не делает. Спрашивается, зачем его применять?


S>Увы, но да. Но по идее, он же должен бросать исключения в случае нарушения постусловий?

По идее — да. Но не бросает. Чтобы бросал — нужна генерационная часть, которой нет.
Насколько я знаю, в VS2017 энтузиасты прикручивали что-то вручную. Про 2019 — не интересовался.
Re[6]: Code contracts. Кто-нибудь использует?
От: Sharov Россия  
Дата: 24.03.20 18:03
Оценка:
Здравствуйте, vmpire, Вы писали:

S>>А в чем проблема переписать код и проверять постусловия на вовращаемом значение, параметрах или полях?

V>Чей код переписать? Контрактов? Так он внутри фреймворка. А если свой код переписывать, то зачем тогда вообще эти контракты?

Неудачно выразился, генерационная часть, конечно же. Т.е. я пишу Ensures в самом начале, а генерируется код, который по типу finally, а скорее всего и так, проверяет мои постусловия и т.п. вещи. Кажется, что
это все же можно без rt проверять, в отличие от инвариантов (хотя и их можно дергать после каждого вызова public методов).

S>>Увы, но да. Но по идее, он же должен бросать исключения в случае нарушения постусловий?

V>По идее — да. Но не бросает. Чтобы бросал — нужна генерационная часть, которой нет.
V>Насколько я знаю, в VS2017 энтузиасты прикручивали что-то вручную. Про 2019 — не интересовался.

А почему ее, генератора кода, нет, они же вроде в System.Diagnostics все перенесли. Т.е. это официальный код, который... не работает\ничего не делает. В чем смылс -- я

Ладно, я понял, что связывать смысла не имеет, активности никакой, поддержки vs 2019 нету. Поэтому все делаем по страринке.
Кодом людям нужно помогать!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.