Здравствуйте, SkyDance, Вы писали:
SD>Return value, конечно же. И дело в "апологетстве", а в минимизации мест, где происходят side effects — для того, чтобы отладка всего этого не стала кошмаром. Дело в том, что любой side effect по сути своей является ничем иным как использованием "глобальной переменной". Которые ровно за этот самый недетерминизм и ругают.
Что такое глобальная переменная в контексте записи на диск? Содержимое жестокого диска + (опционально)RAM?
А в случае передеачи\приема данных из сети -- содержимое дисков и памяти, всех подсоединенных к сети
компьютеров? И как предполагается взаимодействовать, если нету глобальных переменных?
Очевидно, что мы общаемся благодарю изменению некой глобальной переменной (бд на диске). Без
изменения этой глобальной переменной общение и много чего еще, да почти все в ИТ, было бы
не возможно.
S>>И как добавлять эти метаданные без перехвата исключения на месте? SD>В тех местах, где таки надо снабдить пролетающее исключение — хватай, добавляй метаданные, прокидывай дальше. SD>Таких мест должно быть очень мало. Потому что если их много, отладка такой программы будет настоящим адом. Все-таки, эффективное программирование возможно только тогда, когда программа детерминированно делает что от нее ожидается. А не валится с рандомной диагностикой.
Это так, но такое не всегда возможно.
S>>Это именно реальный мир. В огороженном вольере сидять как раз программисты на фп языках. Ну или SD>ФП тут не при чем, это вопрос грамотного дизайна. Детерминированное поведение ровно так же ожидается и от функций на все том же С++. Собственно, на этом базируется все авто-тестирование — подаются те самые детерминированные "моки", которые детерминированно возвращают ожидаемое значение. SD>Если совсем уж простой пример привести, если функции на языке С++ передать все данные, и никакие другие глобальные переменные та функция не использует, ее поведение должно быть детерминировано. Легко тестируемо, и вообще, о такой функции легко рассуждать (reasoning). Даже если кому-то поначалу сложно научиться (ну как же так, всю жисть глобальные переменные дергали, а тут вдруг низ-зя), это таки вопрос освоения мощных инструментов. Речь, разумеется, о тех участках кода, где эти инструменты применимы (это подавляющее большинство non-performance-critical кода).
О каких инструментах речь? А почему именно инструменты, а не методологии?