Bir Clojure masaüstü uygulaması nakliye gerçekçi midir?


25

Şu anda bir masaüstü Java uygulaması gönderiyorum. Düz eski bir Java 5 Java / Swing uygulaması ve şimdiye kadar her şey güzel çalıştı. Bazı kullanıcılar hiçbir zaman Java 6'ya sahip olmayacak OS X sürümünde / bilgisayarlarında olduğu için Java 5 hedeflendi (bu sınırlamayı yakında kaldırabilir ve daha yeni bir Java'ya geçebilir ve sadece kullanıcılarımı Java 5'e takılmış bırakarak bırakabiliriz).

Hızlı bir şekilde Clojure ile hızlanıyorum ama henüz pek fazla Clojure-Java ve Java-Clojure yapmadım ve bir Java uygulaması yerine bir Clojure masaüstü uygulaması göndermenin gerçekçi olup olmadığını merak ediyordum. ?

Ben gönderiyorum uygulama şu anda tüm .jar ile yaklaşık 12 MB olduğunu, bu yüzden Clojure eklemek çok fazla bir sorun olarak görülmedi.

Planım Clojure'un Java API'lerini çağırmasını sağlamak: uygulamam zaten birkaç bağımsız kavanozlara bölünmüş durumda.

Eğer doğru bir şekilde Java’dan Clojure’u aramayı anlarsam, Clojure’den Java kodunu çağırmaktan daha zordur, bu yüzden temel olarak tüm UI’yi (UI’nın bir parçası, Swing bileşenlerini karıştırmak ve kendi kendine yapılan BufferedImages’ın yeniden yükselme nedeniyle yeniden yazılması gerekir) retina ekran)) ve tüm 'kablolama' Clojure dan yapın.

Demek karşılaştığım sorun bu: Clojure masaüstü uygulamasını göndermek gerçekçi mi? (kesinlikle çok yaygın görünmüyor, ancak daha sonra düz Java masaüstü uygulamalarını göndermek de yaygın değil ve yine de yapıyorum.)

Teknik olarak ne yapılması gerekiyor? (bir Java uygulaması göndermeye kıyasla)


1
Tahterevalli'ye göz atın , JVM tabanlı GUI uygulamaları (Swing tabanlı) oluşturmak için bir Clojure DSL'dir.
Michael Klishin

Tahterevalli, GUI'yi oluşturmanın ve kablolamayı yapmanın yararlı olabileceğini kanıtlıyor gibi görünüyor, peki ya mevcut Java API'larımın / kütüphanelerimin entegrasyonu hakkında? Hepsi acısız olmalı mı? (Yine de burada rapor edeceğim ancak Clojure'a geçmeden önce biraz daha fazla geri bildirim almak istiyorum)
Cedric Martin

ClojureScript + (NW.js veya Atom Electron) işi yapardı.
Mario T. Lanza

Yanıtlar:


28

Evet, tamamen gerçekçi - pek çok insan henüz bunu yapmıyor gibi görünüyor ama bence bu sadece bir zaman meselesi (Clojure sonuçta oldukça yeni!)

Kişisel olarak Clojure'da Swing uygulaması olarak çalışan bir açık kaynaklı oyun yazdım (https://github.com/mikera/ironclad) bu yüzden yararlı olabilecek bazı deneyimlerim var.

  • Ortalama olarak, muhtemelen Clojure'un Java API'larına çağrılmasını istemelisiniz. Bu çoğunlukla sağduyudur - Java bütün büyük kütüphanelere sahiptir, Clojure bir şeyleri yapıştırmak için daha verimli bir dildir.
  • Java tabanlı bir "yükleyici" main(...)kodun Clojure bölümünü başlatan bir yöntemle yazmak isteyebilirsiniz . Diğer şeylerin yanı sıra, bu, Clojure kodunuzu derlemek AOT gerekmeyeceği anlamına gelir. Buradaki örnek kod: https://github.com/mikera/ironclad/blob/master/src/main/java/ic/IronClad.java
  • Muhtemelen, uygulama başlangıç ​​Clojure kodunu yüklemeye / derlemeye izin vermek için başlatılırken başlangıç ​​ekranını açmak gibi şeyler yapmak isteyeceksiniz. Muhtemelen tipik bir uygulama başlatma zamanına 1-2 saniye ekler, bu da kullanıcının muhtemelen bazı geri bildirimleri takdir etmesi için yeterlidir. Eğer akıllıysanız, arka planda başka şeyler yüklenirken aslında tüm UI'yi fırlatabilirsiniz, ancak bu biraz özen gerektirir ve eşzamanlılık kung-fu'nuzu test edebilir :-)
  • Java ve Clojure'u nispeten serbestçe karıştırabilirsiniz, çünkü bunlar oldukça şeffaf bir şekilde geriye ve ileriye gidebilirler. Java'nın Clojure'u aramasını istiyorsanız tek yapmanız gereken, Java'nın derleme zamanında aradığı sınıfı / arayüzü bilmeyi sevmesidir. İyi bir seçenek Clojure kodunun dinamik olarak yeniden derlenmiş bir Java arayüzü oluşturmasıdır .
  • Eclipse / Maven kullanarak hem Clojure hem de Java kodu içeren tek bir kavanozda bir uygulama geliştirmeyi ve paketlemeyi oldukça kolay buldum. Clojure kodu basitçe yerleştirilebilir src/main/resourcesve çalışma zamanında yüklenebilir / derlenebilir.
  • İsterseniz tahterevalli gibi Clojure GUI sarmalayıcıları kullanabilirsiniz . Oldukça iyi görünüyor. Kullanmamaya karar verdim, çünkü doğrudan Swing ile bazı yanlış şeyler yapmak istedim ve fazladan bir soyutlama katmanına ihtiyacım olduğunu düşünmedim.

büyük cevap ... +1. Kaynak koduna bağlantı için çok ilginç ve teşekkürler: kesinlikle yardımcı olacaktır. Şimdi geliştirme ortamımı "kararlı" bulmam gerekiyor (en son leiningen + clojure-mode + nrepl.el'i denedim ve henüz çalışmadı ...)
Cedric Martin
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.