Como a JVM e o WORA do Java são diferentes de outras linguagens de alto nível?

11

No mundo Java, falamos frequentemente sobre a JVM e, quando o Java era novo, tinha o recurso supostamente matador de "Write Once, Run Anywhere".

Da maneira como as pessoas falam e escrevem, isso parece diferente da maneira como o Python, por exemplo, funciona. No entanto, eu não sabia de nenhuma maneira que o código Python que eu escrevi funcionaria diferente em outra máquina. (Embora eu não tenha escrito tanto Python.)

Então o que estou perdendo? Qual a diferença entre a JVM e um intérprete Python? Existe uma maneira de o Python não ter independência de plataforma do Java? Ou isso é apenas uma diferença cultural?

Eric Wilson
fonte
1
A principal diferença é o rigor da especificação da JVM. É simplesmente muito bem definido como deve (não deve) se comportar.

Respostas:

16

O Java faz um bom trabalho em isolar você do SO subjacente e fornece as mesmas ferramentas exatas na maioria das plataformas em que trabalha para conversar com as coisas no SO subjacente.

Por outro lado, o Python não é tão bom em isolar você do SO subjacente. Ele não tem uma maneira padrão de lidar com as comunicações de processos (observe as diferenças no módulo sys e no módulo os entre uma janela e * implementação nix do Python, por exemplo.)

Eu escrevi código em python que funcionaria apenas em uma caixa * NIX ou Windows usando apenas chamadas de API disponíveis em Python, onde em Java seria muito difícil escrever código que era apenas uma API Java que não funcionaria da mesma maneira em um Caixa do Windows ou * caixa NIX

mangelo
fonte
1
Não é nada difícil escrever código Java que funcione apenas no Windows; apenas codificar um caminho de arquivo do Windows como "C: \ MyApp \ data"
Kevin Cline
@kevincline Caminhos codificados são uma prática ruim em qualquer sistema operacional. Mas o Java não exige que você faça isso, porque oferece métodos independentes do sistema operacional para recuperar diretórios comuns, como o diretório do usuário ou o caminho de instalação do programa atual.
Philipp Philipp
3

Topicamente e apenas a partir de um idioma de execução, há pouca diferença. A JVM, em particular, foi projetada não apenas como intérprete, mas também como compilador de tempo de execução, inferência de código, uma camada de virtualização instrumental que pode ter ganchos dinâmicos aplicados, várias semânticas de GC e a capacidade de descrever a ergonomia da virtualização, para citar alguns. Python pode ser executado em uma JVM? O Java pode ser executado em um intérprete Python?

Muitos intérpretes são intérpretes de linguagem / token de tempo de execução, JVMs (e outros), como você sabe interpretar / compilar / executar código intermediário. A IBM, por exemplo, faz isso há décadas fora do Java, não é novidade. Até o VB rodou em código intermediário por algum tempo, acredito?

A WORA está praticamente obsoleta agora, pois muitas linguagens interpretadas são executadas praticamente em qualquer lugar.

Jé Queue
fonte
3

Quando o Java era novo, o WORA era algo para se gabar - especificamente, que você poderia compilar em uma plataforma e executá-lo (bytecode compilado) em outras plataformas.

Obviamente, os idiomas interpretados são executados de maneira semelhante, independentemente da plataforma em que o intérprete é executado (desde que o intérprete esteja disponível para essa plataforma). No entanto, sistemas de arquivos, problemas de permissão, codificações, terminações de linha e inúmeros outros problemas pequenos, mas irritantes, podem causar dores de cabeça. Algumas coisas dependentes da plataforma não são fáceis de abstrair.

Joonas Pulakka
fonte
1

O Python tem uma GUI independente da plataforma?

De qualquer forma, o recurso WORA era - novamente - atrair os programadores C, já que C tendia a modelar a plataforma subjacente de perto e as plataformas eram diferentes (tamanho da palavra "endianess"), criando programas C totalmente portáteis, exigindo muito cuidado e atenção.

A promessa de Java era que toda essa tediosidade não precisava ser feita, pois a plataforma está muito bem definida e você SABE que um caractere é de 16 bits etc. Além disso, a GUI é escrita em Java e também 100% portátil, o que significa que seu O programa pode ser executado em um computador que você nunca ouviu falar e até executar corretamente.


fonte
6
O Python tem várias alternativas de GUI independentes da plataforma: docs.python.org/faq/…
Joonas Pulakka
As GUIs Java são notórias por não serem exibidas corretamente em várias plataformas, então eu não me gabaria exatamente desse aspecto. No entanto, eu concordo com o restante de sua declaração.
rage
-4

Exceto que Java não é enfaticamente WORA. Eu vi o software Java que quebrou depois que o Java foi atualizado para uma versão superior no número da versão secundária . IMHO, WORA é apenas um truque de marketing.

zvrba
fonte
1
Esta não é realmente uma resposta para a pergunta.
Eric Wilson
-1 porque Java é WORA para todos os fins práticos. Ele vai funcionar se você evitar hacks específicos do sistema e outras coisas, obviamente nativa como JNI. Eu tive mais de 50.000 aplicativos de linha executando perfeitamente no Windows, Mac e Linux, sem alterações, pela primeira vez, com o mesmo arquivo .jar compilado. Se você se apegar ao Java puro, tudo funciona.
Mikera # 1
Parece que você entendeu mal o que significa o WORA.