quinta-feira, 12 de fevereiro de 2009

Bate Papo entre compilador e JVM

Conversa de hoje: O compilador e a JVM discutem a questão.
Quem é mais importante?
A Máquina Vitual Java
- O que, você está brincando? Olá. Sou o Java. Sou eu quem efetivamente faz um programa ser executado. O compilador apenas lhe oferece um arquivo. É só. Apenas um arquivo. Você pode imprimir e usá-lo como papel de parede, para acender fogo, forrar a gaiola de pássaros ou seja lá o que for, mas o arquivo não fará nada a menos que eu esteja lá para executá-lo.

O Compilador
- Não aprecio esse tom.

A Máquina Vitual Java

- E esse é outro problema, o compilador não tem senso de humor. Lógico, se você tivesse que passar o dia inteiro verificando pequenas violações na sintaxe munuciosamente...

O Compilador
- Desculpe, mas sem a minha presença, o que exatamente você executaria? Há uma razão para o Java ter sido projetado para usar um compilador de bytecode, se você não sabe. Se ele fosse uma linguagem de puramente interpretada, onde - no tempo de execução – a máquina virtual tivesse que converter código-fonte diretamente de um editor de texto, o programa Java seria executado a uma velocidade comicamente lenta. O Java já demorou tempo suficiente para convencer as pessoas de que é rápido e poderoso o bastante para a maioria dos trabalhos.

A Máquina Vitual Java
Não estou falando que você é, digamos, completamente inútil. Mas conversamos, o que você faz? Sério. Não faço idéias. Um programador poderia apenas escrever bytecode manualmente, e eu o usaria. Você pode ficar sem trabalho em breve, amigo.


O Compilador
Desculpe, mas esse é um ponto de vista bem displicente (para não dizer arrogante). Embora seja verdade que – teoricamente – você possa executar qualquer bytecode formatado aproximadamente mesmo se ele não vier de um compilador Java, na prática isso é absurdo. Um programador escrevendo bytecode manualmente é como se você executasse se processamento de palavras usando postScript pura. E eu apreciaria se não se dirigisse a mim como “amigo”.


A Máquina Vitual Java
(Vou continuar insistindo na veia irônica.) Mas você ainda não respondeu minha pergunta, o que faz realmente?

O Compilador
Lembre-se de que o Java é uma linguagem fortemente tipificada, o que significa que não posso permitir que as variáveis armazenadas dados com o tipo errado. Esse é um recurso de segurança crucial e posso bloquear a grande maioria das violações antes que elas cheguem até você. Além disso.

A Máquina Vitual Java
Mas algumas ainda passam! Possa lançar exceções ClassCastException e às vezes vejo pessoas tentando inserir o tipo errado de coisa em uma matriz que foi declarada como contendo algo e -

O Compilador
Desculpe, mas não terminei. E sim, há algumas exceções de tipo de dado que podem surgir no tempo de execuções, mas algumas delas têm que ser permitidas, para que outro recurso Java importante tenha suporte – a vinculação dinâmica. No tempo de execução, um programa Java pode incluir novos objetivos que não eram conhecidos nem mesmo pelo programador original, portanto, tenho que permitir um certo nível de flexibilidade. Mas meu trabalho é bloquear qualquer coisa mais séria – poderia ser – bem sucedida no tempo de execução. Geralmente consigo saber quando algo não vai funcionar, por exemplo, se um programador tentasse acidentalmente usar um objetivo Button como uma conexão de soquete, eu detectaria isso e evitaria que ele causasse danos no tempo de execução.

A Máquina Vitual Java
OK. Certo. Mas e quanto à segurança? Veja que eu faço com relação à segurança e você fica, digamos, procurando sinais de ponto-e-virgula? Ooooh, mas grande risco à segurança! Muito obrigado”


O Compilador
Desculpe, mas sou a primeira linha de defesa, como dizem. As violações de tipo de dado que descrevi anteriormente poderiam danificar um programa se fosse permitido que elas se manifestassem. Também sou eu que impeço as violações de acesso, como, por exemplo, um código que tentasse chamar um método privado, ou alterar um método que – por razões de segurança – não pudesse nunca ser alterado. Impeço as pessoas de mexer em códigos que tentem acessar dados críticos de outra classe. Demoraria horas, talvez dias, para eu conseguir descrever a importância de meu trabalho.

A Máquina Vitual Java
Não Importa. Acabo tendo que fazer a mesma coisa só para me certificar se alguém obteve acesso depois de você e alterou o bytecode antes de executá-los.

O Compilador
É claro, mas com descrevi anteriormente, se eu impedisse o que talvez chegue a 99% dos problemas potenciais, você acabaria travando. E parece que não temos mais tempo, portanto, teremos que voltar a isso um bate-papo em um bate-papo posterior.

A Máquina Vitual Java
Oh, pode contar com isso. Amigo.

Nenhum comentário:

Postar um comentário