Apakah pengiriman aplikasi desktop Clojure realistis?

25

Saat ini saya sedang mengirim aplikasi Java desktop. Ini adalah aplikasi Java 5 Java / Swing tua yang lama dan sejauh ini semuanya bekerja dengan baik. Java 5 ditargetkan karena beberapa pengguna menggunakan versi OS X / komputer yang tidak pernah memiliki Java 6 (kami dapat segera mengangkat batasan ini dan beralih ke Java yang lebih baru dan hanya meninggalkan pengguna saya yang terjebak dengan Java 5).

Saya dengan cepat meningkatkan kecepatan dengan Clojure tetapi saya belum benar-benar melakukan banyak Clojure-to-Java dan Java-to-Clojure belum dan saya bertanya-tanya apakah itu realistis untuk mengirimkan aplikasi desktop Clojure daripada aplikasi Java ?

Aplikasi yang saya kirim saat ini sekitar 12 MB dengan semua .jar sehingga menambahkan Clojure tampaknya tidak terlalu menjadi masalah.

Rencana saya adalah meminta Clojure memanggil Java API: aplikasi saya sudah dibagi dalam beberapa toples independen.

Jika saya mengerti benar memanggil Clojure dari Jawa lebih sulit daripada memanggil kode Java dari Clojure yang mengapa saya pada dasarnya menulis ulang semua UI (bagian dari UI, mencampur komponen Swing dan BufferedImages buatan sendiri perlu ditulis ulang pula karena kenaikan tampilan retina), dan melakukan semua 'pengkabelan' dari Clojure.

Jadi itulah masalah yang saya hadapi: apakah realistis untuk mengirimkan aplikasi desktop Clojure? (Ini sepertinya tidak terlalu luas tetapi kemudian mengirimkan aplikasi desktop Java biasa juga tidak umum dan saya tetap melakukannya)

Secara teknis, apa yang perlu dilakukan? (dibandingkan dengan pengiriman aplikasi Java)

Cedric Martin
sumber
1
Lihatlah Seesaw , ini adalah Clojure DSL untuk membangun aplikasi GUI berbasis JVM (berbasis Swing).
Michael Klishin
Seesaw sepertinya bermanfaat untuk membangun GUI dan melakukan perkabelan, tetapi bagaimana dengan integrasi Java API / perpustakaan saya yang ada? Haruskah semuanya tidak menyakitkan? (Saya tetap akan melaporkan di sini, tetapi saya ingin mendapat umpan balik sedikit sebelum mencoba beralih ke Clojure)
Cedric Martin
ClojureScript + (NW.js atau Atom Electron) akan melakukan pekerjaan itu.
Mario T. Lanza

Jawaban:

28

Ya, itu sepenuhnya realistis - tidak banyak orang yang tampaknya melakukannya tetapi saya pikir itu hanya masalah waktu saja (Clojure benar-benar baru!)

Saya pribadi telah menulis game sumber terbuka di Clojure yang berjalan sebagai aplikasi Swing (https://github.com/mikera/ironclad) jadi punya beberapa pengalaman untuk dibagikan yang mungkin berguna.

  • Rata-rata Anda mungkin ingin memiliki panggilan Clojure ke Java API. Ini sebagian besar akal sehat - Jawa memiliki semua perpustakaan besar, Clojure adalah bahasa yang lebih produktif untuk menempelkan semuanya.
  • Anda mungkin ingin menulis "loader" berbasis Java dengan main(...)metode yang meluncurkan bagian Clojure dari kode. Antara lain, ini berarti Anda tidak perlu mengkompilasi kode Clojure Anda. Contoh kode di sini: https://github.com/mikera/ironclad/blob/master/src/main/java/ic/IronClad.java
  • Anda mungkin ingin melakukan hal-hal seperti memuntahkan layar splash ketika aplikasi Anda diinisialisasi untuk memungkinkan waktu startup tambahan memuat / mengkompilasi kode Clojure. Mungkin menambahkan 1-2 detik untuk waktu startup aplikasi yang khas, yang cukup bahwa pengguna Anda mungkin akan menghargai beberapa umpan balik. Jika Anda pintar, Anda dapat benar-benar membuang seluruh UI sementara hal-hal lain dimuat di latar belakang tetapi ini membutuhkan perhatian dan mungkin menguji konkurensi Anda kung-fu :-)
  • Anda dapat mencampur Java dan Clojure secara relatif bebas karena mereka dapat memanggil mundur dan maju dengan cukup transparan. Satu-satunya komplikasi jika Anda ingin Java memanggil Clojure adalah Java suka mengetahui kelas / antarmuka yang dipanggilnya pada waktu kompilasi. Pilihan yang baik adalah memiliki kode Clojure secara dinamis mengimplementasikan antarmuka Java yang dikompilasi aleady melalui reify .
  • Saya merasa cukup mudah untuk mengembangkan dan mengemas aplikasi dalam satu toples yang berisi Clojure dan kode Java menggunakan Eclipse / Maven. Kode Clojure dapat dengan mudah dimasukkan src/main/resourcesdan dimuat / dikompilasi pada saat runtime.
  • Anda dapat menggunakan pembungkus Clojure GUI seperti jungkat - jungkit jika Anda mau. Sepertinya cukup bagus. Saya memutuskan untuk tidak menggunakannya, terutama karena saya ingin melakukan beberapa hal fiddly dengan Swing secara langsung dan tidak merasa bahwa saya membutuhkan lapisan abstraksi tambahan.
mikera
sumber
jawaban yang bagus ... 1. Sangat menarik dan terima kasih atas tautannya ke kode sumber Anda: pasti akan membantu. Sekarang saya perlu membuat lingkungan pengembangan saya "stabil" (baru saja mencoba leiningen + clojure-mode + nrepl.el terbaru dan itu belum berfungsi ...;)
Cedric Martin