Информация об изменениях

Сообщение Re[14]: Haskell нужен! (в Standard Chartered Bank) от 03.02.2015 20:41

Изменено 03.02.2015 20:45 Evgeny.Panasyuk

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

M>Могу повторить вопрос. Простейшие же.

M>- Вы переносите логику из кода приложения в типы. Это не делает логику правильной, это делает логику в типах. Как вы собираетесь проверять

Compile-time unit-тестами — static_assert'ы на типы-результаты (click); автоматическая проверка того, что неправильный код действительно не компилируется и vice versa (click
Автор: rg45
Дата: 27.09.14
).

M>и дебажить логику в типах?


Например отладочным выводом промежуточных типов.

M>- Как вы перенесете в типы логику, которая зависит от десятка разнообразных действий, включая интересные сайд-эффекты?


При желании всё возможно. Например: сортировка runtime-данных, через мемоизацию в compile-time графе (click
Автор: Кодт
Дата: 20.10.14
). То есть запихнуть много runtime данных (упомянутые тобой конфигурации и т.п.) в тип возможно, но это чревато generated code bloat.
Пытаться же запихнуть всю-всю логику в типы — контрпродуктивно, само собой нужен баланс. Как уже неоднократно отмечали выше — типы помогают обнаруживать только некоторые классы ошибок.
Неплохим примером является кодирование единиц измерения и размерности в тип. Например Mars Climate Orbiter распался в атмосфере Марса из-за того, что разные модули по ошибке использовали разные единицы измерения.
Здравствуйте, Mamut, Вы писали:

M>Могу повторить вопрос. Простейшие же.

M>- Вы переносите логику из кода приложения в типы. Это не делает логику правильной, это делает логику в типах. Как вы собираетесь проверять

Compile-time unit-тестами — static_assert'ы на типы-результаты (click); автоматическая проверка того, что неправильный код действительно не компилируется и vice versa (click
Автор: rg45
Дата: 27.09.14
).

M>и дебажить логику в типах?


Например отладочным выводом промежуточных типов.

M>- Как вы перенесете в типы логику, которая зависит от десятка разнообразных действий, включая интересные сайд-эффекты?


При желании всё возможно. Например: сортировка runtime-данных через мемоизацию результатов сравнения в compile-time графе (click
Автор: Кодт
Дата: 20.10.14
). То есть запихнуть много runtime данных (упомянутые тобой конфигурации и т.п.) в тип возможно, но это чревато generated code bloat.
Пытаться же запихнуть всю-всю логику в типы — контрпродуктивно, само собой нужен баланс. Как уже неоднократно отмечали выше — типы помогают обнаруживать только некоторые классы ошибок.
Неплохим примером является кодирование единиц измерения и размерности в тип. Например Mars Climate Orbiter распался в атмосфере Марса из-за того, что разные модули по ошибке использовали разные единицы измерения.