Czy wysyłanie aplikacji komputerowej Clojure jest realistyczne?

25

Obecnie wysyłam komputerową aplikację Java. Jest to zwykła stara aplikacja Java / Swing Java 5 i do tej pory wszystko działało ładnie. Java 5 została zaatakowana, ponieważ niektórzy użytkownicy korzystali z wersji OS X / komputerów, które nigdy nie będą miały Java 6 (możemy wkrótce znieść to ograniczenie i przejść na nowszą Javę, po prostu porzucając moich użytkowników, którzy utknęli w Javie 5).

Szybko zaczynam działać z Clojure, ale tak naprawdę nie zrobiłem jeszcze dużo Clojure-to-Java i Java-to-Clojure i zastanawiałem się, czy realistyczne byłoby dostarczenie aplikacji komputerowej Clojure zamiast aplikacji Java ?

Aplikacja, którą wysyłam, ma obecnie około 12 MB z całym plikiem .jar, więc dodanie Clojure nie wydaje się zbyt dużym problemem.

Moim planem byłoby wywołanie interfejsów API Java przez Clojure: moja aplikacja jest już podzielona na kilka niezależnych słoików.

Jeśli dobrze rozumiem, wywoływanie Clojure z Javy jest trudniejsze niż wywoływanie kodu Java z Clojure, dlatego po prostu przepisałem cały interfejs użytkownika (część interfejsu użytkownika, miksowanie komponentów Swing i własnoręcznie buforowane obrazy i tak wymagają przepisania ze względu na wzrost wyświetlacza siatkówki) i wykonaj całe „okablowanie” z Clojure.

Właśnie z tym mam problem: czy wysyłanie aplikacji komputerowej Clojure jest realistyczne? (z pewnością nie wydaje się to być bardzo rozpowszechnione, ale wysyłanie zwykłych aplikacji Java na komputery też nie jest tak powszechne i i tak to robię)

Technicznie, co należałoby zrobić? (w porównaniu z wysyłką aplikacji Java)

Cedric Martin
źródło
1
Spójrz na Seesaw , jest to Clojure DSL do tworzenia aplikacji GUI opartych na JVM (opartych na Swing).
Michael Klishin,
Seesaw wygląda na to, że przydatne może być zbudowanie GUI i wykonanie okablowania, ale co z integracją moich istniejących API / bibliotek Java? Czy to wszystko powinno być bezbolesne? (Mimo to zgłoszę się tutaj, ale chciałbym uzyskać nieco więcej opinii przed próbą przejścia na Clojure)
Cedric Martin
ClojureScript + (NW.js lub Atom Electron) wykonałby to zadanie.
Mario T. Lanza,

Odpowiedzi:

28

Tak, jest to całkowicie realistyczne - wydaje się, że niewielu ludzi to robi, ale myślę, że to tylko kwestia czasu (w końcu Clojure jest całkiem nowy!)

Osobiście napisałem grę typu open source w Clojure, która działa jako aplikacja Swing (https://github.com/mikera/ironclad), więc podziel się doświadczeniami, które mogą być przydatne.

  • Średnio prawdopodobnie chcesz mieć wywołanie Clojure do API Java. Jest to głównie zdrowy rozsądek - Java ma wszystkie wspaniałe biblioteki, Clojure jest bardziej produktywnym językiem do łączenia rzeczy.
  • Możesz napisać „moduł ładujący” oparty na Javie main(...)metodą, która uruchamia część kodu Clojure. Oznacza to między innymi, że nie będziesz musiał kompilować kodu Clojure. Przykładowy kod tutaj: https://github.com/mikera/ironclad/blob/master/src/main/java/ic/IronClad.java
  • Prawdopodobnie będziesz chciał robić rzeczy takie jak wyświetlanie ekranu powitalnego podczas inicjalizacji aplikacji, aby zapewnić dodatkowy czas uruchamiania ładowania / kompilacji kodu Clojure. Prawdopodobnie wydłuża to 1-2 sekundy do typowego czasu uruchamiania aplikacji, co wystarcza, aby użytkownik prawdopodobnie docenił opinie. Jeśli jesteś sprytny, możesz rzucić cały interfejs, podczas gdy inne rzeczy ładują się w tle, ale wymaga to trochę ostrożności i może przetestować twoją współbieżność kung-fu :-)
  • Możesz mieszać Java i Clojure stosunkowo swobodnie, ponieważ mogą one wywoływać wstecz i do przodu dość transparentnie. Jedyną komplikacją, jeśli chcesz, aby Java wywoływała Clojure, jest to, że Java lubi znać klasę / interfejs, który wywołuje w czasie kompilacji. Opcja dobrze jest mieć kodu Clojure dynamicznie realizować aleady skompilowane interfejs Java poprzez zreifikować .
  • Odkryłem, że tworzenie i pakowanie aplikacji w jednym słoiku zawierającym zarówno Clojure, jak i kod Java jest dość łatwe przy użyciu Eclipse / Maven. Kod Clojure można po prostu wprowadzić src/main/resourcesi załadować / skompilować w czasie wykonywania.
  • Możesz użyć owijarek GUI Clojure, takich jak huśtawka, jeśli chcesz. Wydaje się być całkiem niezły. Zdecydowałem się go nie używać, głównie dlatego, że chciałem robić kilka dziwacznych rzeczy bezpośrednio ze Swingiem i nie czułem, że potrzebuję dodatkowej warstwy abstrakcji.
mikera
źródło
świetna odpowiedź ... +1. Bardzo interesujące i dziękuję za link do twojego kodu źródłowego: to na pewno pomoże. Teraz muszę uzyskać stabilne środowisko programistyczne (właśnie wypróbowałem najnowszy tryb leiningen + clojure-mode + nrepl.el i nie działa ... jeszcze;)
Cedric Martin,