Por que o conceito de bytecode não é tão relevante como era antes


1. Introdução


Linguagens compiladas do tipo interpretado são aquelas linguagens de programação compiladas em algum tipo de representação intermediária (às vezes chamada de " bytecode "). O exemplo mais impressionante é a JVM (Java Virtual Machine).


Este artigo expõe meus pensamentos sobre o conceito de uma máquina virtual para linguagens de programação nas realidades atuais. Nas realidades, onde a maioria dos serviços funciona na Internet, os programas de desktop estão sendo gradualmente eliminados.


Causas de ocorrência


No momento em que a World Wide Web nasceu, apareceu a tecnologia Java que popularizou o uso de uma máquina virtual como um ambiente de tempo de execução para linguagens de programação de alto nível.


A Sun Microsystems tentou combinar a confiabilidade e a alta velocidade das linguagens compiladas com a portabilidade e a facilidade de uso das linguagens interpretadas. Até certo ponto, a idéia foi concretizada, porque o Java ainda se tornou a tecnologia mais comum na construção de servidores altamente carregados.


Entre outras coisas, foi apresentado um dos principais requisitos da plataforma, que mais tarde se tornou o slogan - "Compile uma vez, corra em todos os lugares!" . Isso significava que o programador deve apenas uma vez compilar o código-fonte no chamado bytecode, capaz de executar em qualquer sistema em que a JVM esteja instalada.


Isso se tornou a força motriz da tecnologia, lançando muitos idiomas em segundo plano. Esse foi um tipo de revolução no mundo da computação digital, porque antes ninguém conseguia atingir um nível semelhante de plataforma cruzada. Agora, os usuários podem baixar a mesma versão do programa em muitos sistemas operacionais e arquiteturas de processador e garantir que ele certamente funcione exatamente como os desenvolvedores pretendiam.


Mas os tempos estão mudando, e a tecnologia com eles. A World Wide Web está ganhando cada vez mais popularidade, ocultando algumas coisas que nos são familiares.


A era dos serviços remotos


"Por que entregar programas aos usuários se você pode apenas criar um site?" - Essa pergunta foi feita por grandes empreendedores, que mais tarde resultaram em emigração de serviços em larga escala para a World Wide Web. Os programas de desktop padrão começaram a perder sua popularidade, porque é muito mais fácil e mais eficiente criar um site simples (ou não).


Consequentemente, a necessidade de baixar programas da Internet desapareceu com tanta frequência. Abra um site e execute as ações necessárias muito mais rapidamente do que o download de megabytes de dados binários.


Enquanto isso, o Java ganhou popularidade na construção desses mesmos sites, porque nada mais conveniente naquele momento (até hoje) não existia. Os arquivos de origem começaram a ser compilados apenas para uma arquitetura de servidor específica; portanto, o princípio "Compile uma vez, execute em qualquer lugar!" deixou de ter seu significado anterior . Os usuários pararam de baixar programas e os desenvolvedores começaram a compilar apenas para uma arquitetura específica.


Evolução da linguagem


Anteriormente, as linguagens de programação compiladas tinham uma funcionalidade bastante pobre da biblioteca padrão, por causa da qual era necessário usar muitas funções dependentes da plataforma, mesmo para um aplicativo simples que não faz nada sobrenatural.


As linguagens de programação também não pararam , e linguagens como Rust e Golang , ambas compiladas, vieram à tona, e ambas têm uma biblioteca padrão e muitas de terceiros que fornecem funcionalidade independente da arquitetura e do sistema operacional. Além disso, o ecossistema C / C ++ também não parou.


Como resultado, as bibliotecas padrão modernas e as máquinas virtuais desempenham a mesma função - elas convertem o código de plataforma cruzada em funções dependentes da plataforma.


O resto de


Alguns podem argumentar que ainda há uma demanda por programas de desktop. Basicamente, esses são programas fechados destinados ao uso interno em empresas, bem como um pequeno número de aplicativos disponíveis publicamente.


Nos dois casos, a compilação para centenas de plataformas diferentes não faz sentido, pois na grande maioria dos casos, apenas três sistemas operacionais conhecidos ( GNU / Linux , Microsoft Windows e Mac OS ) e uma família de arquiteturas de processador ( x86 ) são usados.


Conclusão


No total, temos máquinas virtuais que tornam seu trabalho mais lento (como tempos de execução de bytecode), que perderam suas principais vantagens devido aos dois fatores acima:


  1. A necessidade de executar o programa em centenas de arquiteturas diferentes não faz sentido, uma vez que a maioria dos programas funciona em servidores e não há muitas arquiteturas de usuário e sistemas operacionais.
  2. As linguagens compiladas não pararam e suas bibliotecas padrão adquiriram a funcionalidade básica necessária para o código de plataforma cruzada.

As discussões nos comentários são bem-vindas, espero que o artigo tenha solicitado algumas reflexões sobre a escolha do idioma certo para suas tarefas.


Adições


Conforme observado nos comentários , o código gerenciado possui algumas vantagens que não estão disponíveis para o código compilado, incluindo reflexão e anotações.

Source: https://habr.com/ru/post/pt454562/


All Articles