O envio de um aplicativo de desktop Clojure é realista?


25

Atualmente, estou enviando um aplicativo Java para desktop. É um aplicativo Java 5 Java / Swing simples e antigo e até agora tudo funcionou bem. O Java 5 foi direcionado porque alguns usuários estavam na versão / computadores do OS X que nunca devem ter o Java 6 (podemos levantar essa limitação em breve e mudar para um Java mais recente e simplesmente abandonar meus usuários presos ao Java 5).

Estou rapidamente me familiarizando com o Clojure, mas ainda não fiz muito Clojure para Java e Java para Clojure e fiquei imaginando se seria realista enviar um aplicativo de desktop Clojure em vez de um aplicativo Java ?

Atualmente, o aplicativo que estou enviando tem cerca de 12 MB com todo o .jar, portanto, adicionar o Clojure não parece ser um problema.

Meu plano seria fazer com que o Clojure chamasse APIs Java: meu aplicativo já está dividido em vários frascos independentes.

Se eu entendi que chamar corretamente o Clojure a partir de Java é mais difícil do que chamar o código Java a partir do Clojure, é por isso que basicamente reescrevi toda a interface do usuário (parte da interface do usuário), misturar componentes Swing e BufferedImages automáticos precisam ser reescritos de qualquer maneira devido ao aumento retina) e faça toda a fiação da Clojure.

Esse é o problema que estou enfrentando: é realista enviar um aplicativo de desktop Clojure? (certamente não parece muito difundido, mas o envio de aplicativos simples para desktops em Java também não é tão comum, e estou fazendo assim mesmo)

Tecnicamente, o que precisaria ser feito? (comparado ao envio de um aplicativo Java)


1
Dê uma olhada no Seesaw , é um DSL Clojure para a criação de aplicativos GUI baseados em JVM (baseados em Swing).
— Michael Klishin

A gangorra parece ser útil para criar a GUI e fazer a fiação, mas e a integração das minhas APIs / bibliotecas Java existentes? Tudo deveria ser indolor? (Eu vou relatar aqui de qualquer maneira, mas eu gostaria de ter um pouco mais de feedback antes de tentar mudar para Clojure)
— Cedric Martin

O ClojureScript + (NW.js ou Atom Electron) faria o trabalho.
— Mario T. Lanza

Respostas:


28

Sim, é totalmente realista - poucas pessoas parecem estar fazendo isso ainda, mas acho que é apenas uma questão de tempo (Clojure é bem novo, afinal!)

Eu escrevi pessoalmente um jogo de código-fonte aberto no Clojure, que é executado como um aplicativo Swing (https://github.com/mikera/ironclad), então tenho algumas experiências para compartilhar que podem ser úteis.

  • Em média, você provavelmente deseja que o Clojure chame as APIs Java. Isso é principalmente senso comum - Java tem todas as ótimas bibliotecas, Clojure é a linguagem mais produtiva para colar as coisas.
  • Você pode escrever um "carregador" baseado em Java com um main(...)método que inicie a parte do código Clojure. Entre outras coisas, isso significa que você não precisará compilar seu código Clojure. Exemplo de código aqui: https://github.com/mikera/ironclad/blob/master/src/main/java/ic/IronClad.java
  • Você provavelmente desejará fazer coisas como exibir uma tela inicial enquanto o aplicativo inicializa para permitir um tempo extra de inicialização para carregar / compilar o código Clojure. Provavelmente, ele adiciona de 1 a 2 segundos a um tempo típico de inicialização do aplicativo, o que é suficiente para que o usuário provavelmente aprecie alguns comentários. Se você é esperto, pode realmente ativar toda a interface do usuário enquanto outras coisas são carregadas em segundo plano, mas isso requer alguns cuidados e pode testar sua concorrência simultânea :-)
  • Você pode misturar Java e Clojure de maneira relativamente livre, pois eles podem chamar de trás para frente e para frente de maneira bastante transparente. A única complicação se você deseja que o Java chame o Clojure é que o Java gosta de conhecer a classe / interface que está chamando no momento da compilação. Uma boa opção é fazer com que o código Clojure implemente dinamicamente uma interface Java já compilada via reify .
  • Achei muito fácil desenvolver e empacotar um aplicativo em um único frasco contendo os códigos Clojure e Java usando o Eclipse / Maven. O código Clojure pode ser simplesmente inserido src/main/resourcese carregado / compilado em tempo de execução.
  • Você pode usar os wrappers da GUI do Clojure como gangorra, se quiser. Parece ser muito bom. Decidi não usá-lo, principalmente porque queria fazer algumas coisas complicadas diretamente com o Swing e não sentia que precisava de uma camada extra de abstração.

ótima resposta ... +1. Muito interessante e obrigado pelo link para o seu código-fonte: ele definitivamente ajudará. Agora eu preciso para obter o meu ambiente de desenvolvimento "estável" (mais recente + clojure-mode Leiningen apenas tentei + nrepl.el e ele não está funcionando ... ainda;)
— Cedric Martin
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.