2010-04-22 14 views
8

Ho un modulo Lisp LispWorks Common Lisp che si trova su alcuni moduli .NET tramite RDNZL.Connessione a .NET Lisp

È venuto fuori che ho bisogno di esporre alcune delle sue funzionalità ad alcune altre applicazioni .NET, e non sono sicuro il modo migliore (più breve) per avvicinarsi a questo senza riscrivere il modulo in C#. So che ci sono alcune implementazioni di LIS CLR, ma la maggior parte sembra non mantenuta o incompleta e ci sono molte cose che non possono essere banalmente riscritte in Scheme.

C'è qualche funzione che espone il contrario di ciò che RDNZL abilita (. NET -> Common Lisp)? Posso usare RDNZL per consegnare una DLL che accetta oggetti .NET?


sto modificando questo per includere alcune opzioni che la maggior parte con un interesse in Lisp sarà probabilmente conoscere se sono su Windows, e perché non abbastanza soddisfare i requisiti di cui sopra (o come, come i tuoi utenti, non ho trasmesso adeguatamente le mie richieste :).

  • IronScheme - Nizza, veloce, mantenuto e veloce, ma non è Common Lisp
  • ClojureCLR - Lisp non comune; Beta, prende ~ 4secs per me per avviare (accettabile per applicazioni di lunga durata, non per cose che richiedono istanze fresca e poi a poche decine di chiamate)
  • LSharp - Lisp non è comune, non sia mantenuto
  • rdnzl - Permette di registrando i delegati di callback CL con codice .NET, ma è necessario iniziare in CL, non esiste un modo relativamente semplice (che sono stato in grado di capire fino ad ora) per passare gli oggetti .NET in una "DLL C" creata dal tuo Common Lisp implementazione della scelta.
  • Yarr - Costruito sopra LSharp (include defmacro e alcuni altri need-to-have). Sembra non mantenuto per un po 'di tempo, ma potrebbe essere l'opzione migliore per il momento.
+0

Forse è possibile trasferire il codice CL in Clojure e utilizzare clojure-clr? : –

risposta

5

"è venuto su che ho bisogno di esporre alcune delle sue funzionalità per alcune altre applicazioni .NET"

La seguente non è esattamente quello che stai chiedendo, ma se vuoi pensare fuori dagli schemi per un momento, penso che forse usare la messaggistica sarebbe più facile (questo si basa interamente sulla dichiarazione citata sopra). Qualcosa come ZeroMQ, che ha binding sia per Common Lisp che per .Net. Quindi non sarebbe una questione di come riscrivere un modulo per renderlo compatibile con .Net, ma come integrare la messaggistica nel modulo per un'app .Net indipendente per consumarlo. Entrambi i lati della conversazione dovrebbero essere d'accordo sul formato della messaggistica, ma nella mia mente è più facile della rotta che consideri nel tuo post.

Se è necessario renderlo più di un'applicazione, forse un'architettura pub/sotto si adatta alle proprie esigenze.

+0

Bene, sono d'accordo sul fatto che questo sarebbe probabilmente più facile per questa particolare istanza, ma penso che sarebbe una cosa molto positiva per i CL-ers avere l'opzione di usare il loro codice in gran parte così com'è. Inoltre, il wrapper CL per questo è rilasciato sotto la LGPL che è generalmente [accigliato su] (http://common-lisp.net/faq.shtml#lgpl) a favore di [LLGPL] (http: // opensource.franz.com/). Potrei contattare l'autore al riguardo. – JPanest

+0

E, per affrontare effettivamente il tuo suggerimento, il più grande spunto con questo approccio è che introduce uno sforzo apparentemente inutile per programmi e moduli più piccoli e richiede manutenzione e monitoraggio di due applicazioni. – JPanest

+0

Beh, è ​​solo qualcosa a cui pensare. Certamente troverai l'approccio migliore che funziona per te. Ne ho parlato solo 1: sembra che avrai più app e 2: è più facile dalla mia esperienza avere app piccole e altamente specializzate che parlano attraverso i messaggi piuttosto che avere app/moduli di grandi dimensioni che cercano di essere tutti cose per tutti i consumatori. Questo e io personalmente odio il codice di porting (come il suggerimento del clojure), quindi questo è il tipo di set di strumenti mentali che tendo a raggiungere. YMMV. – Shaun

0

Si potrebbe trovare LSharp di un certo interesse LSharp C'è anche Iron Scheme C'è anche Xronos, fattore di forte afferma di essere un Lisp dialetto.

Passerei un po 'di tempo a esaminare quanto sarebbe stato difficile portare il codice su F #, con le limitazioni e le differenze che il langage ha su Lisp. Ci sono certamente alcuni costrutti in Lisp, che troverei difficile premere elegantemente in F #.

+0

Sì, ho preso diversi libri su F # per altri motivi recentemente. Il sistema attuale fa un uso abbastanza pesante delle macro ed espone alcuni DSL correlati che sarebbero difficili da esprimere (o, per lo meno, riscrivere) in un non-Lisp. – JPanest

+0

Xronos sembra interessante ma sembra bloccato a 0,1 senza commit in 7 mesi e nessun post di mailing list in 13. Grazie per avermelo fatto notare, non l'avevo mai visto prima. – JPanest

Problemi correlati