Чи реалістична доставка додатка 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 Мбайт з усіма .jar, тому додавання Clojure не вважає зайвою проблемою.

Мій план полягав би в тому, щоб мати Clojure call API API: моя програма вже розділена на кілька незалежних банок.

Якщо я правильно розумію, викликати Clojure з Java складніше, ніж викликати Java-код з Clojure, тому я в основному переписав увесь інтерфейс (частина інтерфейсу, змішування компонентів Swing та власноруч виготовлений BufferedImages все одно потрібно переписати через зростання дисплея сітківки), і виконайте всю «проводку» від Clojure.

Тож це проблема, з якою я стикаюся: чи реально доставити настільний додаток Clojure? (це, звичайно, не дуже поширене, але тоді доставка звичайних додатків для настільних Java теж не є загальним, і я все одно це роблю)

Технічно, що потрібно зробити? (порівняно з доставкою програми Java)


1
Погляньте на Seesaw , це Clojure DSL для створення GUI-програм на основі JVM (Swing-based).
Майкл Клішин

Seesaw виглядає так, що це може виявитися корисним для створення графічного інтерфейсу та проведення проводки, але як бути з інтеграцією моїх існуючих API / бібліотек Java? Чи все повинно бути безболісним? (Я все одно повідомлю тут, але я хотів би отримати трохи більше відгуків, перш ніж намагатися перейти на Clojure)
Седрік Мартін,

ClojureScript + (NW.js або Atom Electron) зробив би цю роботу.
Маріо Т. Ланза

Відповіді:


28

Так, це цілком реально - не так вже й багато людей здається, але я думаю, що це лише питання часу (Clojure все-таки є доволі новим!)

Я особисто написав гру з відкритим кодом у Clojure, яка працює як додаток Swing (https://github.com/mikera/ironclad), тому поділюсь досвідом, який може бути корисним.

  • В середньому ви, мабуть, хочете, щоб Clojure дзвонив в Java API. Це в основному здоровий глузд - у Java є всі чудові бібліотеки, Clojure - більш продуктивна мова для склеювання речей.
  • Ви можете написати «завантажувач» на основі Java main(...)методом, який запускає частину коду Clojure. Крім усього іншого, це означає, що вам не доведеться AOT збирати ваш код Clojure. Приклад коду тут: https://github.com/mikera/ironclad/blob/master/src/main/java/ic/IronClad.java
  • Ви, ймовірно, захочете робити такі дії, як підкидання екрану заставки, тоді як ваше додаток ініціалізується, щоб забезпечити додатковий час завантаження / складання коду Clojure. Ймовірно, це додає 1-2 секунди до типового часу запуску програми, що достатньо, щоб ваш користувач, мабуть, оцінив відгуки. Якщо ви розумні, ви насправді можете підкинути весь інтерфейс, тоді як інші речі завантажуються на задній план, але це потребує певної обережності і може перевірити ваш кунг-фу:
  • Ви можете змішувати Java та Clojure відносно вільно, оскільки вони можуть дзвонити назад і вперед досить прозоро. Єдине ускладнення, якщо ви хочете, щоб Java викликала Clojure, це те, що Java любить знати клас / інтерфейс, який вона викликає під час компіляції. Хороший варіант - це, щоб код Clojure динамічно реалізував компільований алеаді інтерфейс Java через reify .
  • Мені здалося, що досить просто розробити та упакувати додаток в одній банці, що містить і код Clojure, і Java, використовуючи Eclipse / Maven. Код Clojure можна просто вставити src/main/resourcesі завантажувати / компілювати під час виконання.
  • Якщо ви хочете, ви можете використовувати обгортки графічного інтерфейсу Clojure на зразок глазур . Здається, це досить добре. Я вирішив не використовувати його, головним чином тому, що хотів робити якісь хитрощі з Swing безпосередньо і не відчував, що мені потрібен додатковий шар абстракції.

чудова відповідь ... +1. Дуже цікаво і дякую за посилання на ваш вихідний код: це обов'язково допоможе. Тепер мені потрібно зробити своє середовище розробки "стабільним" (тільки що спробував останню версію leiningen + clojure-mode + nrepl.el, і вона не працює ... поки;)
Седрік Мартін,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.