2015-05-27 16 views
9

Ho esaminato brevemente le librerie di quasi quotazioni per Haskell. Queste librerie consentono ad Haskell di integrarsi con altre lingue. Per l'integrazione con C, sembra che vi sia due pacchetti con funzionalità simili:Quali sono le differenze tra inline-c e language-c-inline?

come sto cercando di costruire una libreria quasi-citazione di il mio, sono interessato a scelte di progettazione, differenze API, prestazioni ecc.

L'unica differenza di cui sono a conoscenza è che language-c-quote supporta C e Objective-C, mentre inline-c supporta C.

Come distinguere questi pacchetti? Quali sono le differenze fondamentali? Sono, infatti, simili?

risposta

7

Alcune differenze dove (a breve) hanno discusso in inline-c's reddit announcement:

Come si confronta al linguaggio-c-linea?

  • In inline-c abbiamo una libreria molto semplice nucleo che è facilmente estensibile con ulteriori quoters anti-. Volevo che le funzionalità di base fossero molto prevedibili, e lasciare il marshalling più elaborato a casi d'uso specifici. In language-c-inline il marshalling funziona con un mix di regole codificate e funzioni Template Haskell fornite dall'utente.
  • Volevamo che il linguaggio includesse il codice C nel modo più semplice possibile. Il C inline è giuntato con un quasi quoter e senza funzioni Template Haskell. Il codice C inline specifica le variabili Haskell da acquisire usando gli anti-quotatori, e i tipi di destinazione sono tutti specificati usando la sintassi C. Come ho detto nel post del blog, mi sono preoccupato un po 'che questo è il caso, per avere la certezza che quello che stai ottenendo in C è quello che ti aspetti. In relazione, vengono esaminati solo gli anti-quotanti: il resto del codice C non viene analizzato e lasciato letteralmente, quindi non dobbiamo preoccuparci di eventuali incompatibilità tra il compilatore C che l'utente sta usando e il parser Haskell C che usa language-c-inline .
  • Ci stiamo anche assicurando che l'infrastruttura e il processo di costruzione siano omogenei. La funzione addTopDecl viene utilizzata per evitare di dover popolare le tabelle in fase di esecuzione come fa language-c-inline e inoltre utilizzo vari trucchi per assicurarmi che tutto funzioni senza problemi tra le generazioni. Ad esempio, i nomi delle funzioni C generate si basano sull'hash dei contenuti della funzione stessa. Questo è abbastanza importante per garantire che ripetute compilazioni dello stesso file in cabal, ad esempio durante la compilazione con il supporto di profiling, generino gli stessi simboli C generati, assicurandosi che i simboli siano gli stessi solo se i frammenti C nel modulo sono gli stessi.

    [...]

In breve, le due biblioteche sono molto simili nello spirito, ma noi codificati inline-c ad essere più adatto alle nostre esigenze che assumono diverse scelte progettuali. Alcuni dei vantaggi sopra riportati potrebbero essere facilmente trasferiti a language-c-inline, in particolare quelli nell'ultimo punto.

Il announcement on fpcomplete contiene anche informazioni aggiuntive, ma tutto sommato, sì, sono in qualche modo simili.

+0

Grazie! Non mi rendevo conto di quanto fosse recente il 'inline-c'. –

Problemi correlati