psilogic: (Default)
[personal profile] psilogic
Под катом много мата. Накипело.


Лектор по психологии труда - эдакий старичок-профессор толкует (цитирую по памяти): "концепция индивидуального стиля деятельности заключается в том, что каждый индивид достигает максимальной производительности, если имеет свободу варьировать трудовую деятельность под свой темперамент и индивидуальные черты характера. Например, ткачиха-холерик быстро бегает от станка к станку, ткачиха-флегматик двигается медленнее, но более рассчетливо, в результате обе достигают высокой произволительности. Чего бы не было, если бы они пытались подражать друг другу."

Я это к чему. У нас, в программировании, в последние годы, куда ни плюнь - в очередной пиздоблядский злоебучий стандарт попадешь. Жопу почесать нельзя без того, чтобы не вляпаться в очередной RPC, блядь. И как же они заебали этой модой на тотальную стандартизацию, чтобы пизду им только во сне видеть.

Паттерны, блядь, придумали. Напишут два слва, придумают название по-красивше и, сидят довольные, как кусок говна на люстре, вовсю свою писульку рекламируют, хуем помахивая. И ведь, в чем пиздопроебина ниже ватерлинии: особливо любят на паттерны дрочить всякие гандоны, которые какой-нить двоичный поиск за неделю не напишут. Даже у нас на работе на что публика сурьезная - и то нет-нет да про это дело упомянет... А уж в инете жЫвотных от прораммирования - как блядей в кутузке после рейда озабоченных ментов...

Date: 2005-11-07 11:40 am (UTC)
From: [identity profile] psilogic.livejournal.com
[ Ну если брать в качестве примера ту реализацию, которую вы привели в стёртом комменте -- то до правильной ей очень далеко. ]

[ Во-1ых не закрыты конструктор копирования, деструктор и оператор присваивания. ]

Конструктор закрыт

[ Во-2ых никак не определён порядок уничтожения синглтона. ]

Вот потому то деструктор вообще не написан - его реализация зависит от конкретного случая. Если надо, чтобы уничтожался он овнером, то одно, если по счетчику ссылок - другое и т.п. Аналогично с конструктором присваивания.

[ потому что вы забыли выполнить присваивание в getInstance().]

А что в коде, составленному после чтения болтовни по паттернам, я бы ни в коем случае не опачатался бы? :) Так же точно опечатался бы - уж такая работа, что опечатки считаются в порядке вещей.

[ В-4ых - а почему именно так? ]

А почему не так? Работает - и ладно.

[ Ведь можно вместо проверки указателя на null использовать статические переменные -- или класса, или функции. ]

Можно. Можно вообще написать еще 10 вспомогательных классов и красивенькую иерархию в розе нарисовать :) Но это если платят за строки, а не за сроки :)

[ А что начинает твориться, когда есть несколько зависимых синглтонов... ]

А что начинает твориться? :)

Вы так и не ответили на мой вопрос. Вот ввели понятие "синглтон", описали. КАК это помогает производственному процессу? Вы сказали про грабли - на КАКИЕ грабли мешает наступать и почему?

[ Наоборот, во вступлении прямым текстом пишут, что это не так. ]

Ну и зачем новые названия для старых понятий? Что дают новые слова??

