La spedizione di un'app desktop Clojure è realistica?

25

Attualmente sto spedendo un'applicazione desktop per Java. Si tratta di una semplice vecchia app Java / Swing Java 5 e finora tutto ha funzionato bene. Java 5 è stato scelto perché alcuni utenti erano in versione OS X / computer che non avrebbero mai avuto Java 6 (potremmo eliminare presto questa limitazione e passare a un Java più recente e abbandonare semplicemente i miei utenti bloccati con Java 5).

Mi sto rapidamente aggiornando con Clojure ma non ho ancora fatto molto Clojure-to-Java e Java-to-Clojure e mi chiedevo se fosse realistico spedire un'applicazione desktop Clojure invece di un'applicazione Java?

L'applicazione che sto distribuendo è attualmente di circa 12 MB con tutti i .jar , quindi l'aggiunta di Clojure non sembra essere un problema.

Il mio piano sarebbe quello di avere Clojure chiamata API Java: la mia applicazione è già divisa in diversi jar indipendenti.

Se capisco correttamente chiamare Clojure da Java è più difficile che chiamare codice Java da Clojure ed è per questo che sostanzialmente avrei riscritto tutta l'interfaccia utente (parte dell'interfaccia utente, mescolando i componenti di Swing e BufferedImages che devono essere riscritti comunque a causa al sorgere del display retina), e fare tutto il 'cablaggio' da Clojure.

Quindi questo è il problema che sto affrontando: è realistico spedire un'app desktop Clojure? (non sembra essere molto diffuso, ma in questo caso le semplici applicazioni desktop Java non sono così comuni e lo sto facendo comunque)

Tecnicamente, che cosa dovrebbe essere fatto? (rispetto alla spedizione di un'app Java)

    
posta Cedric Martin 18.09.2012 - 21:52
fonte

1 risposta

28

Sì, è del tutto realistico - non sembra che molte persone lo stiano già facendo ma penso che sia solo una questione di tempo (Clojure è praticamente nuovo dopo tutto!)

Ho personalmente scritto un gioco open source in Clojure che funziona come un'applicazione Swing (https://github.com/mikera/ironclad) quindi ho alcune esperienze da condividere che potrebbero essere utili.

  • In media, probabilmente vorrai avere una chiamata Clojure nelle API Java. Questo è per lo più di buon senso - Java ha tutte le grandi librerie, Clojure è il linguaggio più produttivo per incollare le cose insieme.
  • Potresti voler scrivere un "loader" basato su Java con un metodo main(...) che avvia la parte Clojure del codice. Tra le altre cose, questo significa che non dovrai compilare il codice Clojure da AOT. Esempio di codice qui: link
  • Probabilmente vorrai fare cose come lanciare uno splash screen mentre l'applicazione inizializza per consentire il tempo di avvio extra di caricamento / compilazione del codice Clojure. Probabilmente aggiunge 1-2 secondi a un tipico tempo di avvio dell'app, il che è sufficiente che l'utente probabilmente apprezzerà qualche feedback. Se sei intelligente, puoi effettivamente lanciare l'intera interfaccia utente mentre altre cose vengono caricate in background, ma ciò richiede un po 'di attenzione e potresti testare la tua concorrenza kung-fu: -)
  • È possibile combinare Java e Clojure in modo relativamente libero poiché possono richiamare in modo sufficientemente trasparente e in avanti e indietro. L'unica complicazione se vuoi che Java chiami Clojure è che a Java piace conoscere la classe / l'interfaccia che sta chiamando in fase di compilazione. Una buona opzione è che il codice Clojure implementa dinamicamente un'interfaccia Java già compilata tramite reify .
  • Ho trovato abbastanza semplice sviluppare e confezionare un'applicazione in un singolo contenitore contenente sia codice Clojure che Java utilizzando Eclipse / Maven. Il codice Clojure può essere semplicemente messo in src/main/resources e viene caricato / compilato in fase di runtime.
  • Puoi utilizzare i wrapper della Clojure GUI come altalena se lo desideri. Sembra essere abbastanza buono. Ho deciso di non usarlo, principalmente perché volevo fare alcune cose molto difficili con Swing direttamente e non sentivo di aver bisogno di un ulteriore livello di astrazione.
risposta data 19.09.2012 - 10:23
fonte

Leggi altre domande sui tag