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 와 함께 약 12MB 이므로 Clojure를 추가하는 것은 너무 큰 문제가되지 않습니다.

내 계획은 Clojure가 Java API를 호출하는 것입니다. 내 응용 프로그램은 이미 여러 개의 독립적 인 jar로 나뉩니다.

Java에서 Clojure를 올바르게 호출하는 것이 Clojure에서 Java 코드를 호출하는 것보다 어렵 기 때문에 기본적으로 모든 UI (UI의 일부, Swing 구성 요소 및 자체 제작 된 BufferedImages를 혼합하여 다시 작성해야 함)를 다시 작성해야합니다. Clojure의 모든 '배선'을 수행하십시오.

이것이 제가 직면 한 문제입니다. Clojure 데스크톱 앱을 제공하는 것이 현실적입니까? (확실히 널리 퍼져 있지는 않지만 일반 Java 데스크톱 앱을 제공하는 것은 일반적인 일이 아니며 어쨌든하고 있습니다)

기술적으로 무엇을해야합니까? (Java 앱 배송과 비교)


1
Seesaw를 살펴보십시오. JVM 기반 GUI 앱 (스윙 기반)을 빌드하기위한 Clojure DSL입니다.
Michael Klishin

시소는 GUI를 구축하고 배선을하는 것이 유용한 것으로 보이지만 기존 Java API / 라이브러리의 통합은 어떻습니까? 모두 고통스럽지 않습니까? (어쨌든 여기에보고하지만 Clojure로 전환하기 전에 좀 더 피드백을 받고 싶습니다)
Cedric Martin

ClojureScript + (NW.js 또는 Atom Electron)가 작업을 수행합니다.
마리오 T. 란자

답변:


28

그렇습니다. 전적으로 현실적입니다. 많은 사람들이 아직하고 있지는 않지만 시간 문제 일뿐입니다 (Clojure는 결국 매우 새로운 것입니다!)

Clojure에서 오픈 소스 게임을 개인적으로 작성했으며 스윙 응용 프로그램 (https://github.com/mikera/ironclad)으로 실행되므로 유용 할 수있는 공유 경험이 있습니다.

  • 평균적으로 Clojure가 Java API를 호출하도록 할 수 있습니다. Java는 모든 훌륭한 라이브러리를 가지고 있으며 Clojure는 사물을 함께 붙이는 데 더 생산적인 언어입니다.
  • main(...)코드의 Clojure 부분을 시작 하는 메소드를 사용 하여 Java 기반 "로더"를 작성할 수 있습니다 . 무엇보다 Clojure 코드를 AOT 컴파일 할 필요가 없습니다. 여기에 예제 코드 : https://github.com/mikera/ironclad/blob/master/src/main/java/ic/IronClad.java
  • Clojure 코드를로드 / 컴파일하는 추가 시작 시간을 허용하기 위해 응용 프로그램이 초기화되는 동안 스플래시 화면을 던지는 것과 같은 작업을 원할 것입니다. 일반적인 앱 시작 시간에 1-2 초가 추가되어 사용자가 약간의 피드백을받을 수있을 것입니다. 당신이 영리하다면 실제로 다른 UI가 백그라운드에서로드되는 동안 전체 UI를 던질 수 있지만 이것은 약간의주의가 필요하며 동시성 쿵푸를 테스트 할 수 있습니다 :-)
  • Java와 Clojure는 비교적 투명하게 앞뒤로 호출 할 수 있으므로 비교적 자유롭게 혼합 할 수 있습니다. Java가 Clojure를 호출하기를 원하는 유일한 문제는 Java가 컴파일 타임에 호출하는 클래스 / 인터페이스를 알고 싶어한다는 것입니다. 좋은 옵션은 Clojure 코드가 reify를 통해 aleady -compiled Java 인터페이스를 동적으로 구현하도록하는 것 입니다.
  • Eclipse / Maven을 사용하여 Clojure와 Java 코드를 모두 포함하는 단일 jar로 앱을 개발하고 패키지하는 것이 매우 쉽다는 것을 알았습니다. Clojure 코드는 간단히 src/main/resources런타임에 넣거나 로드 할 수 있습니다 .
  • 원하는 경우 시소 와 같은 Clojure GUI 래퍼를 사용할 수 있습니다 . 꽤 좋은 것 같습니다. 나는 Swing을 사용하여 약간의 미묘한 일을하고 싶었고 추가 추상화 계층이 필요하다고 느끼지 않기 때문에 주로 사용하지 않기로 결정했습니다.

좋은 대답 ... +1. 매우 흥미롭고 소스 코드에 대한 링크에 감사드립니다. 확실히 도움이 될 것입니다. 이제 개발 환경을 "안정적"으로 만들어야합니다 (최신 leiningen + clojure-mode + nrepl.el을 시도했지만 작동하지 않습니다 ... 아직;)
Cedric Martin
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.