Почему библиотека Локи не так широко используется?
Библиотека Loki реализует некоторые очень широко используемые концепции (умный указатель, посетитель, фабрика и т. Д.). Часто упоминается связанная книга "Современный дизайн C++", но сама библиотека не получила широкого распространения. Это почему?
Большинство разработчиков предпочитают Boost. В частности, почему люди часто решают использовать умные указатели Boost, а не Loki?
6 ответов
Локи - это предмет исследования / проверки концепции. Александреску выдвигает новые идеи, другие люди принимают их за реальный мир. Также boost::shared_ptr
почти буквально в TR1.
Loki страдает от того, что является хорошей библиотекой, затрагивающей несколько функциональных областей (поддержка метапрограммирования шаблонов с несколькими конкретными приложениями: умные указатели, синглтоны, функциональные объекты, ограничители области видимости и т. Д.), Тогда как boost - это совокупность многих библиотек, обычно полностью охватывающих каждую функциональную область. и намного более настроенный на мобильность (сначала).
Когда 9 из 10 птиц могут быть убиты одним и тем же камнем, многие люди просто начинают с повышения и заполняют пробелы сторонними библиотеками. Очень сложно конкурировать с бустом, если ты пересекаешься. Поскольку вы не будете перекрывать большую часть ускорения, люди в любом случае будут загружать / устанавливать повышение, чтобы получить другие функциональные возможности, поэтому, если вы не укажете область, в которой усиление слабое - и разница значительна для проекта, они "уладят" "для повышения там тоже.
Кроме того, Александреску неоднократно предпринимал попытки включить Локи в повышение, а некоторые из ключевых авторов повышения просто не были готовы к сотрудничеству. Мое личное мнение состоит в том, что они хотят, чтобы более полная, но гораздо менее удобная для пользователя MPL имела большую "долю рынка": как авторы библиотеки и печатные книги, которые являются единственной достойной документацией (в резком контрасте с большинством других стимулов). библиотеки, которые имеют отличную документацию онлайн), они довольно хорошо из этого.
Если кто-то обижен и не согласен с этим анализом, я весь в ушах.
Другая практическая проблема с чрезвычайно параметризованным кодом состоит в том, что в больших проектах, где разные разработчики / команды работают независимо, они часто заканчивают тем, что используют довольно разные экземпляры одного и того же шаблона довольно произвольно. Это затрудняет передачу значений между этими подсистемами: получателю может потребоваться:
- быть параметризованным (то есть шаблонным и, следовательно, встроенным, что вводит зависимости компиляции и более медленные сборки в системах масштаба предприятия)
- обеспечить минимальное покрытие для всех возможных реализаций (например, проверка кодов ошибок и ожидание / обработка исключений)
- проработка некоторой передачи времени компиляции во время выполнения на основе абстрактного базового средства доступа с реализациями для каждого экземпляра), что сводит на нет некоторые преимущества производительности параметризации
Это все возможно, но для навигации по местности нужен отличный программист.
Вы хотите использовать библиотеку, которую будет знать следующий программист, и которая будет хорошо поддерживаться в будущем - поэтому вы выбираете основную библиотеку. Поскольку это основная библиотека, многие используют ее, поэтому она становится выбором по умолчанию.
Я на самом деле предпочитаю стиль работы Локи, и я сам внес в Локи паттерн Decorator, который теперь находится в трекере, потому что проект, насколько я знаю , больше не поддерживается.
Я использую boost shared_pointer только потому, что он скоро станет стандартом, мне может не понравиться тот факт, что я не могу настроить его так, чтобы он действовал именно так, как я хочу, но я должен с этим жить.
Использование стандартной библиотеки важно, поскольку она поддерживает код, поддерживаемый другими программистами. Если это с открытым исходным кодом, и вы хотите экспериментировать, используйте Loki. Никто не останавливает вас.
На самом деле Windows Vista использует некоторые функции Loki.
Я предполагаю, что они не используют избыточные реализации интеллектуальных указателей и посетителей.
Говоря как кто-то, кто использовал немало библиотеки Boost, а также неоднократно смотрел на Loki, самой большой проблемой была нехватка документации. Кроме того, Локи использует некоторые из самых ярких битов шаблонов C++. Захватывающие вещи, но и довольно сложный.
Однажды я использовал Loki для небольшого инструмента (в основном, для переводчика), и он мне действительно понравился. Мои сотрудники не были в восторге от библиотеки, поэтому ее использование ограничивалось этим небольшим подпроектом.