Re[12]: Go
От: Sharov Россия  
Дата: 10.05.24 11:20
Оценка:
Здравствуйте, SkyDance, Вы писали:

SD>Return value, конечно же. И дело в "апологетстве", а в минимизации мест, где происходят side effects — для того, чтобы отладка всего этого не стала кошмаром. Дело в том, что любой side effect по сути своей является ничем иным как использованием "глобальной переменной". Которые ровно за этот самый недетерминизм и ругают.


Что такое глобальная переменная в контексте записи на диск? Содержимое жестокого диска + (опционально)RAM?
А в случае передеачи\приема данных из сети -- содержимое дисков и памяти, всех подсоединенных к сети
компьютеров? И как предполагается взаимодействовать, если нету глобальных переменных?
Очевидно, что мы общаемся благодарю изменению некой глобальной переменной (бд на диске). Без
изменения этой глобальной переменной общение и много чего еще, да почти все в ИТ, было бы
не возможно.

S>>И как добавлять эти метаданные без перехвата исключения на месте?

SD>В тех местах, где таки надо снабдить пролетающее исключение — хватай, добавляй метаданные, прокидывай дальше.
SD>Таких мест должно быть очень мало. Потому что если их много, отладка такой программы будет настоящим адом. Все-таки, эффективное программирование возможно только тогда, когда программа детерминированно делает что от нее ожидается. А не валится с рандомной диагностикой.

Это так, но такое не всегда возможно.

S>>Это именно реальный мир. В огороженном вольере сидять как раз программисты на фп языках. Ну или

SD>ФП тут не при чем, это вопрос грамотного дизайна. Детерминированное поведение ровно так же ожидается и от функций на все том же С++. Собственно, на этом базируется все авто-тестирование — подаются те самые детерминированные "моки", которые детерминированно возвращают ожидаемое значение.
SD>Если совсем уж простой пример привести, если функции на языке С++ передать все данные, и никакие другие глобальные переменные та функция не использует, ее поведение должно быть детерминировано. Легко тестируемо, и вообще, о такой функции легко рассуждать (reasoning). Даже если кому-то поначалу сложно научиться (ну как же так, всю жисть глобальные переменные дергали, а тут вдруг низ-зя), это таки вопрос освоения мощных инструментов. Речь, разумеется, о тех участках кода, где эти инструменты применимы (это подавляющее большинство non-performance-critical кода).

О каких инструментах речь? А почему именно инструменты, а не методологии?
Кодом людям нужно помогать!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.