Loki страдает от хорошей библиотеки, затрагивающей несколько функциональных областей (поддержка метапрограммирования шаблонов с несколькими конкретными приложениями: умные указатели, синглтоны, объекты функций, защитные маски и т. Д.), Тогда как boost - это совокупность многих библиотек, охватывая каждую функциональную область и гораздо более настраиваемую для переносимости (сначала).
Когда 9 птиц из 10 могут быть убиты одним и тем же камнем, многие люди просто начинают бунт и заполняют пробелы в библиотеках сторонних разработчиков. Очень сложно конкурировать с повышением, если вы перекрываетесь. Поскольку вы не будете накладываться на большую часть повышения, люди будут загружать/устанавливать boost в любом случае, чтобы получить другие функциональные возможности, поэтому, если вы не пригвоздите область, которая сильно повысится, - и разница значительна для проекта, они «успокоятся» «для повышения там тоже.
Кроме того, Александреску неоднократно предпринимал попытки заставить Локи включить в форсирование, и некоторые из ключевых авторов повышения просто не сотрудничали. Мое личное мнение состоит в том, что они хотят, чтобы более полная, но гораздо менее удобная для пользователя MPL, чтобы иметь больше «доли на рынке»: как авторы библиотеки, так и печатные книги, которые являются единственной достойной документацией (резко контрастируют с большинством других факторов) библиотеки, которые имеют отличную онлайн-документацию), они неплохо справляются с этим.
Если кто-то оскорблен и не согласен с этим анализом, я все уши.
Еще одна практическая проблема с чрезвычайно параметризированным кодом заключается в том, что в крупных проектах, где разные разработчики/команды работают независимо, они часто оказываются в произвольном порядке, используя несколько разных экземпляров одного и того же шаблона. Это делает его труднее передавать значения между этими подсистемами: приемник может понадобиться:
- параметризовать (т.е. шаблонный, и, следовательно, рядный, который вводит зависимости компиляцию и медленнее встраивает масштаб предприятия систем)
- обеспечивает некоторый минимальный охват для всех возможных экземпляров (например, проверка кодов ошибок и ожидающих/обработки исключений)
- , работающий через некоторое время компиляции во время выполнения на основе абстрактного базового аксессуара с реализациями для каждого экземпляра), что ставит под угрозу некоторые из эксплуатационные преимущества параметризации
Это все возможно, но для навигации по ландшафту требуется отличный программист.
Никто не нуждается в умном указателе с 6 параметрами шаблона. –
Локи не мог компилироваться никаким компилятором основного потока, когда он был опубликован. Alexandrescu - умный чувак. Слишком умный для меня. –
@johannes: Большинство параметров шаблона имеют значения по умолчанию, поэтому вам не нужно их устанавливать. И вы можете просто использовать typedef для привязки некоторых параметров шаблона. – Frank