2010-02-27 7 views
43

Библиотека Loki реализует некоторые очень широко используемые понятия (умный указатель, посетитель, фабрика и т. Д.). Часто упоминается связанная книга «Modern C++ Design», но сама библиотека широко не используется. Почему это?Почему библиотека Loki не используется более широко?

Большинство разработчиков, похоже, предпочитают Boost. В частности, почему люди часто решают использовать умные указатели Boost, а не Loki?

+23

Никто не нуждается в умном указателе с 6 параметрами шаблона. –

+4

Локи не мог компилироваться никаким компилятором основного потока, когда он был опубликован. Alexandrescu - умный чувак. Слишком умный для меня. –

+4

@johannes: Большинство параметров шаблона имеют значения по умолчанию, поэтому вам не нужно их устанавливать. И вы можете просто использовать typedef для привязки некоторых параметров шаблона. – Frank

ответ

11

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

4

Говоря как кто-то, кто использовал довольно много библиотеки Boost, а также не раз смотрел на Локи, самой большой проблемой была редкость документации. Кроме того, Loki использует некоторые из самых привлекательных бит шаблонов C++. Увлекательный материал, но и довольно сложный.

+4

* «Loki использует некоторые из самых причудливых битов шаблонов C++» * - так делает Boost, или я что-то не понимаю? –

+6

См. Раздел 'shared_ptr' faq: * Параметризация препятствует пользователям. Шаблон shared_ptr тщательно разработан для удовлетворения общих потребностей без обширной параметризации. В какой-то день может быть изобретен высоко настраиваемый смарт-указатель, который также очень прост в использовании и очень трудно использовать. До тех пор shared_ptr является интеллектуальным указателем выбора для широкого спектра приложений. (Те, кто интересуется политическими умными указателями, должны ознакомиться с Modern C++ Design от Andrei Alexandrescu.) * –

+4

@litb: Как я уже говорил в IRC, я не согласен. Для меня стало более естественным использовать умный указатель loki, а затем увеличить его. Если бы я хотел, чтобы блокировка mutex на умном указателе loki, мне просто нужно было ввести для нее класс mutex. Умный указатель Локи - это самое общее решение, которое я нашел в этой проблеме. Иногда это облегчает использование. –

19

Loki - это исследование/доказательство концепции. Alexandrescu выдвигает новые идеи, другие люди принимают их для реального мира. Также boost::shared_ptr почти буквально в TR1.

2

Я использовал Loki один раз для небольшого инструмента (в основном переводчика) и ему действительно понравилось. Мои коллеги с меньшим энтузиазмом относились к библиотеке, поэтому ее использование оставалось ограниченным этим небольшим подпроектом.

6

Я на самом деле предпочитаю способ Локи делать вещи, и я внесла свой вклад в то, что Локи сам создал узор Decorator, который теперь сидит в трекере, потому что проект, насколько мне известно, больше не поддерживается.
Я использую boost shared_pointer только потому, что он будет стандартным очень скоро, мне может не понравиться тот факт, что я не могу настроить его так, как я хочу, чтобы он действовал, но мне нужно жить с ним.
Использование стандартной библиотеки важно, поскольку она поддерживает код, поддерживаемый другими программистами. Если это открытый исходный код, и вы хотите поэкспериментировать, продолжайте использовать Loki. Никто вас не останавливает.
На самом деле Windows Vista использует некоторые функции Loki.
Я предполагаю, что они не используют избыточные реализации умных указателей и посетителей.

16

Loki страдает от хорошей библиотеки, затрагивающей несколько функциональных областей (поддержка метапрограммирования шаблонов с несколькими конкретными приложениями: умные указатели, синглтоны, объекты функций, защитные маски и т. Д.), Тогда как boost - это совокупность многих библиотек, охватывая каждую функциональную область и гораздо более настраиваемую для переносимости (сначала).

Когда 9 птиц из 10 могут быть убиты одним и тем же камнем, многие люди просто начинают бунт и заполняют пробелы в библиотеках сторонних разработчиков. Очень сложно конкурировать с повышением, если вы перекрываетесь. Поскольку вы не будете накладываться на большую часть повышения, люди будут загружать/устанавливать boost в любом случае, чтобы получить другие функциональные возможности, поэтому, если вы не пригвоздите область, которая сильно повысится, - и разница значительна для проекта, они «успокоятся» «для повышения там тоже.

Кроме того, Александреску неоднократно предпринимал попытки заставить Локи включить в форсирование, и некоторые из ключевых авторов повышения просто не сотрудничали. Мое личное мнение состоит в том, что они хотят, чтобы более полная, но гораздо менее удобная для пользователя MPL, чтобы иметь больше «доли на рынке»: как авторы библиотеки, так и печатные книги, которые являются единственной достойной документацией (резко контрастируют с большинством других факторов) библиотеки, которые имеют отличную онлайн-документацию), они неплохо справляются с этим.

Если кто-то оскорблен и не согласен с этим анализом, я все уши.

Еще одна практическая проблема с чрезвычайно параметризированным кодом заключается в том, что в крупных проектах, где разные разработчики/команды работают независимо, они часто оказываются в произвольном порядке, используя несколько разных экземпляров одного и того же шаблона. Это делает его труднее передавать значения между этими подсистемами: приемник может понадобиться:

  • параметризовать (т.е. шаблонный, и, следовательно, рядный, который вводит зависимости компиляцию и медленнее встраивает масштаб предприятия систем)
  • обеспечивает некоторый минимальный охват для всех возможных экземпляров (например, проверка кодов ошибок и ожидающих/обработки исключений)
  • , работающий через некоторое время компиляции во время выполнения на основе абстрактного базового аксессуара с реализациями для каждого экземпляра), что ставит под угрозу некоторые из эксплуатационные преимущества параметризации

Это все возможно, но для навигации по ландшафту требуется отличный программист.

+1

Это именно проблема с boost, boost - стандартная библиотека C++ или должна быть, поскольку текущая стандартная библиотека никому не подходит ... Вот почему C++ сбрасывается такими языками, как Java и C#, из-за очень богатого стандарта библиотека.Не говоря уже о том, что как Java, так и C# позволяют подключать другие библиотеки, если они этого хотят, поскольку у них есть приятные интерфейсы, предназначенные для расширения. – Coyote21