Là vận chuyển một ứng dụng máy tính để bàn Clojure thực tế?


25

Tôi hiện đang vận chuyển một ứng dụng Java trên máy tính để bàn. Nó là một ứng dụng Java / Swing Java 5 cũ đơn giản và cho đến nay mọi thứ đều hoạt động tốt. Java 5 bị nhắm mục tiêu vì một số người dùng trên phiên bản OS X / máy tính sẽ không bao giờ có Java 6 (chúng tôi có thể sớm gỡ bỏ giới hạn này và chuyển sang Java mới hơn và đơn giản là từ bỏ người dùng của tôi bị mắc kẹt với Java 5).

Tôi nhanh chóng bắt kịp tốc độ với Clojure nhưng tôi chưa thực sự thực hiện nhiều Clojure-to-Java và Java-to-Clojure và tôi đã tự hỏi liệu có thực tế khi gửi ứng dụng máy tính để bàn Clojure thay vì ứng dụng Java không ?

Ứng dụng tôi đang vận chuyển hiện có dung lượng khoảng 12 MB với tất cả .jar vì vậy việc thêm Clojure dường như không phải là vấn đề quá lớn.

Kế hoạch của tôi sẽ có API Java gọi Clojure: ứng dụng của tôi đã được chia thành nhiều lọ độc lập.

Nếu tôi hiểu cách gọi chính xác Clojure từ Java thì khó hơn gọi mã Java từ Clojure, đó là lý do tại sao tôi về cơ bản viết lại tất cả UI (một phần của UI, trộn lẫn các thành phần Swing và BufferedImages tự tạo dù sao cũng cần phải viết lại hiển thị võng mạc) và thực hiện tất cả các 'hệ thống dây' từ Clojure.

Vì vậy, đó là vấn đề tôi gặp phải: có thực tế khi gửi một ứng dụng máy tính để bàn Clojure không? (chắc chắn nó dường như không phổ biến lắm nhưng sau đó vận chuyển các ứng dụng Java dành cho máy tính để bàn đơn giản cũng không phổ biến và dù sao tôi cũng đang làm điều đó)

Về mặt kỹ thuật, những gì sẽ cần phải được thực hiện? (so với việc vận chuyển một ứng dụng Java)


1
Hãy xem Seesaw , nó là một Clojure DSL để xây dựng các ứng dụng GUI dựa trên JVM (Dựa trên swing).
Michael Klishin

Seesaw trông có vẻ hữu ích khi xây dựng GUI và thực hiện nối dây, nhưng còn việc tích hợp các thư viện / API Java hiện tại của tôi thì sao? Có nên tất cả không đau? (Dù sao tôi cũng sẽ báo cáo ở đây nhưng tôi muốn có thêm một chút phản hồi trước khi thử chuyển sang Clojure)
Cedric Martin

ClojureScript + (NW.js hoặc Atom Electron) sẽ thực hiện công việc.
Mario T. Lanza

Câu trả lời:


28

Vâng, nó hoàn toàn thực tế - dường như không có nhiều người đang làm điều đó nhưng tôi nghĩ đó chỉ là vấn đề thời gian (Clojure là khá mới mẻ sau tất cả!)

Cá nhân tôi đã viết một trò chơi mã nguồn mở trong Clojure chạy dưới dạng ứng dụng Xoay (https://github.com/mikera/ironclad) để có một số kinh nghiệm để chia sẻ có thể hữu ích.

  • Trung bình bạn có thể muốn có lệnh gọi Clojure vào API Java. Điều này chủ yếu là lẽ thường - Java có tất cả các thư viện tuyệt vời, Clojure là ngôn ngữ hiệu quả hơn để dán mọi thứ lại với nhau.
  • Bạn có thể muốn viết một "trình tải" dựa trên Java với một main(...)phương thức khởi chạy phần Clojure của mã. Trong số những thứ khác, điều này có nghĩa là bạn sẽ không phải biên dịch mã Clojure của mình. Mã ví dụ ở đây: https://github.com/mikera/ironclad/blob/master/src/main/java/ic/IronClad.java
  • Bạn có thể sẽ muốn làm những việc như ném lên màn hình giật gân trong khi ứng dụng của bạn khởi chạy để cho phép thêm thời gian khởi động tải / biên dịch mã Clojure. Nó có thể thêm 1-2 giây vào thời gian khởi động ứng dụng thông thường, đủ để người dùng của bạn có thể đánh giá cao một số phản hồi. Nếu bạn khéo léo, bạn thực sự có thể ném toàn bộ UI trong khi các công cụ khác tải xuống nền nhưng điều này đòi hỏi một chút cẩn thận và có thể kiểm tra kung-fu đồng thời của bạn :-)
  • Bạn có thể kết hợp Java và Clojure tương đối tự do vì chúng có thể gọi lùi và chuyển tiếp khá trong suốt. Sự phức tạp duy nhất nếu bạn muốn Java gọi Clojure là Java thích biết lớp / giao diện mà nó đang gọi vào thời gian biên dịch. Một tùy chọn tốt là để mã Clojure tự động triển khai giao diện Java được biên dịch hoàn toàn thông qua reify .
  • Tôi đã thấy khá dễ dàng để phát triển và đóng gói một ứng dụng trong một bình chứa cả mã Clojure và Java bằng Eclipse / Maven. Mã Clojure đơn giản có thể được đưa vào src/main/resourcesvà được tải / biên dịch khi chạy.
  • Bạn có thể sử dụng trình bao bọc GUI Clojure như bập bênh nếu bạn thích. Nó có vẻ là khá tốt. Tôi quyết định không sử dụng nó, chủ yếu là vì tôi muốn trực tiếp làm một số việc khó khăn với Swing và không cảm thấy rằng tôi cần thêm một lớp trừu tượng.

câu trả lời tuyệt vời ... +1. Rất thú vị và cảm ơn vì liên kết đến mã nguồn của bạn: nó chắc chắn sẽ giúp ích. Bây giờ tôi cần làm cho môi trường phát triển của mình "ổn định" (chỉ cần thử leiningen + clojure-mode + nrepl.el mới nhất và nó không hoạt động ... chưa;)
Cedric Martin
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.