Обсуждаю статью
voidbent-а (он же
Вова Фролов)
"General policy pattern".
Она относится к class metaprogramming, на основе C++.
Идея в том, чтобы в некоей библиотеке сложить все классы compile-time policy в один и какие выгоды это даёт.
Спор в комментах.
Comments 104
Reply
--
void
Reply
Reply
Во-первых, в следующих версиях библиотеки в general policy можно будет добавить сколько угодно новых полиси, и твой старый код будет продолжать компилиться и работать с новой версией.
--
void
Reply
C General Policy можно провести очень чёткую анологию из жизни.
У Александреску Loki напоминает государство в котором есть куча всевозможных книг. В книгах написанны разные законы. Все книги лежат в разных местах. Каждый человек знает только те законы "которые нужны только ему". Законы постоянно меняються и все давным-давно в них запутались.
General Policy выглядит как конституция в которой написаны и структурированны все законы.
---
void
Reply
И есть пользовательский код. Который может сказать - у нас конституция будет такая-же как в библиотеке за исключением того что память все, в том числе и эта библиотека должны выделять через GlobalAlloc.
---
void
Reply
Reply
Как ты там говорил. "компонент, "который будет всё делать"?" :)
Reply
Это как раз и есть большой недостаток ГП.
В любом случае дать пользователю возможность выбирать между char и wchar это лучше чем не дать пользователю возможности вообще что либо выбирать
Согласен. Но STL таки позволяет это делать - ты волен использовать такой базовый символ для строки, какой хочешь.
Если система так построена, что в одном месте она работает с char а в другом c wchar, в одном с дефалтовыми аллокаторами, а в другом со специальными, то даже без ГП у тебя возникнет проблема что всем этим "местам" будет очень трудно друг с другом взаимодействовать
Дело в том, что в большой системе неизбежно возникает куча мест с отклонениями от "генеральной линии партии", то бишь от всесистемного ГП. То в одном месте нужно вместо Юникода пропихивать обычные char для совместимости со сторонней либой. То появляется какой-то класс, для которого выделять память стандартным образом чересчур неэффективно. То <сам придумай ( ... )
Reply
Reply
Reply
Насколько ценным был бы ГП паттерн если бы кто-то заимплеменил type factory, о котором я говорил, и ГП стал-бы ещё одним велосипедом с квадратными колёсами, предназначенным решать проблемы связанные с динамикой?
Reply
2. Механизм замены dll'ек - довольно точная аналогия использования библиотеки, у которой единственная возможность настройки полиси - через ГП.
3. В случае с ГП, вся система будет вынуждена использовать этот самый super-puper-mega-wide.
Reply
Кстати ГП придумывался не сам по себе а в контексте создания TR2. Я хотел показать что старыми методами (полиси) будет очень трудно создать библиотеку такого масштаба.
2. Не понял.
3. Нет. В случае с ГП вся система может использовать что угодно. super-puper-mega-wide будет использовать вся наша библиотека. Кстати вся система у себя тоже этот аспект может не хардкодить через ГП.
Reply
2. Что именно непонятно? Спрашивай, объясню.
3. В случае с ГП вся система может использовать что угодно.
Ну расскажи мне, каким образом. Есть у нас STL, и мы пользуем ГП, в котором сказано "использовать для строк wide char". И вот в один прекрасный момент нам понадобился тип символа "только цифра". Написали мы этот класс, написали трейты к нему и хотим теперь создать строку из наших замечательных символов. А система нам "фиг вам, я STL'ные строки умею создавать только из wide char. У меня ГП такая". И как с этим быть?
Reply
Возможно это потому что ты никогда не писал библиотек которые понимают 4 и больше полиси?
2. Механизм замены dll'ек - довольно точная аналогия использования библиотеки, у которой единственная возможность настройки полиси - через ГП.
2. Что именно непонятно? Спрашивай, объясню.
Ничего не понятно. ГП с dll'ками не умеет работать я это сто раз говорил.
Reply
Leave a comment