LINUX.ORG.RU

История изменений

Исправление quasimoto, (текущая версия) :

Ну пусть видят.

*Авторы Frama-C, им же видней. Как и авторам gcc/graphite или llvm/polly.

Ну так вот у тебя куча своих sorted в каждой либе

И мне совсем не нужно передавать одну на место другой, а если нужно — должны быть общие на всех интерфейсы (теории), эквивалентность доказывать не нужно (ну то есть если ты не метаешься между iterator из std и из boost в проекте, например, но так же никто не делает).

Ну да, а потом можно посмотреть на тот же код из frama-c где аннотаций больше чем собственно самого кода.

А можно не смотреть, а подумать :) Привязать implicit свойство к аргументам в сигнатуре — большая проблема прям.

Где?

Конкретнее:

template <typename T, size_t size>
struct array;

template <typename T, size_t n, size_t m>
array<T, n + m> concat(array<T, n> const&, array<T, m> const&);

как будет на Haskell 98?

А bind у монад он же forall (a :: *). (_ :: a) ... (m a), то есть по type (a :: *), а не по term (n :: size_t).

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

Ничего ты не получаешь. Вот в системе основанной на CIC ты определяешь типы, пишешь утверждения и доказываешь их свойства. Например определяешь _=_ : {A} -> A -> A -> Set и пишешь функцию sym : {x y} -> x = y -> y = x; sym refl = refl, а макросы тут вообще каким боком? Как будем определять типы, писать утверждения и доказывать теоремы? Ну и что конкретно брать — ничего ж нету, одни петухи с агдами.

Где ты там зависимые типы увидел?

Не видишь, что n_vector и NList это один в один?

Только числа, естественно, надо определить как Zero/Succ будет.

Не надо.

Исправление quasimoto, :

Ну пусть видят.

*Авторы Frama-C, им же видней. Как и авторам gcc/graphite или llvm/polly.

Ну так вот у тебя куча своих sorted в каждой либе

И мне совсем не нужно передавать одну на место другой, а если нужно — должны быть общие на всех интерфейсы (теории), эквивалентность доказывать не нужно (ну то есть если ты не метаешься между iterator из std и из boost в проекте, например, но так же никто не делает).

Ну да, а потом можно посмотреть на тот же код из frama-c где аннотаций больше чем собственно самого кода.

А можно не смотреть, а подумать :) Привязать implicit свойство к аргументам в сигнатуре — большая проблема прям.

Где?

Конкретнее:

template <typename T, size_t size>
struct array;

template <typename T, size_t n, size_t m>
array<T, n + m> concat(array<T, n> const&, array<T, m> const&)

как будет на Haskell 98?

А bind у монад он же forall (a :: *). (_ :: a) ... (m a), то есть по type (a :: *), а не по term (n :: size_t).

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

Ничего ты не получаешь. Вот в системе основанной на CIC ты определяешь типы, пишешь утверждения и доказываешь их свойства. Например определяешь _=_ : {A} -> A -> A -> Set и пишешь функцию sym : {x y} -> x = y -> y = x; sym refl = refl, а макросы тут вообще каким боком? Как будем определять типы, писать утверждения и доказывать теоремы? Ну и что конкретно брать — ничего ж нету, одни петухи с агдами.

Где ты там зависимые типы увидел?

Не видишь, что n_vector и NList это один в один?

Только числа, естественно, надо определить как Zero/Succ будет.

Не надо.

Исходная версия quasimoto, :

Ну пусть видят.

*Авторы Frama-C, им же видней. Как и авторам gcc/graphite или llvm/polly.

Ну так вот у тебя куча своих sorted в каждой либе

И мне совсем не нужно передавать одну на место другой, а если нужно — должны быть общие на всех интерфейсы (теории), эквивалентность доказывать не нужно (ну то есть если ты не метаешься между iterator из std и range из boost в проекте, например, но так же никто не делает).

Ну да, а потом можно посмотреть на тот же код из frama-c где аннотаций больше чем собственно самого кода.

А можно не смотреть, а подумать :) Привязать implicit свойство к аргументам в сигнатуре — большая проблема прям.

Где?

Конкретнее:

template <typename T, size_t size>
struct array;

template <typename T, size_t n, size_t m>
array<T, n + m> concat(array<T, n> const&, array<T, m> const&)

как будет на Haskell 98?

А bind у монад он же forall (a :: *). (_ :: a) ... (m a), то есть по type (a :: *), а не по term (n :: size_t).

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

Ничего ты не получаешь. Вот в системе основанной на CIC ты определяешь типы, пишешь утверждения и доказываешь их свойства. Например определяешь _=_ : {A} -> A -> A -> Set и пишешь функцию sym : {x y} -> x = y -> y = x; sym refl = refl, а макросы тут вообще каким боком? Как будем определять типы, писать утверждения и доказывать теоремы? Ну и что конкретно брать — ничего ж нету, одни петухи с агдами.

Где ты там зависимые типы увидел?

Не видишь, что n_vector и NList это один в один?

Только числа, естественно, надо определить как Zero/Succ будет.

Не надо.