การจัดส่งแอปเดสก์ท็อป Clojure เป็นจริงหรือไม่


25

ฉันกำลังจัดส่งแอปพลิเคชัน Java บนเดสก์ท็อป มันเป็นแอพ Java 5 Java / Swing แบบธรรมดาและทุกอย่างทำงานได้ดี มีการกำหนดเป้าหมาย Java 5 เนื่องจากผู้ใช้บางรายอยู่ในรุ่น OS X / คอมพิวเตอร์ซึ่งจะไม่มี Java 6 (เราอาจยกเลิกข้อ จำกัด นี้ในไม่ช้าและสลับไปใช้ Java รุ่นใหม่และทิ้งผู้ใช้ของฉันที่ติดอยู่กับ Java 5)

ฉันกำลังเร่งความเร็วอย่างรวดเร็วด้วย Clojure แต่ฉันยังไม่ได้ทำ Clojure-to-Java และ Java-to-Clojure จำนวนมากจริงๆและฉันสงสัยว่ามันเป็นเรื่องจริงหรือไม่ที่จะจัดส่งแอปพลิเคชัน Clojure เดสก์ท็อปแทนแอพพลิเคชัน Java ?

แอปพลิเคชันที่ฉันกำลังจัดส่งอยู่ในขณะนี้ประมาณ 12 MB พร้อมด้วย. jarทั้งหมดดังนั้นการเพิ่ม Clojure ไม่พบปัญหามากเกินไป

แผนของฉันคือการมี Clojure เรียก Java APIs: ใบสมัครของฉันแบ่งออกเป็นหลายขวด

ถ้าฉันเข้าใจการเรียก Clojure จาก Java อย่างถูกต้องนั้นยากกว่าการเรียกรหัส Java จาก Clojure ซึ่งเป็นสาเหตุที่ฉันต้องเขียน UI ทั้งหมด (ส่วนหนึ่งของ UI การผสมคอมโพเนนต์ Swing และ BufferedImages ที่สร้างขึ้นด้วยตนเองจำเป็นต้องเขียนใหม่เนื่องจากการเพิ่มขึ้น ของจอแสดงผลเรตินา) และทำ 'เดินสาย' ทั้งหมดจาก Clojure

นั่นคือปัญหาที่ฉันกำลังเผชิญอยู่: เป็นเรื่องจริงหรือไม่ที่จะส่งแอพพลิเคชั่นเดสก์ท็อป Clojure? (ดูเหมือนว่ามันจะไม่แพร่หลายอย่างมาก แต่จากนั้นส่งแอป Java ธรรมดาบนเดสก์ท็อปที่ไม่ธรรมดาและฉันก็ทำต่อไป)

ในทางเทคนิคแล้วต้องทำอะไร? (เทียบกับการจัดส่งแอป Java)


1
ลองดูที่Seesawเป็น Clojure DSL สำหรับการสร้างแอพ GUI ที่ใช้ JVM (อิงตาม Swing)
Michael Klishin

กระดานหกดูเหมือนว่ามันอาจเป็นประโยชน์ในการสร้าง GUI และทำการเดินสาย แต่สิ่งที่เกี่ยวกับการรวมของ Java APIs / ห้องสมุดที่มีอยู่ของฉัน? มันควรจะเจ็บปวดทั้งหมดหรือไม่ (ฉันจะรายงานที่นี่ต่อไป แต่ฉันต้องการได้รับข้อเสนอแนะเพิ่มเติมเล็กน้อยก่อนที่จะพยายามเปลี่ยนไปใช้ Clojure)
Cedric Martin

ClojureScript + (NW.js หรือ Atom Electron) จะทำงานได้
Mario T. Lanza

คำตอบ:


28

ใช่มันเหมือนจริงทั้งหมด - มีคนไม่มากนักที่ดูเหมือนจะทำ แต่ฉันคิดว่ามันเป็นเพียงเรื่องของเวลา (Clojure ค่อนข้างใหม่หลังจากทั้งหมด!)

