7

Me acabo de enterar de la biblioteca de Boost Phoenix (escondida en el proyecto Spirit) y como fanático del estilo de programación funcional (pero aún aficionado; experiencia con haskell y el esquema) quería jugar con esta biblioteca para obtener información sobre aplicaciones razonables de esta biblioteca.Comprensión y uso de la Biblioteca Boost Phoenix con un enfoque en la evaluación perezosa

Además del acrecentamiento de la expresividad y la claridad del código usando fp-estilo, estoy especialmente interesado en perezoso-evaluación para acelerar los cálculos a bajo costo.

Un ejemplo pequeño y simple sería el siguiente: hay algún tipo de problema de enrutamiento (como el TSP), que está utilizando una matriz de distancia eucliedean. Suponemos que algunos de los valores de la matriz de distancia nunca se utilizan, y algunos se utilizan con mucha frecuencia (por lo que no es una buena idea calcularlos sobre la marcha para cada llamada). Ahora parece razonable tener estructura de datos perezosa manteniendo los valores de distancia. ¿Cómo sería eso posible con Phoenix? (Ignorando el hecho de que me haría fácilmente sin la programación de estilo fp) Leer la documentación oficial de Phoenix no me dejaba entender lo suficiente como para responder eso.

¿Es posible en absoluto? (en Haskell, por ejemplo, la capacidad de crear thunks que garantizan que el valor se puede calcular más adelante se encuentra en el núcleo del lenguaje).

¿Qué significa usar un vector con todas las funciones perezosas definidas en phoenix? Tan ingenuo como soy, intenté llenar dos matrices (vector>) con valores aleatorios, una con push_back normal, la otra con boost :: phoenix :: push_back e intenté leer solo una pequeña cantidad de valores de estas matrices y almacenarlos en un contenedor para imprimir. El perezoso estaba siempre vacío. ¿Estoy usando Fénix de una manera incorrecta/debería ser posible? O no entendí la función de los contenedores/algoritmos en Phoenix. Una pequeña pista para este último es la existencia de una estructura de datos de lista especial en la biblioteca de FP ++, que influyó en Phoenix.

Además:

  • ¿Qué estás usando phoenix?
  • ¿Conoces algunos buenos recursos con respecto a phoenix? (tutoriales, entradas de blog ...)

¡Gracias por su contribución!

+3

Te aconsejo que te mantengas alejado de Phoenix. Me gusta FP también, pero FP en C++ es incluso más feo que la mutabilidad en Haskell (serían cabeza a cabeza, pero C++ ya es feo y Haskell es, según Larry Wall, el lenguaje más bello de la historia). Aprenda y use FP, y cuando sea bueno y forzado a usar C++, use Phoenix. Pero para aprender, no es aconsejable una biblioteca que arroje un paradigma completamente diferente en un lenguaje ya complejo. – delnan

+0

Bastante deprimente: - /. Pero entendí tu punto. Tal vez era demasiado optimista con respecto a la facilidad de uso de las características de fp en un lenguaje realmente complejo como C++. Gracias cuatro tu respuesta. – sascha

+0

@delnan: ¿podría convertir su comentario en una respuesta? Parece que ha satisfecho sascha, y es alto en la consulta "sin respuesta". –

Respuesta

4

a lo solicitado, mi comentario (con adiciones y modificaciones pequeñas) como una respuesta ...

Sé que su posición con exactitud, yo también jugado un poco con Phoenix (aunque no me Infórmate profundamente, sobre todo un subproducto de la lectura del tutorial de Boost :: Spirit) hace un tiempo, relativamente poco después de atrapar el error funcional y aprender Haskell básico, y no conseguí nada que funcionara :(Esto está en sintonía con mi experiencia general con la magia de plantilla oscura : Muy fácil de malentender, meter la pata y recibir un puñetazo en la cara con un comportamiento totalmente inesperado o mensajes de error incomprensibles.

Le aconsejo que se mantenga alejado de Phoenix durante un yo me. Me gusta FP también, pero FP en C++ es incluso más feo que la mutabilidad en Haskell (serían cabeza a cabeza, pero C++ ya es feo y Haskell es, al menos según Larry Wall, el lenguaje más hermoso de la historia;)). Aprenda y use FP, y cuando sea bueno y forzado a usar C++, use Phoenix.Pero para el aprendizaje, una biblioteca que arroja un paradigma totalmente diferente en un lenguaje ya complejo (es decir, FP en C++) no es aconsejable.

+4

(-1) FP es muy completo en C++, la tecnología de compilación y los estándares de C++ están evolucionando para hacer que los ciudadanos de primera clase de FP en C++. C++ FP genera código eficiente frente a un motor de ejecución de ejecución. Sospecho que estás mal informado y no has intentado usar C++ FP con enojo y dado la vuelta en el primer obstáculo. C++ está diseñado para el diseño de sistemas del mundo real, es mejor tener FP que puedas usar para problemas del mundo real que no tenerlo ... Comprende y escribe el código C++ FP correcto en primer lugar y no obtendrás ningún efecto esotérico mensajes del compilador –

Cuestiones relacionadas