Date: 2005-11-07 04:33 pm (UTC)
From: [identity profile] rmihael.livejournal.com
> Конструктор закрыт
Только обычный, а не копирования.
> Вот потому то деструктор вообще не написан - его реализация зависит от
> конкретного случая. Если надо, чтобы уничтожался он овнером, то одно,
> если по счетчику ссылок - другое и т.п. Аналогично с конструктором
> присваивания.
Конкретных случаев не так уж и много. И вполне полезно их рассмотреть в одном месте во избежание различных граблей. У тех же Влислидеса и Александреску примеров таких граблей именно для синглетона приведено немало.
> А что в коде, составленному после чтения болтовни по паттернам, я бы ни
> в коем случае не опачатался бы? :)
Да стебусь я слегка :)
> А почему не так? Работает - и ладно.
Именно, что работает. А остальные варианты работают далеко не всегда. И если бы я в своё время не прочитал подробного разбора синглетона как шаблона, то непременно бы реализовал бы его на статическом члене класса. Тем более, что строк там меньше.
> А что начинает твориться? :)
Начинает играть неопределённый порядок уничтожения объектов. Сам на такое натыкался, очень неприятный баг.
> Вы так и не ответили на мой вопрос. Вот ввели понятие "синглтон",
> описали. КАК это помогает производственному процессу? Вы сказали про
> грабли - на КАКИЕ грабли мешает наступать и почему?
1. Словарная функция.
2. Грабли у Александреску и Влислидеса, делать конспект у меня охоты нет, уж извините :)
3. Опыт накапливается. Не нравится вам какой-то шаблон -- не используйте. Мне вон Visitor не нравится, так я без него и обхожусь.
> Ну и зачем новые названия для старых понятий? Что дают новые слова??
А зачем математики определения вводят? Вон Ньютон уже вполне спокойно оперировал пределами и производными. Хотя определения появились сильно позже. По вашей логике надо было просто тщательно курить "Флюкции и флюенты", а не страдать чепухой с формальными определениями.

Date: 2005-11-07 05:00 pm (UTC)
From: [identity profile] psilogic.livejournal.com
[ Только обычный, а не копирования. ]

А зачем? Защита - не самоцель, при остром желании в одном месте можно ведь и memcpy поюзать.

[ У тех же Влислидеса и Александреску примеров таких граблей именно для синглетона приведено немало. ]

И как ПАТТЕРН позволяет грабли обойти? Пример?

[ И если бы я в своё время не прочитал подробного разбора синглетона как шаблона, то непременно бы реализовал бы его на статическом члене класса. Тем более, что строк там меньше. ]

Объясняй, давай, в чем бонус.

[ Начинает играть неопределённый порядок уничтожения объектов. Сам на такое натыкался, очень неприятный баг. ]

При чем тут паттерн?

[ 1. Словарная функция. ]

И только :)

[ 2. Грабли у Александреску и Влислидеса, делать конспект у меня охоты нет, уж извините :) ]

Хоть 1 пример граблей с пояснениями, почему именно ПАТТЕРН от именно этих граблей спасает.
Ошибки разные можно годами описывать - было бы желание :)

[ А зачем математики определения вводят? ]

Затем же, зачем программеры вводят функции - чтобы диповать информацию, обозначить часто встерчающуюся комбинацию слов одним словом.

Date: 2005-11-07 05:11 pm (UTC)
From: [identity profile] rmihael.livejournal.com
Давайте сначала определимся, что считать паттерном. А то как бы всё это в терминологический спор не вылилось.

Date: 2005-11-07 08:44 pm (UTC)
From: [identity profile] psilogic.livejournal.com
Вот вы и объясните - я же только по диагонали просмотрел, а вы, наверное, книжку прочли...

Date: 2005-11-07 10:40 pm (UTC)
From: [identity profile] firtree.livejournal.com
> И как ПАТТЕРН позволяет грабли обойти? Пример?

Не паттерн, а книжка про паттерны. В ней есть комментарии: вот здесь такие-то грабли, не наступите, типовые способы их обхода такие:...

> Объясняй, давай, в чем бонус.

А может, ты сам Александреску почитаешь?

Date: 2005-11-07 10:51 pm (UTC)
From: [identity profile] psilogic.livejournal.com
дык мне 1 пример чтобы понять, есть ли смысл читать
may be там про те грабли, которые давно знакомы...

Date: 2005-11-07 11:35 pm (UTC)
From: [identity profile] firtree.livejournal.com
Ну вот ты можешь мне точно описать время жизни глобальной статической переменной? А можешь сделать так, чтобы оно было меньше или больше по вкусу? Например, для конструирования нужна информация, которая при запуске спрашивается у пользователя или из конфигурационного файла. Или при окончании возникает потребность в переменной уже после окончания main () (для этого придуман феникс). Высший пилотаж - это задавать отношения между синглтонами "этот создаётся раньше, этот создаётся позже". Причём заметь, между синглтонами в разных единицах компиляции, которые знать друг друга не знают. А если надо обойти семантику "освобождение обратно захвату"? В смысле, не "[{}]", а "[{]}". Хотя это редко нужно, и лучше передизайнить.

