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?
java
python
cross-platform
jvm
Eric Wilson
fonte
fonte
Respostas:
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
fonte
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.
fonte
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.
fonte
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
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.
fonte