| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > Глобальные переменные |
| Автор: Rickert 15.3.2008, 10:57 |
| Где-то слышал, что нужно избегать глобальных переменных вообще. Правда ли и почему? |
| Автор: Alek86 15.3.2008, 11:27 |
| Избегать нужно глобальных неконстантных переменных, ибо их изменение сложно отследить Число Пи лучше сделать глобальной константой... |
| Автор: archimed7592 15.3.2008, 11:35 |
Rickert, ну а ты попробуй придумать сценарий, при котором глобальные переменные будут хорошим решением ;). |
| Автор: Rickert 15.3.2008, 11:51 |
| archimed7592, разработка игр. Глобальные переменные: системные установки, игровой мир, профиль игрока. Теже системные установки необходимы для инициализации окна и обработки событий. |
| Автор: Rickert 15.3.2008, 12:42 |
| Корчое ясно. Всем спасибо! |
| Автор: Alek86 15.3.2008, 12:56 | ||
уточню - ты о ЛЮБЫХ глобальных переменных? имхо, я предложил 1 из сценариев, когда глобальная переменная - самое лучшее решение. ну можно еще в неймспейс Math какой-нить обернуть... |
| Автор: MAKCim 15.3.2008, 15:05 | ||
неправда точнее нельзя тупо и односторонне следовать какому-то "правилу", если оно не является законом надо руководствоваться здравым смыслом где-то глобальные переменные применять не следует, а где-то они будут очень даже кстати |
| Автор: Dmi3ev 15.3.2008, 15:49 |
| если можешь, обходись без них. если не можешь, КОНЕЧНО СТОИТ ИСПОЛЬЗОВАТЬ ГЛОБАЛЬНЫЕ ПЕРЕМЕННЫЕ. ГЛОБАЛЬНЫЕ ПЕРЕМЕННЫЕ НЕ ЯВЛЯЮТСЯ ПЛОХИМИ. ПРОСТО НАДО БЫТЬ ОСТОРОЖНЫМ. 1 ЕСЛИ ДОПУСТИМ У ТЕБЯ ЕСТЬ ГЛОБАЛЬНАЯ ПЕРЕМЕННАЯ А И В ФУНКЦИИ ЛОКАЛЬНАЯ ПЕРЕМЕННАЯ А, ТО ДЕЙСТВИЕ ГЛОБАЛЬНОЙ ПЕРЕМЕННОЙ ПЕРЕКРОЕТСЯ ЛОКАЛЬНОЙ ПЕРЕМЕННОЙ (В ЭТОЙ ФУНКЦИИ) 2 СЛОЖНО ОТСЛЕЖИВАТЬ ИЗМЕНЕНИЕ ГЛОБАЛЬНЫХ ПЕРЕМЕННЫХ ОДНАКО ЕСЛИ ЕСТЬ МНОГО ПЕРЕМЕННЫХ, КОТОРЫЕ НАДО ПЕРЕДАВАТЬ ИЗ ФУНКЦИИ В ФУНКЦИЮ, ТО Я, НАПРИМЕР, ИСПОЛЬЗУЮ ГЛОБАЛЬНЫЕ ПЕРЕМЕННЫЕ. |
| Автор: MAKCim 15.3.2008, 16:12 | ||
Dmi3ev,
|
| Автор: archimed7592 16.3.2008, 02:46 | ||||
Угу, о любых. Любой объект помимо своего глобального использования ещё имеет этапы инициализации и финализации, которые необходимо контролировать(как моменты свершения этих этапов, так и процесс их протекания). Без этого контроля глобальная переменная такая же полезная вещь, как, к примеру, неинициализированная локальная переменная. Сразу оговорюсь, что константа - это не переменная
Возможно, что многих моё мнение шокирует, но, всё же я его выскажу(постараюсь наиболее деликатно). Производство ПО - это целая отрасль в промышленности со своей спецификой, требованиями, ньюансами, etc. В этой самой отрасли есть много разных областей, где правят свои законы. Дык вот, самые большие области - это enterprise & small business: в этих областях секрет успешных проектов заключается в искусстве наиболее эффективно производить легко поддерживаемое ПО, т.е. задачи всего три: 1) потратить наименьшее кол-во ресурсов(время+деньги); 2) уметь подстраивать проект также быстро, как меняются требования заказчика; 3) итоговый проект должен поддаваться поддержке минимальными силами(те же время и деньги). Также есть др. маленькие области, но я упомяну лишь одну, а именно компьютерные игры: в этой области секрет успешных проектов заключается в искусстве максимально быстро производить полотна неподдерживаемого кода у которого всего две задачи: 1) работать; 2) жрать минимум компьютерных ресурсов. Точнее говоря, это не обязательно должны быть полотна и не обязательно неподдерживаемый код, но ввиду жесткой конкуренции получаются именно полотна и именно неподдерживаемого кода Большинство правил хорошего тона в программировании(аля "global variables is evil") просто напросто не нужны разработчикам КИ. Я не пытаюсь обидеть разработчиков игр - это просто констатация факта, которому, кстати есть простое объяснение |
| Автор: korian 16.3.2008, 03:11 |
| archimed7592, соглашусь тока для маленьких игр, причем для компаний однодневок во-первых потому, шо если компания постоянно занимается КИ, то повторно используемый код им необходим. а во-вторых, потому шо такое детище как WOW, написать и шоб оно работало (а они его еще и поддерживают, дорабатывают)... без соблюдений правил имху не реально плюс как многие пишут, правильно написанную прогу сделать более быстрой - обычно легко а сделать более быструю прогу правильной - обычно трудно |
| Автор: Rickert 16.3.2008, 06:21 | ||
Нет, ты ошибаешься, поверь мне. Сейчас компании ведут политику направленную на разработку движков максимально-расширяемых. То бишь движки наращивают мышцы до такой степени, что на их основе можно было делать новые игры. Разработчики КИ живут ныне продажей движков больше, чем самими играми. Сравнить, 3 года назад движок ку3 стоил 500k$, сейчас движок doom3 стоит порядка 2kk$ |
| Автор: vinter 16.3.2008, 10:00 |
| archimed7592, голословное утверждение, которые ты не сможешь ничем подтвердить, и я уверен что ты не прав Если бы все писали "лишь бы работало", то ни о каких аддонах изменяющих функционал и речи бы быть не могло. |
| Автор: archimed7592 16.3.2008, 11:09 |
| Rickert, vinter, извиняюсь, я забыл дописать, что спорить на этот счёт у меня нет ни времени, ни какого-либо желания. Уй ты госпади, а 2 кк - это что, предел мечтаний? Ну сколько у них будет продаж движка? И сколько они поимеют с продажи самого дума? |
| Автор: Rickert 16.3.2008, 11:14 |
| archimed7592, а теперь посмотри сколько уже народа купило движок unreal 3 и сколько куплено копий того ж gears of war. |
| Автор: vinter 16.3.2008, 11:20 | ||
я думаю ты еще забыл добавить "ни аргументов" |
| Автор: mes 16.3.2008, 14:03 |
извините за оффтопик и неграммотность, но 500k$ и 2kk$ это сколько в нормальной (у.е.) валюте? |
| Автор: vinter 16.3.2008, 14:08 | ||
к это 000 |
| Автор: mes 16.3.2008, 14:14 |
спасибо - чуствовал что так, но что то не верилось ... придется поверить )) |
| Автор: archimed7592 16.3.2008, 15:12 |
Да, vinter, я никогда не работал в индустрии КИ и моё мнение - лишь догадки. ОК, а ты работал? А кто работал? Выходит, ни у кого из нас аргументов нет. |
| Автор: Rickert 17.3.2008, 04:47 |
| archimed7592, я занимался разработкой игр, разговаривал и вёл интервью с несколькими реально разрабатывающими движки людьми. Так что можешь мне поверить. Давай смотреть логично. Взгляни на тот же Crysis и gears of war - два мостодонта, которым нужны 4 ядерные процессоры и triple sly карты от Nvidia + несколько гигов оперативки. Движки, на которых они написаны настолько монструозны, что старшно думать. Но они полностью раширяемы и независимы - из них моржно слепить любую игрушку, и я думаю даже не прибегаю к перекомпиляции исходников, имея на руках только SDK - во всяком случае так можно сделать на движке третьего дума. Помнится когда ещё была якобы-ворованная альфа версия - я сам лично разбирал его движок и писал статьи для doom3.ru - они там ещё есть, можешь почитать. Ищи поиском по автору - [ss]3L33T@ aka Cyber Optik. В данный момент, например, на его основе пишется мод - гонки, переработка на тему Carmageddon'а. Короче о чём я: народ пишет масштабируемые движки, которые стоят хренову тучу бабла и потом начинают его продавать и никто не заботится о производительности: применяют эти дурные (ИМХО! Я сам их применяю, потому что требуют стандарты, будь моя воля я б выкинул все эти stl и дурные правила по инкапсуляции кода. Это ИМХО - не надо на меня нападать!) правила и никто не думает о производительности - вот так и получаются Crysis'ы, которые идут у 25% игроков. КИ - это уже давно как шоу-бизнес - на нём делают деньги, а золотые времена, когда игры приносили удовольствие и восторг от идей - прошли, сейчас единицы способны что-либо придумать. |
| Автор: Mayk 17.3.2008, 07:32 | ||||||||||
Это не "имхо". Это бред.
йа сморел исходнеги кваг и крестиков нолигов, так что можешь мне поверить Добавлено через 6 минут и 29 секунд Да потому что они глобальны и могут поменятся в любой момент. Не очень хорошо может сказаться при отладке(мол где ж она изменилась-то?) (утрированный пример: сравнить
и
на кол-во вызовов ф-ций dar(); ) , с многопоточностью плохо подружить.
ССЗБ |
| Автор: Rickert 17.3.2008, 08:57 | ||||
Программисты стали настолько слабы, что не могу контролировать процесс изменения переменных? Твои слова актуальны для крупных команд разработчиков. Я не собираюсь тебя убеждать в чём-то. Делай как знаешь, это было имхо.
Флаг в руки, транспорант тебе на шею, только между тобой и мной есть очевидная разница. |
| Автор: vinter 17.3.2008, 08:57 | ||||
не все так печально, если бы все было так то игры бы загнулись давно.
а как по твоему NVidia & AMD деньги зарабатывать, зачем тогда нужны слай и кроссфаер? Да и что то я подозреваю, что там не специально сделали неоптимизированный движок, а просто графика движется вперед и жрет все больше ресурсов. |
| Автор: Lazin 17.3.2008, 09:31 | ||||||
| archimed7592, поддерживаю)))
да, все из-за STL посмотри код Ogre3D или Irrlicht, там хватает и смарт поинтеров и контейнеров и шаблонов)) почитай что пишут профессиональные разработчики игр...
Я однажды имел счастье доделывать программу, в которой было около 30 глобальных переменных, которые использовались в разных функциях, в итоге получалось так, что меняя что-нибудь в одном месте, ломалось в другом, разные части программы очень сильно друг от друга зависили... О том что-бы что-то там распараллелить, расширить и тд не могло быть и речи.. короче просто переписал все))) теперь вспоминаю с содроганием...
и хорошо ИМХО, Современная разработка игр - это в первую очередь разработка контента, движок для каждой игры никто не пишет... А к движкам требования очень высокие, они как правило используются во множестве игр, они кросс-платформенные(PC и консоли), расширяемые и тд... и очень грамотно написаны... например unreal стоит 3 миллиона баксов, чуваки написавшие Irrlicht говорят что он нереально крут и стоит своих денег более чем, unreal 3 это не только графичесский движок, это еще и игровой движок, и АФАИК, целая среда разработки... от разработчиков игр требуется только создать контент |
| Автор: MAKCim 17.3.2008, 09:44 |
| меня просто умиляет позиция "табу" на глобальные переменные я уже который раз говорю на форуме, что стереотипы мешают нельзя на вещи смотреть однобоко |
| Автор: vinter 17.3.2008, 10:29 | ||||
Максим но все же лучше использовать static члены класса\структуры чем глобальные переменные, принцип тот же, а ошибок можно получить в разы меньше.. Добавлено через 48 секунд
если это действительно новая разработка, претендующая на звание лучшей игры года, то скорее всего движок все же пишут. |
| Автор: Alek86 17.3.2008, 10:44 | ||||
| MAKCim, ну подскажи, плиз, в какой ситуации глобальные переменные (не константы) выигрывают у тех же статиков с функциями доступа? Ну, кроме прог-лабораторных, на пару десятков строк... Rickert, как я понял, ты утверждаешь, что игры (точнее движки) должны писаться хорошо? Тогда там точно глобальных переменных не будет
Если они будут хоть немного друг от друга зависеть, то перечитай еще раз:
ну и archimed7592, откуда такие познания про полотна неподдерживаемого кода? |
| Автор: Earnest 17.3.2008, 11:12 | ||
| Глобальные переменные не имеют никаких преимуществ перед, например, синглетонами (которыми их следует по-возможности, заменять) кроме одного: их можно очень быстро добавить и использовать. Т.е. глобальные переменные - это способ сделать костыль, когда нужно быстро, а дизайн иного не позволяет. Но подлежат впоследствии редизайну. Кстати, статические переменные класса в этом смысле ничуть не лучше - только имя другое, а суть та же. ИМХО, статические переменные вполне хороши в локальном контесте (один - несколько модулей, связанных с реализацией какой-то функциональности); если речь идет о каких-то глобальных установках, которые нужны всем - лучше все собрать в кучку и выдавать по запросу - вместе или по отдельности, как удобнее. Это, кстати тоже вопрос инкапсюляции, как и открытый доступ с членам классов. Регламентированный доступ всегда лучше.
Вот-вот, в эти грабли никто не верит, пока сам не наступит. Согласна со всеми предыдущими ораторами, говорившие о сложности слежения за изменением глобальных переменных. Что касается квалификации программистов, которые "не могут этого отследить" - им что, больше делать нечего, кроме как за другими (или за собой) г. убирать? |
| Автор: Rickert 17.3.2008, 11:25 |
| Ну вообщем, я не собираюсь тратить время и доказывать свою точку зрения людям, которые принципиально не хотят "слазить с насиженного". Всем удачи |
| Автор: Lazin 17.3.2008, 11:28 | ||||
| с глобальными переменными (и синглтонами) есть еще одни грабли... (наступал лично пусть есть глобальная переменная для записи данных в лог - CLogger Log; и есть еще одна глобальная переменная, нужная для того что-бы что- то проинициализировать...
я как-то раз по наивности добавил в конструктор этого объекта вывод в лог
последствия были плачевны, так-как переменная Log еще не была создана во время создания переменной wsock_inst... да нет никакого табу... |
| Автор: SABROG 17.3.2008, 11:37 | ||
Это наверно косяк проектирования, т.е. надо в нужной последовательности все инициализировать, где нить сразу после main или в конструкторе класса главного окна |
| Автор: bsa 17.3.2008, 11:57 |
| SABROG, вся прелесть глобальных объектов в том, что неизвестно в какой последовательности они инициализируются. Синглтоны призваны решить эту проблему. Подобные классы нужно инициализировать не глобально (у них же есть статический метод, доступный отовсюду), а в main() например, и в требуемой последовательности. Это позволяет вообще отказаться от глобальных переменных. |
| Автор: Alek86 17.3.2008, 12:01 | ||
зачем в последовательности? вся прелесть синглтона в том, что вообще о последовательности думать не нужно. "вызываешь" переменные через функции, и все. Что еще не инициализированно на тот момент и тебуется, само проинициализируется... |
| Автор: SABROG 17.3.2008, 12:06 | ||||
Ну значит у Lazina синглтон не правильно построен, насколько я помню там вызов всех методов таким образом происходит:
Где Instance() как раз инициализирует новый экземпляр класса и возвращает указатель, либо использует старый, если инициализация уже где-то была. |
| Автор: MAKCim 17.3.2008, 12:20 | ||||
засчет чего? Earnest тут права, суть одна и та же
с функциями доступа в любой ситуации без - аналогичны глобальным переменным |
| Автор: Lazin 17.3.2008, 12:22 |
у меня там только глобальные переменные, никаких синглтонов)) если-бы log был синглтоном то да, такой проблемы-бы не возникло... |
| Автор: Alek86 17.3.2008, 12:24 | ||||
в смысле, если в классе Globals приватный статик, который имеет функцию доступа, то он хуже глобальной переменной? Добавлено @ 12:24 где траву берешь? ;) Добавлено @ 12:26 ты же говорил
чето я не врублюсь - наверна выспаться нужно |
| Автор: MAKCim 17.3.2008, 12:30 | ||
давай определимся, что значит хуже я говорю с позиции производительности Могилевская 5/1/50 |
| Автор: Alek86 17.3.2008, 12:36 |
а я говорю с позиции нормального компилятора, который мелкие функции (делегирование и т.п.) инлайнит если кто-то использует допотопный компилер (и он не догадается при этом поставить inline), то у него будет 0,1% уменьшение поизводительности, но, поскольку их щас почти никто не использует... хотя, если юзать синглтон, то небольшое падение производительности будет но альтернатива - ипаться с временем жизни - имхо, хуже |
| Автор: vinter 17.3.2008, 12:48 |
засчет не замещения глобальной статик члена - переменной, локальной и подавление проблем связанных с этим |
| Автор: bsa 17.3.2008, 12:53 | ||
А как удалять этот класс? ты об этом подумал? Или ты его не удаляешь? |
| Автор: SABROG 17.3.2008, 13:09 | ||||
А для чего удалять синглтон ? Насколько я понимаю смысл в том, чтобы он "оживал" в момент старта программы и "помирал" при выходе. А там уже сама ОС его зарубит. Я правда не знаю вызовется ли деструктор в этом случае, не работал с синглтонами, паттерны проектирования для меня пока темный лес, как и вообще тема классов в целом. |
| Автор: Lazin 17.3.2008, 13:11 | ||||||
если-бы я в своем примере написал
то не факт что работало-бы, даже если-бы Log был реализован как синглтон Добавлено через 2 минуты и 3 секунды
кажется мы об одном и том-же))) вызывается, и если деструктор использует другой глобальный объект, то тут опять грабли)), почитать об этом можно у Александресску... |
| Автор: archimed7592 17.3.2008, 13:19 | ||||||||||
Хорошо, я тебе верю, давай, действительно, взглянём на логику Для начала - ты говоришь, что занимался разработкой игр... Давай определимся, каких игр? Каков был их бюджет? Окупились ли они? И т.д. Ну а теперь о твоём основном аргументе: движок наше фсё! Отлично, возможно, движёк - это "нормальный"(в моём понимании), масштабируемый код. Ну и что? Давай проведём аналогию с областью прикладного ПО: для GUI-development есть такие "движки", как VCL, Qt, .NET WF и много других. Все они с некоторого ракурса - идеал того, как нужно "правильно проектировать и реализовывать". Теперь возмём отдельный движок: VCL. Моя личная оценка этого движка: твердая четвёрка(по пятибальной шкале), т.е. движёк очень даже хороший. И теперь скажи мне: что мешает разработчику реализовывать бизнес-логику аккурат в обработчиках событий? А ведь реализовывают... И потом такие продукты даже продаются... Теперь вернёмся обратно к КИ - по аналогии, каким бы ни был хорошим движок, саму игру можно реализовать в любом стиле. Почему реализовывают именно в плохом стиле я писал в предыдущих постах. Т.е., другими словами, движок - это лишь малая часть игры и это не аргумент в пользу качества кода самих игр.
Да дело не только в изменении переменных, опять же, прочитай мои предудущие посты. Кстати, а что, КИ разрабатывают команды из 1-2 разработчиков?
А нет никакого табу. http://www.parashift.com/c++-faq-lite/big-picture.html#faq-6.15, http://www.parashift.com/c++-faq-lite/big-picture.html#faq-6.16
Логические умозаключения основанные на общение с несколькими разработчиками КИ, чтении форумов, посвящённых КИ и т.д.
Приватный статик = глобальная переменная с ограниченой видимостью, но, затем расширенной видимостью до глобальной. Т.о. не хуже, но и не лучше. |
| Автор: Alek86 17.3.2008, 13:30 |
| про удаления как-то не задымывался - надо почитать... лучше хотя бы тем, что легче отследить изменения в отладке. |
| Автор: MAKCim 17.3.2008, 13:40 | ||
даже явный inline может не заставить компилятор заинлайнить функцию о чем можно здесь говорить? |
| Автор: Alek86 17.3.2008, 13:49 | ||||
можешь привести пример. когда компилер может незаинлайнить функцию доступа?
|
| Автор: bsa 17.3.2008, 13:56 |
| Alek86 отключи оптимизацию и она не будет заинлайнена |
| Автор: MAKCim 17.3.2008, 14:36 | ||||||
пожалуйста
это GCC 4.1.2 без оптимизации |
| Автор: Alek86 17.3.2008, 14:53 |
| за что платишь, то и получаешь... извините уж, не стал ограждаться от подобных придирок и писать "в релизе с оптимизацией" |
| Автор: MAKCim 17.3.2008, 15:02 |
| Alek86, понимаешь в чем тут дело оптимизация - это дело хорошее, но она нигде не специфицирована даже на уровне отдельно взятого компилятора да, есть некоторые общие правила, которые позволяют включать/выключать определенного рода оптимизации, но не более того мы не можем полагаться на то, что не специфицировано, в том числе на инлайнинг |
| Автор: JackYF 17.3.2008, 17:00 | ||
ну, я тоже не могу полагаться на то, что завтра на меня не упадёт метеорит В общем, почитал я дискуссию. Основное правило у меня такое: глобальные переменные используются только при необходимости, в основном, когда их использование существенно влияет на скорость исполнения ключевых элементов программы. Но примеров таких мало. |
| Автор: MAKCim 17.3.2008, 17:37 | ||||
не верно я тебе даю 100% гарантию, что завтра на тебя метеорит не упадет
угумс насчет примеров, посмотри код ядра Linux там глобальных переменных очень много это хоть и С, но все же |
| Автор: Alek86 17.3.2008, 17:40 |
хоть ни в каком стандарте этого и не написано, да? (кстати, скорее 99,999999%-ю гарантию) както кощунственно, имхо, ориентироваться на человека (Торвальдса) который почем зря материт (в прямом смысле этого слова) C++ кстати, интересно, он в памяти хранит все взаимосвязи и места изменения глобальных переменных в ядре? или на бумажке рядом? |
| Автор: MAKCim 17.3.2008, 18:00 | ||||
почему не написано? метеорит ниоткуда появится не может, правильно? если бы была потенциальная опасность для Земли, это было бы всем известно причем известно не за один день до столкновения отсюда вывод: гарантия 100%
никогда об этом не читал буду благодарен за ссылку
зачем что-то хранить? тут принцип простой либо данные полностью безопасны в плане доступа к ним (например per-cpu или атомарные данные), либо они защищены семафором/мьютексом/rw-блокировкой/... |
| Автор: SABROG 17.3.2008, 18:11 |
| Кстати тоже хочу ссылку, где Линус материт C++. Интересно какой бы язык программирования он тогда выбрал. Жители Припяти тоже давали 100% гарантию, что завтра они никуда не собираются уезжать, но ЧАЭС распорядилась http://www.bellona.ru/imagearchive/PICT0482.JPG. |
| Автор: MAKCim 17.3.2008, 18:16 | ||
не надо сравнивать падение метеорита и аварию на АЭС метеорит в отличие от аварии асинхронно упасть не может |
| Автор: bsa 17.3.2008, 18:18 |
| MAKCim, метеориты бывают разных размеров. Причем, далеко не все, долетающие до земли, могут быть зафиксированы заранее. |
| Автор: Alek86 17.3.2008, 18:23 |
| не помню, честно говоря, где именно с "плохими словами" для начала можно поискать в гугле по строке: "C++ is a horrible language" |
| Автор: SABROG 17.3.2008, 18:23 | ||||||||
Пора статью писать на тему "Что общего между C++ и метеоритами" Вот, что Лайнус пишет, если кто переведет смысл буду благодарен:
Ицточнег: http://thread.gmane.org/gmane.comp.version-control.git/57643/focus=57918 git - программа контроля версий типа cvs и subversion VCS - version control service/server Я так понял git написан на чистом Си, а C++ ему не нравится из-за навороченности с ООП и еще речь о каких-то крашах непонятных, говорит хотите систему контроля версий написанную на C++ со всякими stl, boost'aми и т.д. юзайте monotone (еще одна cvs). Грубо говоря ассемблер это наше всё
Упс И Jav'e досталось
|
| Автор: archimed7592 17.3.2008, 19:00 | ||||
| SABROG, он пишет, почему он выбрал именно Си для реализации Git(IIRC, дело было в 2005). Переведу только одно предложение, наиболее резко и лаконично показывающее отношение Линуса к С++
|
| Автор: MAKCim 17.3.2008, 19:04 |
| забавно |
| Автор: Earnest 17.3.2008, 19:45 |
| MAKCim, возвращаясь к глобальным переменным и производительности. Конечно, трудно спорить, что компилятор может, но не обязан встроить обращение к глобальной переменной через функцию, и если он этого не сделает, то обращение через функцию медленнее. Но, на практике, когда это критично? Если есть какой-то критичный кусок кода, изобилующий обращениями к какому-то синглетону (в цикле, например), что, религия запрещает скопировать ссылку в авто-переменную? А в остальных случаях разница нечувствительна. |
| Автор: JackYF 17.3.2008, 20:20 | ||
Ты не можешь мне дать 100%-ную гарантию ничего-либо, что ещё не произошло
Первый вывод неверен. Ты хочешь сказать, что вероятность неинформирования тебя об этом равна нулю? |
| Автор: vinter 17.3.2008, 21:13 |
| кстати кто что думает об интервенции китайцев на Дальнем Востоке? |
| Автор: MAKCim 17.3.2008, 22:06 | ||||
что делать в случае если он (объект, инкапсулированный в синглетон) будет уничтожен и локальная ссылка станет невалидной? Добавлено через 1 минуту и 6 секунд
думаю, да Добавлено через 2 минуты и 7 секунд
|
| Автор: Mayk 18.3.2008, 07:59 | ||||||
| синглтоны тоже не люблю. Люблю обратную инициализацию. Или как там этот паттерн называется: Вместо
делать
Программисты настолько слабы что не могут держать в памяти всё и вся. Если программа начинает не вмешацца на экран --- ОЙ. |
| Автор: Earnest 18.3.2008, 11:04 | ||
Решать проблемы по мере поступления. Использование глобальной переменной здесь тоже не поможет. Если объект может исчезнуть, когда ему приспичит, нужно принимать адекватные меры - ссылки считать, например. Добавлено через 2 минуты и 44 секунды Mayk, дык твой вариант подлиннее получается - за шо ж его любить? Синглетоны, конечно, не панацея от всего, как и все остальное, впрочем. Каждому сверчку - по шестку. |
| Автор: MAKCim 18.3.2008, 12:08 | ||||
вот пример
в some actions может идти, например, вызов функций, одна из которых удаляет variable (или реинициализирует (delete + new), или еще что-нибудь в этом роде) программа однопоточная |
| Автор: SABROG 18.3.2008, 12:30 |
Если возвращаться к теме об интервенции китайцев на дальнем востоке, то ради любопытства хотелось бы узнать как переводится слова "foo", "bar" и "foobar", гугл транслейт отжигает: "фоо", "бар". |
| Автор: MAKCim 18.3.2008, 23:15 |
| SABROG, http://en.wikipedia.org/wiki/Foo |
| Автор: SABROG 18.3.2008, 23:45 | ||
Спс, жалко там так и не написали "откуда есть пошла русская земля". А вообще странное у американцев понятие слова "хакер", для них это каста программистов фанатиков, а не отряд бойцов дельфистов выпущенных МГУ. У нас же это человек обязательно нарушающий статьи 272, 273 |
| Автор: bsa 19.3.2008, 00:27 | ||
http://ru.wikipedia.org/wiki/Хакер Это не у американцев странное, а у нас благодаря серости журналистов. Помню еще батя говорил мне года эдак 20-22 назад, что мечтает, чтобы я стал хакером (потому что это "высшая каста")... И об уголовщине речи вообще не шло (мне было лет 5-7). |
| Автор: archimed7592 19.3.2008, 15:19 |
| Об чём угодно(и метеориты и вероятностная модель и foobar и хакеры), только не о глобальных переменных |
| Автор: MAKCim 19.3.2008, 18:03 |
| archimed7592, все теперь любой оффтоп будет караться |
| Автор: nerezus 9.4.2008, 06:46 | ||||||
Причем работает сама(без вмешательства пользователя). Т.е. ни за что мы получаем ОЖИДАЕМУЮ оптимизацию.
P.S. Не вижу абсолютно никакого смысла в глобальных переменных. Ибо ООП. Однако не вижу ничего плохого в их использовании(использую сам в движке своем, не завожу класс конфига, к примеру) |
| Автор: UnrealMan 9.4.2008, 11:29 | ||
Поясни, что подразумевается под "статической константой математического модуля". |
| Автор: bsa 14.4.2008, 21:25 | ||||||
|
| Автор: UnrealMan 15.4.2008, 00:51 | ||||||||
Что это - глобальная статическая константа? |
| Автор: archimed7592 15.4.2008, 03:40 |
| А зачем её быть статической? Она что, только в мат. модуле используется? |
| Автор: bsa 15.4.2008, 23:24 | ||
Думаю, чтобы заставить компилятор соптимизировать код |