Здравствуйте, Sinclair, Вы писали:
S>Здравствуйте, Mamut, Вы писали:
M>>Нууу... Сложно сказать. Из того, что я пока видел из предложенного в двух ветках, там на каждое условие придется писать свой тип/параметр типа, которые в некоторых местах вообще непонятно, как будут выглядеть (см. последнюю строчку).
S>Последняя строчка выглядит так, что она как раз останется частью рантайм-функциональности. Т.е. задача не сводится к тому, чтобы математически доказать, что подобных условий в принципе возникнуть не может. Они могут возникнуть, и штатной функциональностью будет отказ от выполнения операции с возвратом рантайм-ошибки.
S>А в остальном — да, на каждое статически проверяемое условие будет свой параметр типа.
бинго
S>Это как бы не такая уж проблема в смысле объёма требований. Это в С++ или С# реализация может оказаться крайне громоздкой, а некоторые вещи вообще не взлетят (ну там, где параметр типа не Boolean, а что-то поинтереснее).
Все, что может быть выражено цепочкой if/else — будет работать. Каким бы сложным ни было свойство — ты всегда можешь сделать функцию по его проверке, которая будет возвращать bool — прошла проверка или нет. Свойство не обязано быть булевским само по себе. Скажем, цена заказа — это не булевское свойство. А вот превышает ли она литим, гарантирующий бесплатную доставку — это да/нет.
Или, в моем же примере, есть свойство "можно ли для этого ордера (в его нынешнем состоянии) поднять цену на данную величину". Это уже свойство, объединяющее несколько сущностей и выражающее отношения между ними.
Булевское свойство просто делается проще всего, поэтому я его реализовал напрямую в своем примере. Это не значит, что только булевские свойства возможны.
S>Мне нравится сама тема разговора — попытка скрестить "матан" передовиков типизации с "сермягой" прикладных направлений.
S>И коммуникационные проблемы тут вполне ожидаемы — теоретики не очень внятно представляют себе, что такое обработка заказа, а практики не очень понимают, чего вообще ожидать от типизации в частности и статической верификации контрактов вообще.
Вот я — практик до не знаю мозга каких костей, я вообще не программер по образованию

И по банкам работаю уже лет 15, так что про ордера (биржевые, правда) я знаю все