On Saturday 06 May 2006 07:34, Artem Chuprina wrote: > Авторов юникса, видимо, тоже напрягало. Поэтому есть _функция_ syslog.
Это камень в сторону ведения лога или организации программы? Если по организации программы, то откуда _функция_ возьмёт дескрипторы/имена файлов логов? Сохранит в статической области после инициализации? Так то фактически то же самое. Кроме того, логов может быть много. Ну и это только пример. Второй пример, приходящий в голову -- конфиг программы. Лежит объект MainServerConfig в области глобальных переменных, и вся программа знает что и как сконфигурировано. Третий пример можно придумать с объектом Listener, когда по условиям задачи он только один может быть, и из разных частей программы можно добавлять сокеты для прослушивания в ожидании данных. > В принципе, вообще в таких случаях стараются сделать именно функцию, > которая возвращает нужное значение (указатель на объект, если надо). Откуда данные у функции? Где-то должен храниться указатель на структуру данных для неё? Такая функция всего лишь один уровень косвенности даёт, что часто даже (в программах меньше 10000 строк) и не нужно. > Тогда у тебя гарантированно скрыты детали реализации. А что бывает, > когда так не делают сразу, можно посмотреть на примере "переменной" > errno в случае с тредами. Тут проблема в том, что "изменилось ТЗ", когда систему в 1970-х придумывали, ни о каких тредах не было мыслей даже. В случае изменения ТЗ что б у тебя не было спроектировано, всегда можно придумать случай, когда в изменённых условиях придётся часть существенно перепроектировать. > Проблему решили, конечно, но не могу сказать, > чтобы решение было офигительно прямым... Кстати относительно безболезненно. Приходится только djbdns патчить... Я собственно к чему всё это говорю. Правило "не делать глобальных переменных" не должно быть религией, хотя его действительно стоит придерживаться. Но в таком случае оно становится "делать глобальных переменных разумно мало". -- Anton Petrusevich -- To UNSUBSCRIBE, email to [EMAIL PROTECTED] with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]

