tom ragnarok mitologia marvel hiddleston c++ boost loki

c++ - mitologia - thor ragnarok



¿Por qué la biblioteca Loki no se usa más ampliamente? (6)

La biblioteca Loki implementa algunos conceptos muy utilizados (puntero inteligente, visitante, fábrica, etc.). El libro asociado "Modern C ++ Design" se menciona a menudo, pero la biblioteca en sí misma no se usa ampliamente. ¿Porqué es eso?

La mayoría de los desarrolladores parecen preferir Boost. En particular, ¿por qué la gente a menudo decide usar los punteros inteligentes de Boost en lugar de los de Loki?


De hecho, prefiero la forma de hacer las cosas de Loki y he contribuido a que Loki sea un patrón Decorator que ahora se encuentra en el rastreador porque el proyecto, hasta donde sé, ya no se mantiene .
Utilizo boost shared_pointer porque pronto será el estándar. Puede que no me guste el hecho de que no puedo personalizarlo para que actúe exactamente como quiero que actúe, pero tengo que vivir con él.
El uso de la biblioteca estándar es importante ya que mantiene el código que otros programadores pueden mantener. Si es de código abierto y quieres experimentar, usa Loki. Nadie te está deteniendo.
En realidad, Windows Vista usa algunas de las funciones de Loki.
Supongo que no están utilizando las implementaciones redundantes de punteros inteligentes y visitantes.


Desea utilizar una biblioteca que el próximo programador va a saber y que será bien soportada en el futuro, por lo que elige una lib importante. Debido a que es una gran cantidad de gente lo usa, por lo que se convierte en la opción predeterminada.


Hablando como alguien que usó bastante de la biblioteca de Boost, y también miró a Loki más de una vez, el mayor problema fue la escasez de documentación. Además, Loki usa algunas de las partes más peludas de las plantillas de C ++. Emocionante, pero también bastante desalentador.


Loki sufre de ser una buena biblioteca que toca 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 que cubren de forma exhaustiva 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 un impulso y llenan los vacíos con las 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 principales de los impulsos simplemente no cooperaron. Mi opinión personal es que quieren que el MPL más completo pero mucho menos amigable 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 demás) bibliotecas que tienen una excelente documentación en línea), salen bastante bien de esto.

Si alguien se ofende 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 grandes proyectos en los que diferentes desarrolladores / equipos trabajan de forma independiente, a menudo terminan usando sutilmente diferentes instancias de la misma plantilla bastante arbitrariamente. Esto hace que sea más difícil pasar valores entre esos subsistemas: el receptor puede necesitar:

  • estar parametrizado (es decir, con plantilla y, por lo tanto, en línea, lo que introduce dependencias de compilación y compilaciones más lentas en sistemas de escala empresarial)
  • proporcionar una cobertura mínima para todas las instancias posibles (por ejemplo, verificar códigos de error y esperar / manejar excepciones)
  • trabajando a través de un tiempo de compilación en el tiempo de ejecución basado en un acceso base abstracto con implementaciones para cada instanciación) que compromete algunas de las ventajas de rendimiento de la parametrización

Todo esto es posible, pero se necesita un gran programador para navegar por el terreno.


Utilicé Loki una vez para una pequeña herramienta (básicamente un intérprete) y realmente me gustó. Mis compañeros de trabajo estaban menos entusiasmados con la biblioteca, por lo que su uso se limitó a este pequeño subproyecto.


Loki es una especie de investigación / prueba de concepto. Alexandrescu empuja nuevas ideas, otras personas las adoptan para el mundo real. También boost::shared_ptr es casi literalmente en TR1.