Java (ainda) é a linguagem de plataforma cruzada de escolha? [fechadas]

20

Quando comecei a usar Java nos anos 90, era tudo " Escreva uma vez, execute em qualquer lugar! " Desde o primeiro dia. Provavelmente tudo era verdade na época e eu também fazia parte do coral.

Não tenho mais certeza do que pensar sobre isso, considerando todas as outras linguagens usando tempos de execução em várias plataformas (python, flash, perl, html, php ...). Mas ainda estou vendo muitos argumentos que dizem que você deve usar Java porque é supostamente melhor para o desenvolvimento de plataforma cruzada.

Então, isso ainda é verdade hoje? Java ainda é a linguagem de escolha para o desenvolvimento de várias plataformas?

  • Seja específico com foco nos aspectos de plataforma cruzada.
  • Não estou pedindo comparações gerais de recursos no idioma.

Atualização: Ótimas respostas até agora! A maioria das respostas parece favorecer Java ou web. Alguma contribuição da multidão de roteiros?

Martin Wickman
fonte
3
Esse comentário não aborda o cerne da questão, mas é um fator a ser considerado: os aplicativos Web baseados em Java, direcionados aos usuários do Windows, são algo para se afastar. O Oracle JVM para Windows teve muitos problemas de segurança recentemente. Dessa forma, você pode descobrir que usuários experientes não usam aplicativos da Web baseados em Java porque desinstalaram a JVM.
cutucar
Sua pergunta é baseada no pressuposto de que era, até mesmo, o idioma de escolha entre plataformas.
Lucas Ramage 12/07

Respostas:

10

linguagens de estilo de script como python também facilitam o desenvolvimento de plataforma cruzada. Agora, se você gosta de Python (ou de outras línguas) depende de você, e provavelmente não precisamos iniciar esse debate aqui.

O Java tenta forçar você a escrever um código que será executado de forma portável, enquanto o python permite que você escreva um código portátil. A própria linguagem python será executada de maneira portável, mas as bibliotecas externas podem ou não. Além disso, o python dará livremente acesso a serviços específicos da plataforma.

O Java tem uma vantagem aí? Eu acho que em ambos os casos, você pode escrever o código portátil com a mesma facilidade. Ou seja, você pode escrever código e, geralmente, ele funciona em plataformas diferentes. Mas você não pode se safar apenas escrevendo código e assumindo que ele funcionará em qualquer lugar. Eu trabalhei em um projeto python que produziu versão para Windows, Linux e Mac e encontramos muito poucos problemas de plataforma cruzada. (O único que eu lembro foi devido a um bug na biblioteca em que estávamos usando o pygame, o que causou problemas de desenho no Linux. Isso foi corrigido com a atualização da versão do pygame que usamos)

Outra questão é a implantação. Se você deseja distribuir programas independentes que executam seu código, será necessário produzir versões diferentes para plataformas diferentes. Para Java, você pode distribuir uma versão e assumir que o usuário possui o Java instalado ou pode instalá-lo. Nesse caso, o Java provavelmente vence na simplicidade do departamento de implantação.

No final, acho que se resume a qual idioma você gosta de trabalhar e que tipo de implantação você precisa executar.

Winston Ewert
fonte
18

Enquanto Java pode não ser o ou a única viável ferramenta multi-plataforma, que tem alguns pontos fortes:

  • É extremamente rápido.
  • É extremamente robusto.
  • É extremamente portátil (por exemplo, bytecode compilado há 10 anos no Windows 95 funciona bem no OS X hoje).

e algumas fraquezas:

  • As principais bibliotecas da GUI (Swing ...) estão mostrando sua idade (adições de terceiros ajudam aqui).
  • O idioma em si pode ser menos detalhado (por exemplo, exceções verificadas ...).
  • O tempo de inicialização pode ser mais rápido (embora melhore o tempo todo).

