viewtopic.php?p=38759#p38759Galkov писал(а):
Alexey_Donskoy писал(а):
- все процедуры целесообразно рассматривать как реентерабельные, пока явно не указано обратного
В этом предложение ключевое слово - целесообразно
У меня иные наблюдения про целесообразность.
Как минимум, в 9 случаях из 10 этого не требуется. Но, серьезно влияет на эффективность кода. Как, впрочем, и на мозги того, кто этот код делает/читает
В некоторых случаях framework-ового типа удобно делать взаимодействие через глобальные структуры. Это позволяет гибко и полиморфно коммутировать компоненты (например, вызываем Обероновские команды, которые передают друг другу данные через какой-то глобальный буфер, как Юникс-конвейер). В принципе, если не использовать глобальные структуры для хранения, а только для передачи, проблем типа "глобальных побочных эффектов" это не вызывает. Взаимодействие через глобально известное место - вполне себе нормальный паттерн. Если мы не запускаем несколько потоков в одном рантайме (а этого лучше не делать).
Простота и расширяемость решения себя окупает, короче.
Иногда удобно для возвращаемых процедурой данных иметь глобальную структуру в её модуле.
Например, имеем модуль каких-то клиент-серверных запросов.
Удобно оформить этот модуль именно так. Тогда можно вызывать запросы и как команды, и программно. Ответ - через глобальные переменные.