Loki sufre de ser una buena biblioteca tocando varias áreas funcionales (soporte de metaprogramación de plantillas con algunas aplicaciones específicas: punteros inteligentes, singletons, objetos funcionales, protectores de alcance, etc.), mientras que boost es una colección de muchas bibliotecas típicamente exhaustiva cubriendo cada área funcional y mucho más afinado para la portabilidad (primero).
Cuando 9 de cada 10 aves se pueden matar con la misma piedra, muchas personas simplemente comienzan con el impulso y llenan los huecos con bibliotecas de terceros. Es muy difícil competir con el impulso si te superpones. Debido a que no se superpondrá con mucho impulso, la gente descargará/instalará impulso de todos modos para obtener la otra funcionalidad, así que a menos que encuentres un área en la que el impulso sea débil y la diferencia sea significativa para el proyecto, "se resolverán" "para el impulso allí también.
Además, Alexandrescu hizo repetidos intentos para incluir a Loki en el impulso, y algunos de los autores de impulso clave simplemente no cooperaron. Mi opinión personal es que quieren que el MPL más completo pero mucho menos amigable para el usuario tenga más "cuota de mercado": como autores de la biblioteca y los libros en papel que son la única documentación decente (en marcado contraste con la mayoría de los otros bibliotecas que tienen una excelente documentación en línea), salen bastante bien de esto.
Si alguien está ofendido y no está de acuerdo con este análisis, soy todo oídos.
Otro problema práctico con el código extremadamente parametrizado es que en proyectos grandes donde diferentes desarrolladores/equipos trabajan de forma independiente, a menudo terminan utilizando sutilmente diferentes instancias de la misma plantilla bastante arbitrariamente. Esto hace que sea más difícil de pasar valores entre esos subsistemas: puede necesitar el receptor para:
- parametrizar (es decir, con plantilla, y por lo tanto en línea, que introduce dependencias de compilación y más lento se basa en los sistemas de escala empresarial)
- proporcionan una cobertura mínima para todas las instancias posibles (por ejemplo, comprobación de códigos de error y excepciones de expecting/handling)
- trabajando a través del tiempo de compilación en tiempo de ejecución basado en un acceso base abstracto con implementaciones para cada instanciación) que compromete algunos de los beneficios de rendimiento de la parametrización
Esto es posible, pero se necesita un gran programador para navegar por el terreno.
Nadie necesita un puntero inteligente con 6 parámetros de plantilla. –
Loki infamemente no pudo ser compilado por ningún compilador mainstream cuando fue publicado. Alexandrescu es un tipo inteligente. Demasiado inteligente para mí. –
@johannes: la mayoría de los parámetros de la plantilla tienen valores predeterminados, por lo que no es necesario configurarlos. Y podría usar typedef para enlazar algunos de los parámetros de la plantilla. – Frank