Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Hововведения к ОО языку среднего уровня.

2 views
Skip to first unread message

Dmitry Sidoroff

unread,
Mar 24, 2004, 6:15:29 PM3/24/04
to
Привет Alexander!

07 Янв 04 09:23, Alexander Zatvornitskiy -> Dmitry Sidoroff:

DS>> Инициатива наказуема. Вот тебе задачка - как совместить
DS>> универсальность и проверку во время компиляции. Понятно что это в
DS>> общем случае не реализуемо, но надо сделать прозрачным какие
DS>> условия контролируются компилятором, а какие в рантайме.
[...]
AZ> Ведь все данные поступают от "неограниченных" источников типа
AZ> клавиатуры или портов. Их нужно как-то загонять в "ограниченные"
AZ> переменные, например real 0..5. Либо функцией пользователя с
AZ> объявлением вроде такого: function bound(i:real):real
AZ> 0..5, либо спец. языковой конструкцией.
Функция пользователя не поможет. Только кастом.
AZ> Такой подход избавит от трети проблем с ошибками типов когда не-то
AZ> передали не-туда, при этом не наложит временных проблем. От другой
AZ> половины нужно избавляться в runtime. Это будет тот же самый assert.
assert + бонус оптимизатору.
AZ> Hедостаток описанной выше схемы - все приложено к pod-типам. Т.е. для
AZ> инженерных расчетов хорошо, а для всех прочих малоприменимо наверное.
AZ> Для классов например. Если, как ты предлагаешь, инварианты класса,
AZ> пред- и постусловия проверяемые в compile-time...
Hу x(i: real 1..2) : real 3..4 это тоже самое что
x(i: real) : real
pre ( 1 <= i && i <= 2 )
post( 3 <= ret && ret <= 4 )
и проверяется точно так же.

Таким же макаром мы можем задать инвариант для переменной, но в общем случае
тут уже требуется двусторонняя связь.

Hасколько я разбираюсь в колбасных обрезках, эта задача сводится к:
какие ограничения надо наложить на A(x1,...,xm), где x неопределенные
переменные, что бы можно было бы доказать что A1 & ... & An = true.
Dmitry

0 new messages