ฉันได้เขียนเกมโอเพนซอร์ซส่วนตัวใน Clojure ซึ่งทำงานเป็นแอปพลิเคชัน Swing (https://github.com/mikera/ironclad) ดังนั้นมีประสบการณ์ในการแบ่งปันซึ่งอาจเป็นประโยชน์

  • โดยเฉลี่ยคุณอาจต้องการให้ Clojure โทรเข้าสู่ Java APIs นี่คือสามัญสำนึกส่วนใหญ่ - Java มีห้องสมุดที่ยอดเยี่ยมทั้งหมด Clojure เป็นภาษาที่มีประสิทธิผลมากขึ้นสำหรับการติดกาวเข้าด้วยกัน
  • คุณอาจต้องการเขียน "ตัวโหลด" บน Java ด้วยmain(...)วิธีการที่เรียกใช้งานส่วน Clojure ของรหัส เหนือสิ่งอื่นใดนั่นหมายความว่าคุณจะไม่ต้องคอมไพล์โค้ด Clojure ของคุณ โค้ดตัวอย่างที่นี่: https://github.com/mikera/ironclad/blob/master/src/main/java/ic/IronClad.java
  • คุณอาจต้องการทำสิ่งต่าง ๆ เช่นโยนหน้าจอเริ่มต้นในขณะที่แอปพลิเคชันของคุณเริ่มต้นเพื่อให้สามารถโหลด / รวบรวมรหัส Clojure ได้ อาจเพิ่ม 1-2 วินาทีในเวลาเริ่มต้นแอปทั่วไปซึ่งเพียงพอที่ผู้ใช้ของคุณอาจจะพอใจกับความคิดเห็น หากคุณฉลาดคุณสามารถขว้าง UI ทั้งหมดในขณะที่สิ่งอื่น ๆ โหลดในพื้นหลัง แต่ต้องใช้ความระมัดระวังและอาจทดสอบพ้องของคุณ kung-fu :-)
  • คุณสามารถผสม Java และ Clojure ได้อย่างอิสระเนื่องจากพวกเขาสามารถโทรกลับไปข้างหน้าและส่งต่ออย่างโปร่งใส ภาวะแทรกซ้อนเพียงอย่างเดียวหากคุณต้องการให้ Java เรียก Clojure คือ Java ชอบรู้คลาส / อินเตอร์เฟสที่กำลังเรียกใช้ในเวลาคอมไพล์ ตัวเลือกที่ดีคือการมีรหัส Clojure แบบไดนามิกใช้อินเตอร์เฟซ Java aleady รวบรวมผ่านทางทำให้เป็นจริง
  • ฉันพบว่ามันค่อนข้างง่ายในการพัฒนาและจัดทำแอปในโถเดียวที่มีทั้ง Clojure และรหัส Java โดยใช้ Eclipse / Maven รหัส Clojure สามารถใส่src/main/resourcesและรับ / รวบรวมที่รันไทม์
  • คุณสามารถใช้ Clojure GUI wrappers เช่นกระดานหกหากคุณต้องการ ดูเหมือนว่าจะค่อนข้างดี ฉันตัดสินใจที่จะไม่ใช้มันเป็นส่วนใหญ่เพราะฉันต้องการทำบางสิ่งบางอย่างที่ยุ่งเหยิงกับสวิงโดยตรงและไม่รู้สึกว่าฉันต้องการสิ่งที่เป็นนามธรรมอีกชั้นหนึ่ง

คำตอบที่ดี ... +1 น่าสนใจมากและขอบคุณสำหรับลิงก์ไปยังซอร์สโค้ดของคุณ: มันจะช่วยได้แน่นอน ตอนนี้ฉันต้องทำให้สภาพแวดล้อมการพัฒนาของฉัน "เสถียร" (ลอง leiningen ล่าสุด + clojure-mode + nrepl.el และมันยังไม่ทำงาน ... ยัง;)
Cedric Martin
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.