Ao falar especificamente sobre a plataforma Java , há um ponto a mais:

  • Existem várias linguagens que são executadas na JVM e interoperam com Java.
Joonas Pulakka
fonte
19
Extremamente rápido? Comparado com o que?
codificar
18
@ HardCode: comparado com qualquer idioma interpretado ou com a maioria dos idiomas compilados. C e C ++ podem ser feitos mais rapidamente em alguns casos, mas é difícil e fica cada vez mais difícil quando o número de núcleos cresce. Com a simultaneidade Java (utilizar esses vários núcleos com eficiência), é muito mais fácil obter na prática.
Joonas Pulakka
5
@HardCode, aparentemente, a JVM é o mais rápido tempo de execução disponível para quase qualquer linguagem interpretada (em oposição aos que os hackers linguagem fizeram-se)
14

Hoje é tão verdadeiro quanto era naquela época - ou seja, não inteiramente. Java é escrever uma vez, testar e depurar em todos os lugares. Claro que é muito menos trabalho que uma porta completamente nova, mas geralmente é mais trabalho do que o hype inicial nos fez acreditar.

Nosso produto possui um servidor Java que será executado no Windows ou Linux, mas vimos problemas específicos do SO com ele e verifique se temos servidores Linux e Windows disponíveis para suporte / teste, se necessário. As UIs Java tendem a ter mais problemas do que os servidores (embora muitos sejam cosméticos e, portanto, potencialmente possam ser ignorados, dependendo do aplicativo).

Embora não seja estritamente uma linguagem para mim, a Web é a plataforma de plataforma cruzada de sua escolha. Um front-end HTML / JavaScript significa que seu aplicativo será executado em praticamente qualquer plataforma cliente e, na maioria dos casos, esse era o objetivo real - sem ter que se preocupar se era um Mac ou um PC, qual versão do SO e assim por diante.

É claro que você geralmente ainda ditará a plataforma do servidor, mas quando as pessoas se tornarem muito mais flexíveis, especialmente nos dias de hoje, quando a maioria das empresas já suporta uma mistura de servidores Windows e Linux.

Jon Hopkins
fonte
8
Boa resposta. Obviamente, garantir que seu aplicativo funcione corretamente em todas as versões do navegador também pode ser uma dor de cabeça.
Tim Goodman
5
@ Tim: bom ponto. Acredito que os aplicativos de navegador são muito mais "testados e depurados em todos os lugares" do que os aplicativos de desktop Java.
Joonas Pulakka
5
@ Tim: +1. Conseguir que um aplicativo da Web funcione da mesma maneira em todos os principais navegadores é tão difícil quanto fazer com que um aplicativo Java funcione da mesma maneira em vários sistemas operacionais.
Yevgeniy Brikman
3
"escrever uma vez, depurar em todos os lugares" não é verdade na minha experiência. desde que você seja sensível e evite dependências específicas da plataforma, não tive problemas ao executar o mesmo código Java em várias plataformas (incluindo as da GUI). Sim, é claro que você deveria testá-lo, mas acho que em quase 15 anos de codificação do Java só tive um problema de portabilidade real (que foi minha culpa por codificar os separadores de diretório do Windows em vez de usar o útil File.pathSeparator de plataforma cruzada do Java !)
mikera
2
@mikera - Vimos problemas entre o Linux e o Windows que nada tinham a ver com o nosso código. Eles são raros, mas existem.
Jon Hopkins
9

