Ууу.
Сейчас меня будут опять неправильно понимать.
Но я уже привык.
Вот смотри.
Есть pImpl.
pImpl — это идиома.
Не более, чем один из многих способов отделять мух от котлет.
В чистом виде — в реальном (клиентском) коде — pImpl это или не pImpl — обычно никому не интересно.
Это — деталь реализации.
Никто не будет жертвовать читабельностью и устойчивостью приложения ради красного словца pImpl.
Все просто используют его там и так, как они считают нужным.
Никто не кричит, что это "САМАЯ КРУТАЯ ФИШКА В ИСТОРИИ ЯЗЫКОВ ПРОГРАММИРОВАНИЯ И Я ЕЁ УМЕЮ ПРИМЕНЯТЬ!!!".
Благо, что идея pImpl — тривиальна, напрочь связана с конкретным языком и не имеет "реализации" как таковой.
pImpl — сам себе реализация.
Шаблонный pImpl — извращение, в которое я могу постмодернистски поверить. Не более того.
Ценители различают несколько видов pImpl'ов.
Иногда бывают интересны отличия в применении идиомы pImpl при реализации ряда паттернов.
Есть фабрики (в широком смысле этого слова).
Фабрики — это инструмент.
Никто не бегает, не трясёт писькой и не орёт "У МЕНЯ В ДВИЖКЕ ЕСТЬ ФАБРИКИ!!!"
Потому что
- Ахуеть! Дайте две!, — отвечают ему одни.
- Да ты у нас орхетектор, — резюмируют другие.
Потому что фабрики есть везде. В том или ином виде.
Обычный new — это тоже, в широком смысле слова, — фабрика.
И уже тем более some_stream >> smart_pointer_to_variant.
И любой загрузчик — всегда фабрика.
Специалистам бывает интересно сравнить те или иные фабрики между собой.
Иногда можно использовать решения, унифицирующие и увязывающие различные типы фабрик между собой.
Фабрики на прототипах, конструирование объектов из мементо, моникёры.
В наборе шаблонных реализаций фабрик есть смысл.
Соответственно — есть смысл в их параметризации, policy и т.п.
В реальной жизни бывает много разных фабрик, — и схожесть их использования — не более чем обычная рутинная работа проектировщика.
Никто не будет жертвовать читабельностью и устойчивостью приложения ради красного словца "фабрика". Все просто используют фабрики там и так, как они считают нужным.
Есть data-driven.
Data-driven — это подход. Целый спектр концептов.
Стирание границ между микро-, макро- и мета- кодом и данными.
Иногда — данные как код. Иногда — код как данные.
Всегда — структура как данные. Всегда — декларативность как застывшая архитектура.
Иногда — куча внешнего инструмента. И всегда — куча документации.
Если кто и бегает с воплями "У МЕНЯ НАТУРАЛЬНО ДАТАДРИВЕН!!!", то типично это означает либо новый проЭкт, либо полностью насмерть заdata-drivenный инструментарий со схемами объектов прямо в инструменте.
Куча DSL, генерация кода, интерпретация ассетов в run-time и так далее.
А может быть — просто winnie.ini.
Никто не будет жертвовать читабельностью и устойчивостью приложения ради красного словца "data-driven".
Решение уходить с поддерживаемого средой стиля в чистое море — это всегда серьёзное решение. Никто не будет заставлять всех писать GetObjects(SQL-запрос или XPath) в игровом коде БЕЗ специального и осознанного и давшегося в муках решения.
Потому что отладчик в настоящем data-driven потом нужно писать самому, и придумывать или использовать нотацию, имена и т.п. — тоже самому.
Потому что просто XML или просто SQL или просто XSD — это всего лишь начало(tm).
И, наконец, есть синглтон.
Синглтон — это или, а некоторые считают что еще и.
Вкратце, синглтон — он чтобы, а еще — чтобы.
А совсем вкратце: http://c2.com/cgi/wiki?SingletonConsider...
Ensure a class has only one instance,
and provide a global point of access to.
То есть "два-в-одном".
Потому что лучшие и самые ясные проектные решения — это когда два-в-одном.
И никак иначе.
То есть не просто namespace или аналогичные языковые и внеязыковые средства.
И не просто один экземпляр объекта, созданный (типично) фабрикой.
Ей же настроенный. Data-driven и через моникёр.
Не просто.
Поэтому все бегают, трясут писькой и радуются "У НАС ВСЁ ЧЕРЕЗ СИНГЛТОН И Я ТЕПЕРЬ ОРХИТЕКТАР!!!" и спрашивают "КАК МНЕ СДЕЛАТЬ ПОЛУТОН С ПОДСЧЁТОМ ССЫЛОК И ЧТОБЫ НИКТО НЕ УШЁЛ ОБИЖЕННЫМ?!!!"
- Ахуеть! Дайте пять!, — подхватывают одни.
- Какая у вас орхетектура, — изумляются другие.
- Как удобно! Мы всего лишь пишем Foo::GetInstance/*<Moo>*/().bar() — и всё работает, не то, что раньше!, — радуются программисты.
- И само создаёт объекты!!! И удаляет их!!!, — гудит толпа на многопоточной галёрке.
- И настраивается само, офтомотически!, — радуются конфигураторы и ревнители фабричного гудка.
- Теперь можно просто писать template<typename T> class Singleton, — снисходительно объясняет аффтар.
- И всё заипёццо.
И действительно.
И ведь реализация — нетривиальная (не то, что pImpl!).
И ведь паттерн — а вовсе даже не идиома.
И ведь шаблонно можно написать один раз. А потом еще раз двадцать подрихтовать под разные применения и policy.
И клиентский код не уродует совсем, если правильно используется.
Удобная штука.
Почему бы не сделать паттерн
МАКСИМАЛЬНЫЙ ИЗ ДВУХ ОБЪЕКТОВ
И идиомой не назовёшь.
И проблем в реализации — столько же (если хочется семантики как в макросе max).
И реализация нетривиальна.
И языком никак не поддержана.
Удивительно...
Итак, канонические drawbacks канонического (Meyers) синглтона:
Синглтон — это глобальная статическая переменная.
Избавляться от него так же тяжело.
Он точно так же расслабляет программистов.
Как всякая глобальная переменная, синглтон предоставляет единую точку входа.
Это (при аккуратном обращении и в правильном контексте) — хорошо.
А вот почему синглтон должен быть ровно одним классом — это для меня непонятно совсем.
Почему бы ему не быть фасадом для целой подсистемы?
Подумай о рендере, о файловой системе.
Почему бы ему не быть фабрикой?
Подумай о fopen и файловых системах.
Почему единственный экземпляр класса с конкретной точкой входа должен ранить весь класс в целом?
Подумай о std::ostream и std::cout.
Точно так же, как и со статическими переменными, непонятен порядок инициализации.
Причём вообще.
А если понятен — почему бы не инициализировать их централизованно?
Типичная запись вызова методов синглтона вообще приводит меня в бешенство.
foo::GetInstance().bar().
За это нужно публично кастрировать.
Зачем каждый раз писать GetInstance()?
Зачем весь коллектив пишет GetInstance()?
Чтобы компенсировать лень одного урода, которому было влом поместить всё это в namespace и аккуратно написать для каждого метода GetInstance() самому?
У нас C++ или замазка для мозгов?
Кидать исключения в синглтоне опасно.
Особенно во время его инициализации — потому что может быть статика.
И не только, поскольку другой синглтон может быть в состоянии инициализации и вызвать тебя, не подозревая, что ты сейчас начнёшь создаваться и т.д. А он может быть в статике.
Или — в твоём деструкторе.
Синглтон создается по инициативе программиста.
Который типично вообще не в курсе, что именно в его функции и создастся экземпляр. Более того, он часто не в курсе, что невинная цепочка вызовов приведёт к такому бардаку.
Типично к моменту неявного создания синглтона программистом
- либо уже известны параметры его инициализации — и тогда непонятно, почему бы не создавать его централизованно.
- либо параметры еще неизвестны — значит всё навернётся.
Синглтон уничтожается х/з когда.
Это вообще полный бардак.
Птица-феникс, вечно живые экземпляры, все дела.
Это самые ходовые пойнты.
Я мог забыть что-то ещё, потому что никто в реальной жизни тупые синглтоны не использует.
Типично есть целая связка helperов, дающая или одно или второе или оба вместе: ensure a class has only one instance, and provide a global point of access to.
Но это конкретные helperы на конкретные ситуации.
И я принципиально не буду их называть синглтонами.
jabber
18.12.2012 21:38 psto
Do you really want to delete ?
у меня глаза вытекли где ты это взял?
угадай
уже было
ппц сколько говна в этом вашем цэпипи
просто у вас нет модулей, вот вы и страдаете.
вирта на вас нет
Очередной питух, неосиливший Lisp
дваждую
Чет как-то хуйни понаписал вроде, я не до конца понял, но мне кажется это просто плюсопроблемы.
У тебя тут много умных слов, но я ничего не понял. Наверное ты очень хороший орхетектор.
его лайкают а тебя нет жпг то
оперативно
и чо
в D есть, где твой турбопаскаль теперь?
@238328 мой вирт
лол //наоборот как раз
http://users.livejournal.com/_winnie/186...
не я //):
толсто
ппц ты тупой
Ладно
чо
Не знаю. Как дела?
Откуда? 1.
У меня тоже.
отвечай на мой ответ
У меня аргументы кончились.
сполосни их
У меня воды горячей нет, можно я их просто протру влажной салфеткой?
смотря от чего она влажная
Я не лезу в ее личную жизнь, а она в мою.
не пизди, ты ею тереть собирался
Это плата за то, что она живет с друзьями у меня.
тем более ты должен знать от чего
Мы почти не общаемсяю Я целыми днями на работе и учебе, она по вечерам тусит с друзьями. Мы очень редко пересекаемся и то, когда она спит.
зачем тебе работа и учёба если смерть неизбежна
Чтобы не умереть в армии, каналицационном коллекторе или дома у родителей.
какая разница где умирать лул
В моей маленькой комнате в общаге я хотя бы смогу умереть в тепле и комфорте смотря Adventure Time. В иных случаях — я умру в страшных муках.
Эн нет, ты ответил про "как", а не про "где", софистичекий пидор! Но раз уж ты так хочешь умереть в пле и комфорте и без мук, то есть масса способов без этой ненужной хуйни. Ну, или можно просто не умирать вообще :)
А зачем жить?
А зачем ты живешь? Ведь ты мог бы прямо сейчас умереть и делать то же самое.
Я не могу убить себя. Это единственная причина моей жизни.
Можешь.
Могу. Но не хочу. Пожертвовать собой — легко, а вот просто убить нет.
Вооот. А почему ты не хочешь?
анус твой турболаскай
А в его анусе оберон?
хачкель
или гомо лисп
в моём анусе все анусы мира
One Ring to rule them all
>2013
>star trek
N Ч0?
Вот и выросло поколение...
да понимаешь неуважение просто, ты как лох, в 2014 таким заниматься
нахрен нужны эти Стругацкие?
через три часа всё кончится, какая разница вообще
какие
ставь борщ!!)))
(: // уже на самом деле
хорошо быть тобой
мне норм
нет //на самом деле //
нет, норм
Все так.
бля да на ИНТЕРКАЛ надо писать во-первых название красивое во вторых язык простой
Газовые горелки Intercal (Интеркал) SGN в Минске. Беларусь ...
ИНТЕРКАЛ — микроботаник Виртуальный дневник Интеркал.
http://www.liveinternet.ru/users/3872817...
да вот на этом
сквирт
ппц ты тупой
ты
я
да
пруф?
в прессе
я весь кончился пряма тута
ах ты сучка
ппц ты тупой
почему?
кто обзывается тот сам так называется
!
зачем ты нашёл причину? ппц ты тупой // :)
////только олдфаги поймут
ракование нулевого уровня
я раковал еще тогда, когда это было модно
я олдфаг и хiхiл
возможно вы имели в виду: олдфаг и iiiii
i пiдiр i сiciл
i iiiii i iiiii
а я раковал когда это было уже не модно
!!!! ! !!!!!!!!! !
было у меня в блоге, прости
блджад как???!!!!
:)
i
magnets
маджик
твоё что насрал, и то пока летит
таджик
сделай!! или ты не таджик?
на всё воля аллаха, куркума-джян
:-J
инщалла
Видимо понял что на самом деле не хочет ггг
Как?
фейл по обоим пунктам
Потому, что разочарую несколько людей.
оберона его ануса звучат вызывающе
хачкель-истеричка не видит этот псот, а жаль, вот бы ему бомбануло!
не льсти себе
Но ведь ты же умрёшь и тебя это не будет больше беспокоить, так какая тебе разница? Более того, они тоже умрут и уже вполне разочарованы этим фактом. Так что нет, не то.
как-то так