Antes de o Java aparecerem linguagens de programação C #, os programas de computador eram apenas compilado ou interpretado. Idiomas como Assembly Assembly, C, C ++, Fortran, Pascal quase sempre foram compilados em código de máquina. Idiomas como Basic, VbScript e JavaScript eram geralmente interpretados.
Então, qual é a diferença entre um programa compilado e um interpretado?
Compilando
Para escrever um programa, siga estas etapas:
- Edite o programa
- Compile o programa em arquivos de código da máquina.
- Vincule os arquivos de código da máquina a um programa executável (também conhecido como exe).
- Depurar ou executar o programa
Em alguns idiomas, como Turbo Pascal e Delphi, as etapas 2 e 3 são combinadas.
Os arquivos de código de máquina são módulos independentes de código de máquina que requerem vinculação para criar o programa final. O motivo de ter arquivos de código de máquina separados é a eficiência; compiladores só precisam recompilar Código fonte que mudaram. Os arquivos de código da máquina dos módulos inalterados são reutilizados. Isso é conhecido como fazer o aplicativo. Se você deseja recompilar e reconstruir todo o código-fonte, isso é conhecido como Build.
O linking é um processo tecnicamente complicado, no qual todas as chamadas de função entre diferentes módulos são conectadas, os locais de memória são alocados para variáveis e todo o código é disposto na memória e, em seguida, gravado no disco como um programa completo. Geralmente, é uma etapa mais lenta do que a compilação, pois todos os arquivos de código da máquina devem ser lidos na memória e vinculados.
Interpretação
As etapas para executar um programa através de um intérprete são
- Edite o programa
- Depurar ou executar o programa
Este é um processo muito mais rápido e ajuda os programadores iniciantes a editar e testar seu código mais rapidamente do que usando um compilador. A desvantagem é que os programas interpretados são muito mais lentos que os programas compilados. 5 a 10 vezes mais devagar que todas as linhas de código precisam ser relidas e processadas novamente.
Digite Java e C #
Ambos os idiomas são semi-compilados. Eles geram um código intermediário que é otimizado para interpretação. Essa linguagem intermediária é independente do hardware subjacente e facilita a porta programas escritos para outros processadores, desde que um intérprete tenha sido escrito para esse hardware.
Java, quando compilado, produz bytecode que é interpretado em tempo de execução por uma Java Virtual Machine (JVM). Muitas JVMs usam um compilador Just-In-Time que converte bytecode em código de máquina nativo e, em seguida, executa esse código para aumentar a velocidade de interpretação. Com efeito, o código-fonte Java é compilado em um processo de dois estágios.
O C # é compilado no Common Intermediate Language (CIL), anteriormente conhecido como Microsoft Intermediate Language MSIL. Isso é executado pelo Common Language Runtime (CLR), parte da estrutura .NET, um ambiente que fornece serviços de suporte, como coleta de lixo e compilação Just-In-Time.
Java e C # empregam técnicas de aceleração, portanto a velocidade efetiva é quase tão rápida quanto uma linguagem compilada pura. Se o aplicativo gastar muito tempo fazendo entradas e saídas, como ler arquivos de disco ou executar base de dados consultas, então a diferença de velocidade é quase imperceptível.
O que isso significa para mim?
A menos que você tenha uma necessidade muito específica de velocidade e precise aumentar a taxa de quadros em alguns quadros por segundo, pode esquecer a velocidade. Qualquer um dos C, C ++ ou C # fornecerá velocidade suficiente para jogos, compiladores e sistemas operacionais.