Локи страдает от того, что является хорошей библиотекой, затрагивающей несколько функциональных областей (поддержка метапрограммирования шаблонов с несколькими конкретными приложениями: умные указатели, синглтоны, функциональные объекты, ограничители области видимости и т. Д.), Тогда как boost - это совокупность многих библиотек, обычно полностью охватывающих каждая функциональная область и гораздо более настроены на мобильность (сначала).
Когда 9 птиц из 10 могут быть убиты одним и тем же камнем, многие люди просто начинают с повышения и заполняют пробелы сторонними библиотеками. Очень сложно конкурировать с бустом, если ты пересекаешься. Поскольку вы не будете перекрывать большую часть ускорения, люди в любом случае будут загружать / устанавливать повышение, чтобы получить другие функциональные возможности, поэтому, если вы не укажете область, в которой усиление слабое - и разница значительна для проекта, они "уладят" "для повышения там тоже.
Кроме того, Александреску неоднократно предпринимал попытки включить Локи в повышение, и некоторые из ключевых авторов повышения просто не поддержали его. По моему личному мнению, они хотят, чтобы более полная, но гораздо менее удобная для пользователя MPL имела большую «долю рынка»: как авторы библиотеки и печатные книги, которые являются единственной достойной документацией (в резко контрастирует с большинством других библиотек надстроек, которые имеют отличную онлайн-документацию), они очень хорошо справляются с этим.
Если кто-то обижен и не согласен с этим анализом, я весь в ушах.
Другая практическая проблема с чрезвычайно параметризованным кодом состоит в том, что в больших проектах, где разные разработчики / команды работают независимо, они часто заканчивают тем, что используют довольно разные экземпляры одного и того же шаблона довольно произвольно. Это затрудняет передачу значений между этими подсистемами: получателю может потребоваться:
- быть параметризованным (то есть шаблонным и, следовательно, встроенным, что вводит зависимости компиляции и более медленные сборки в системах масштаба предприятия)
- обеспечивает минимальное покрытие для всех возможных реализаций (например, проверка кодов ошибок и ожидание / обработка исключений)
- проработка некоторой передачи времени компиляции во время выполнения на основе абстрактного базового средства доступа с реализациями для каждого экземпляра), что сводит на нет некоторые преимущества производительности при параметризации
Это все возможно, но для навигации по местности нужен великий программист.