Pessoalmente, eu diria que Java ainda é a linguagem de plataforma cruzada de escolha e provavelmente permanecerá lá por algum tempo (juntamente com aplicativos da Web). Escrevi um pouco mais sobre o tópico neste post sobre Java como plataforma de escolha , mas principalmente na frente da plataforma cruzada:

  • Desde que você tenha cuidado com suas dependências (por exemplo, evitando bibliotecas que usam JNI para interagir com código nativo), o Java pode ser gravado como executado sem modificação em todas as principais plataformas da JVM

  • Como o Java é normalmente distribuído como bytecode independente da máquina, é possível executar sem recompilação em qualquer JVM (uma vez que a própria JVM local lida com a compilação JIT para código nativo). Por exemplo, consegui que um aplicativo GUI complexo e razoável fosse executado pela primeira vez em um Mac após o desenvolvimento no Windows - com o mesmo arquivo jar . Compare isso com a maioria das outras linguagens de plataforma cruzada, que normalmente exigem bibliotecas diferentes ou uma recompilação para uma plataforma diferente.

  • Muitas das principais bibliotecas que você precisa (GUI, rede, E / S, etc.) fazem parte do tempo de execução padrão e são gravadas de maneira multiplataforma. Portanto, você não precisa procurar e testar as bibliotecas de plataforma cruzada, é garantido que praticamente tudo o que você precisa já existe no ambiente de tempo de execução.

Mikera
fonte
3

Eu acho que você tem essas opções:

1) use um

  • compilado ou
  • linguagem interpretada.

2) Como você empacotará e entregará seu código?

  • Um "front-end", um binário / script?
  • Um "front-end", vários binários / scripts?
  • Vários "front-ends", vários binários / scripts?

Essas opções afetam o desempenho, a visibilidade e a distribuição do código soure.

Você se importa de dar seu código fonte? Os idiomas compilados podem ser para você. As linguagens compiladas parecem ter um desempenho melhor em micro-benchmarks do que as linguagens interpretadas (mesmo JIT). Além disso, se você depende de um ambiente de tempo de execução como Java, Python, Ruby etc., seu código pode ser mais difícil de distribuir.

Eu descobri que os aplicativos mais populares para desktops de plataforma cruzada usam "Um front-end, vários binários" usando C / C ++ e uma biblioteca de widgets entre plataformas, como Audacity, Blender, Firefox, Google Earth, OpenOffice, Skype, Songbird, Stellarium, VLC.

LennyProgrammers
fonte
Você cometeu um erro interessante ao listar o Skype em seus exemplos, mas esse aplicativo super popular realmente foi iniciado com Delphi / Pascal no Windows e portado com C / C ++ no linux e Objective-C no MacOS / iPhone
Maksee
Eu acho que a dicotomia compilada / interpretada é um pouco enganadora - Java, em certo sentido, também não é porque é compilado no bytecode independente da máquina para distribuição (ou seja, não está mais na forma de origem) e, em seguida, o JIT compilado posteriormente no código nativo em qualquer máquina em que você esteja executando. É totalmente multiplataforma, mas também oferece desempenho nativo, além de você não precisar distribuir sua fonte, se não quiser. ganhar / ganhar / ganhar.
Mikera
0

Eu direi não. python e ruby ​​são muito usados, assim como o javascript para o cliente e o servidor. Eu pessoalmente uso o .NET e não tenho problemas para executá-lo no mac e no linux (durante o desenvolvimento no windows)

-edit- eu ouço o LLVM está se tornando popular, mas ainda é extremamente pequeno. Isso permitirá que você use C ++ de plataforma cruzada em um único binário. Aparentemente, ele será executado no navegador, mas ainda não vi um exemplo em que permita modificar o dom ou chamar javascript.


fonte
LLVM não é sobre rodar em um navegador ... Você está falando sobre emscripten?
Camilo Martin
verifique a data. 4 anos atrás emscripten não existia. O NativeClient deveria funcionar (e tinha a desgraça em execução), mas não funcionou.
Agora vejo a data, mas ainda assim, o LLVM nunca foi especificamente sobre navegadores, certo?
Camilo Martin
1
Não. Embora eu gostaria de poder escrever C ++ ou alguns outros suportes linguagem LLVM em vez de JS ...
A esse respeito ...
Camilo Martin
-1

Se você incluir plataformas móveis no mix, também precisará incluir a recompilação. Por exemplo, android, j2me.

Conor
fonte