Domanda

Ho appena scoperto circa il Boost biblioteca Phoenix (nascosto nel progetto Spirito) e come un fan dello stile funzionale-programmazione (ma pur sempre un dilettante; qualche piccola esperienza con Haskell e schema) ho voluto giocare con questo biblioteca per conoscere ragionevoli applicazioni di questa libreria.

Oltre alla increasement di espressività e chiarezza del codice utilizzando fp-stile, io sono particolarmente interessato a lazy-valutazione per accelerare i calcoli a basso costo.

Un piccolo e semplice esempio potrebbe essere il seguente: c'è qualche tipo di problema di routing (come il cucchiaino), che utilizza una matrice eucliedean distanza. Partiamo dal presupposto, che alcuni dei valori della matrice delle distanze non sono mai utilizzati, e un po 'abituati, molto spesso (quindi non è una buona idea per calcolare loro al volo per ogni chiamata). Ora sembra essere ragionevole avere un pigro struttura di dati che contiene i valori di distanza. Come vorrei che essere possibile con Phoenix? (Ignorando il fatto che vorrei essere fatto facilmente senza fp-style-programmazione a tutti) Leggendo la documentazione ufficiale di Phoenix non fatemi capire abbastanza per rispondere a questo.

E 'possibile a tutti? (In Haskell ad esempio la capacità di creare i thunk che garantendo che il valore può essere calcolato successivamente sono nel nucleo del linguaggio).

Cosa fa utilizzando un vettore con tutte le funzioni definite pigri a Phoenix media? Ingenuo come sono, ho cercato di riempire due matrici (vettore>) con valori casuali, uno con il push_back normale, l'altra con boost :: Phoenix :: push_back e cercato di leggere solo una piccola quantità di valori da queste matrici e memorizzarli in un contenitore per la stampa fuori. Quella artificiale era sempre puntuale vuoto. Sto usando fenice in un modo sbagliato / dovrebbe essere possibile? O ho fraintendere la funzione dei contenitori / algoritmi a Phoenix. Un piccolo indizio per quest'ultimo uno è l'esistenza di una speciale lista-dati-struttura in biblioteca FP ++, che ha influenzato Phoenix.

In aggiunta:

  • Cosa stai usando Phoenix per?
  • Sapete alcuni ressources buono per quanto riguarda Phoenix? (Tutorial, voci di blog ...)

Grazie per il vostro input!

È stato utile?

Soluzione

Come richiesto, il mio commento (con aggiunte e piccole modifiche) come una risposta ...

So che la vostra posizione esattamente, anche io suonato in giro con Phoenix (anche se non ho scavare in molto profondamente, per lo più un sottoprodotto di leggere il boost :: Spirito tutorial) qualche tempo fa, relativamente poco dopo la cattura il bug funzionali e apprendimento Haskell base - e non ho ottenere qualcosa di lavoro :( Questo è btw in sintonia con la mia esperienza generale con la magia modello scuro: Molto facile fraintendere, vite e ottenere un pugno in faccia con un comportamento del tutto inaspettato o messaggi di errore incomprensibili.

mi piacerebbe consiglio di stare lontano da Phoenix per un lungo periodo. Mi piace FP troppo, ma FP in C ++ è ancora più brutto di mutevolezza in Haskell (sarebbero testa a testa, ma C ++ è già brutto e Haskell è, almeno secondo Larry Wall, la più bella lingua mai;)). Imparare e da usare FP, e quando sei bravo e costretto ad utilizzare C ++, utilizzare Phoenix. Ma per l'apprendimento, una libreria che bulloni un paradigma completamente diverso su un linguaggio già complesso (cioè FP in C ++) non è consigliabile.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top