2010-04-24 5 views
6

Sia in Haskell che in OCaml, è possibile chiamare nella lingua da programmi C. Quanto sarebbe fattibile creare applicazioni native per Windows, Mac o Linux che facessero largo uso di questa tecnica?Creazione di applicazioni desktop GUI che chiamano in OCaml o Haskell - È un compito da pazzi?

(lo so che ci sono librerie GUI come wxHaskell, ma suppongo che uno voleva avere solo una porzione della vostra logica dell'applicazione in lingua straniera.)

O si tratta di una pessima idea?

+0

http://mldonkey.sourceforge.net/Main_Page – grettke

+0

http://coherentpdf.com/blog/?tag=ocaml – grettke

+0

Caveat (http://www-list.cea.fr/labos/gb/LSL/ caveat/index.html) è uno strumento di verifica per C embedded critici scritti principalmente in C++, ma che utilizza OCaml come linguaggio di scripting (un diario di Caml generato durante una sessione interattiva può essere compilato e collegato a Caveat per essere riprodotto in qualsiasi momento) . –

risposta

3

Faccio un ampio uso di questo compilando haskell condivise libs che vengono chiamate al di fuori di Haskell.

solito i compiti da svolgere sarebbe quello di

  1. creare le dichiarazioni di esportazione corretta stranieri
  2. creare istanze memorizzabili per eventuali tipi di dati che è necessario schierare
  3. creare le strutture C (o strutture nella lingua stai usando) per leggere queste informazioni
  4. poiché non voglio inizializzare manualmente l'haskell RTS, aggiungo il codice di inizializzazione/terminazione alla stessa lib. (dllmain in windows __attribute__ ((costruttore)) su unix)
  5. poiché non ne ho più bisogno, creo un file .def per nascondere tutte le funzioni di chiusura e rts dall'essere nella tabella di esportazione (windows)
  6. usa GHC per compilare tutto insieme

Questi compiti sono piuttosto robotizzati e strutturati, a un certo punto potresti scrivere qualcosa per automatizzarli. Infatti quello che uso io per fare questo è uno strumento che ho creato che esegue il tracciamento delle dipendenze sulle funzioni che hai contrassegnato per essere esportato, e le avvolgerà e compilerà la lib condivisa per te, oltre a darti le dichiarazioni in C/C++.

(purtroppo, questo strumento non è ancora in hackage, perché c'è qualcosa che ho ancora bisogno di risolvere il problema e prova molto di più prima che io sento a mio agio facendo così)

Tool è disponibile qui http://hackage.haskell.org/package/Hs2lib-0.4.8

5

Bene, il rischio principale è che mentre le strutture esistono, non sono ben testate - non molte app lo fanno. Non dovreste avere troppi problemi chiamando Haskell da C, sembra piuttosto semplice:

http://www.haskell.org/haskellwiki/Calling_Haskell_from_C

Direi che se c'è qualche motivo valido per utilizzare C per il front-end (ad esempio, si dispone di un'applicazione legacy) e hai davvero bisogno di una libreria Haskell, o vuoi usare Haskell per qualche altra ragione, allora, sì, provaci. Il rischio principale è che non molte persone lo fanno, quindi meno documentazione ed esempi piuttosto che chiamare in altro modo.

4

è possibile incorporare OCaml in C così (vedi the manual), anche se questo non è come comunemente fatto come estensione OCaml con C.

2

O si tratta di una pessima idea?

Non è affatto una pessima idea. Ma come osserva Don Stewart, è probabilmente un percorso meno battuto. Potresti sicuramente avviare il tuo programma come Haskell o OCaml, poi farlo fuori dalla porta di partenza — e ti consiglio di strutturare il tuo codice in quel modo — ma non cambia il fatto che molte altre persone chiamano da Haskell a C che da C a Haskell. Allo stesso modo per OCaml.

4

Credo che l'approccio migliore, anche se sia la GUI che la logica siano scritte nello stesso linguaggio, è quello di eseguire due processi che comunicano tramite un protocollo testuale leggibile dall'uomo (una DSL di qualche tipo). Questa architettura vale anche per il tuo caso.

I vantaggi sono evidenti: la GUI è rimovibile e sostituibile, i test automatici sono più semplici, la registrazione e il debugging sono molto più semplici.

Problemi correlati