Так вот, для многих из этих задач синглтон как глобальная статическая переменная непригоден. Это и есть грабли.

Date: 2005-11-08 09:28 am (UTC)
From: [identity profile] psilogic.livejournal.com
Глобальная статическая по определению рождается на старте программы и уничтожается на выходе. Порядок рождения/уничтожения относительно других статических объектов неопределен. Если же ты хочешь "по вкусу" - то это будет уже не статическая, а динамическая (new/delete) а для разделяемого доступа статическим надо сделать указатель на нее.

[ Высший пилотаж - это задавать отношения между синглтонами ]

Ну если это высший пилотаж, старое поколение программистов может спать спокойно, не изучая паттерны :)

Date: 2005-11-08 10:16 am (UTC)
From: [identity profile] firtree.livejournal.com
Та-а-ак, и как же ты сделаешь динамическую переменную с разделяемым доступом?

Date: 2005-11-08 11:03 am (UTC)
From: [identity profile] psilogic.livejournal.com
очень просто: УКАЗАТЕЛЬ на нее сделаю статическим (для реализации указателя возможны варианты: extern-переменная, static-переменная, static-переменная класса, переменная в namespace, переменная, получаемая через get/set функции, которые опять же могут быть разных видов итд, итп)

Date: 2005-11-08 02:50 pm (UTC)
From: [identity profile] firtree.livejournal.com
Ну и? А инициализировать переменную кто будет, Пушкин? А удалять?

Date: 2005-11-08 04:25 pm (UTC)
From: [identity profile] psilogic.livejournal.com
Это зависит от конкретной задачи. Если согласно требованиям удалять будет Пушкин - значит Пушкин :)

Date: 2005-11-08 04:56 pm (UTC)
From: [identity profile] firtree.livejournal.com
О, с синглтоном большая часть науки и граблей, собственно, и состоит в том, кто и когда его создаёт и удаляет. Ну и ещё некоторое количество граблей - кому и как давать к нему доступ, например, в многопоточной среде.

Date: 2005-11-08 06:48 pm (UTC)
From: [identity profile] psilogic.livejournal.com
Ну понятно, что в зависимости от этих факторов, конструкция-деструкция может быть различной. Но, в общем-то все решения с огромной бородой. Если надо read-only, то закрываешь функциями, если надо multithread, то юзаешь мутех, если надо самоудаление, то применяешь счетчик ссылок и т.п.

Date: 2005-11-08 10:19 am (UTC)
From: [identity profile] firtree.livejournal.com
Кстати, вот тебе задача, на которую я не знаю ответа: как ты сделаешь персистентный синглтон?

Date: 2005-11-08 11:01 am (UTC)
From: [identity profile] psilogic.livejournal.com
что такое персистентный?

Date: 2005-11-08 02:49 pm (UTC)
From: [identity profile] firtree.livejournal.com
Сохраняющий состояние между запусками программы.

Date: 2005-11-08 04:24 pm (UTC)
From: [identity profile] psilogic.livejournal.com
Стандартно: в файл клади

Date: 2005-11-08 04:50 pm (UTC)
From: [identity profile] firtree.livejournal.com
А в какой момент? И вопрос, не относящийся к синглтону, но всё равно заковыристый: как определить, где файл?

Date: 2005-11-08 06:46 pm (UTC)
From: [identity profile] psilogic.livejournal.com
Класть - в момент уничтожения объекта, забирать - в момент создания. Где файл - зависит от языка и программы. Если C/C++, можно поюзать argv[0], если Java, можно ClassLoader и т.п.
Page generated Aug. 13th, 2025 10:36 pm
Powered by Dreamwidth Studios