Clojureデスクトップアプリの出荷は現実的ですか?


25

現在、デスクトップJavaアプリケーションを出荷しています。これは単純な古いJava 5 Java / Swingアプリであり、これまでのところすべてがうまく機能しました。一部のユーザーは、Java 6を使用しないOS Xバージョン/コンピューターを使用していたため、Java 5がターゲットになりました(この制限をすぐに解除し、新しいJavaに切り替えて、Java 5で動かなくなったユーザーを単に放棄する可能性があります)。

私はClojureにすぐに慣れていますが、まだClojure-to-JavaおよびJava-to-Clojureの多くを実際に実行していないため、Javaアプリケーションの代わりにClojureデスクトップアプリケーションを出荷するのが現実的かどうか疑問に思いました?

私が出荷しているアプリケーションは現在、すべての.jarで約12 MBであるため、Clojureを追加してもそれほど大きな問題にはなりません。

私の計画は、ClojureがJava APIを呼び出すようにすることです。私のアプリケーションはすでにいくつかの独立したjarに分割されています。

ClojureをJavaから正しく呼び出すことがClojureからJavaコードを呼び出すよりも難しいことを理解しているので、基本的にすべてのUIを書き換えます(UIの一部、Swingコンポーネントと自作のBufferedImagesの混合は、上昇のためにとにかく書き換える必要があります)網膜ディスプレイの)、およびClojureからのすべての「配線」を行います。

それが私が直面している問題です。Clojureデスクトップアプリを出荷するのは現実的ですか?(確かにそれほど普及しているようには見えませんが、プレーンなJavaデスクトップアプリを出荷することはそれほど一般的ではなく、私はとにかくやっています)

技術的には、何をする必要がありますか?(Javaアプリの出荷と比較して)


1
Seesawを見てください。これは、JVMベースのGUIアプリ(Swingベース)を構築するためのClojure DSLです。
マイケルクリシン

SeesawはGUIを構築して配線するのに役立つかもしれませんが、既存のJava API /ライブラリの統合はどうですか?それはすべて無痛であるべきですか?(とにかくここで報告しますが、Clojureに切り替える前にもう少しフィードバックが欲しいです)
セドリックマーティン

ClojureScript +(NW.jsまたはAtom Electron)が仕事をします。
マリオT.ランザ

回答:


28

はい、それは完全に現実的です-多くの人がまだそれをやっていないようですが、それは時間の問題だと思います(結局、Clojureはかなり新しいです!)

Swingアプリケーション(https://github.com/mikera/ironclad)として実行されるClojureでオープンソースゲームを個人的に作成しました。

  • 平均して、おそらくJava APIにClojureを呼び出したいと思うでしょう。これはほとんど常識です-Javaにはすべての優れたライブラリがあり、Clojureは物事を結び付けるためのより生産的な言語です。
  • main(...)コードのClojure部分を起動するメソッドを使用して、Javaベースの「ローダー」を作成できます。これは、とりわけ、ClojureコードをAOTでコンパイルする必要がないことを意味します。サンプルコード:https : //github.com/mikera/ironclad/blob/master/src/main/java/ic/IronClad.java
  • Clojureコードをロード/コンパイルするための追加の起動時間を考慮して、アプリケーションの初期化中にスプラッシュスクリーンを表示するなどの操作を行うことをお勧めします。通常のアプリ起動時間に1〜2秒追加される可能性があります。これは、ユーザーがフィードバックに感謝するのに十分な時間です。あなたが賢いなら、実際にUI全体をスローすることができますが、他のものはバックグラウンドでロードされますが、これにはいくつかの注意が必要であり、並行性kung-fuをテストするかもしれません:-)
  • JavaとClojureは、前後にかなり透過的に呼び出すことができるため、比較的自由に混在させることができます。JavaにClojureを呼び出させたい場合の唯一の問題は、Javaがコンパイル時に呼び出しているクラス/インターフェースを知りたいということです。適切なオプションは、rejuを介してClojureコードにaleady-compiled Javaインターフェースを動的に実装させることです
  • Eclipse / Mavenを使用して、ClojureとJavaコードの両方を含む単一のjarにアプリを開発およびパッケージ化するのは非常に簡単であることがわかりました。Clojureコードは単純に挿入することができsrc/main/resources、実行時にロード/コンパイルされます。
  • 必要に応じて、シーソーのようなClojure GUIラッパーを使用できます。それはかなり良いようです。主にSwingを使って面倒なことを直接やりたいと思っていたのに、抽象化の追加レイヤーが必要だとは思わなかったため、私はそれを使うことに決めました。

素晴らしい答え... +1。非常に興味深く、ソースコードへのリンクに感謝します。間違いなく役立つでしょう。今、開発環境を「安定」にする必要があります(最新のラインニンゲン+ clojure-mode + nrepl.elを試してみましたが、まだ機能していません...);
セドリックマーティン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.