psilogic: (Default)
psilogic ([personal profile] psilogic) wrote2005-11-06 11:23 pm

Программистское

Под катом много мата. Накипело.


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

[identity profile] psilogic.livejournal.com 2005-11-08 06:46 pm (UTC)(link)
Класть - в момент уничтожения объекта, забирать - в момент создания. Где файл - зависит от языка и программы. Если C/C++, можно поюзать argv[0], если Java, можно ClassLoader и т.п.