Os computadores lêem comandos de uma linguagem de máquina escrita em binário, ou seja, longas cadeias de zeros e uns. Embora os computadores possam ler essa linguagem com eficiência, a maioria dos programadores humanos não consegue. É por isso que os programadores trabalham em uma linguagem de programação que eles podem entender, que eles traduzem para a linguagem de máquina que o computador pode entender. Enquanto muitas linguagens mais novas usam intérpretes que traduzem de um para outro enquanto o programa é executado, linguagens de programação mais antigas usavam compiladores que faziam essa tradução inteiramente antes que o computador executasse o programa.
Vantagem:Autocontido e Eficiente
Uma grande vantagem dos programas compilados é que eles são unidades autocontidas que estão prontas para serem executadas. Como eles já estão compilados em binários de linguagem de máquina, não há um segundo aplicativo ou pacote que o usuário precise manter atualizado. Se um programa for compilado para Windows em uma arquitetura x86, o usuário final precisará apenas de um sistema operacional Windows executado em uma arquitetura x86. Além disso, um pacote pré-compilado pode ser executado mais rapidamente do que um interpretador compilando o código-fonte em tempo real.
Desvantagem:específico do hardware
Como um compilador traduz o código-fonte em uma linguagem de máquina específica, os programas precisam ser compilados especificamente para OS X, Windows ou Linux, bem como especificamente para arquiteturas de 32 ou 64 bits. Para um programador ou empresa de software que tenta levar um produto ao público mais amplo possível, isso significa manter várias versões do código-fonte para o mesmo aplicativo. Isso resulta em mais tempo gasto na manutenção do código-fonte e problemas extras quando as atualizações são lançadas.
Vantagem:otimização de hardware
Embora estar preso a um pacote de hardware específico tenha suas desvantagens, compilar um programa também pode aumentar seu desempenho. Os usuários podem enviar opções específicas aos compiladores sobre os detalhes do hardware em que o programa será executado. Isso permite que o compilador crie código de linguagem de máquina que faça o uso mais eficiente do hardware especificado, em oposição ao código mais genérico. Isso também permite que usuários avançados otimizem o desempenho de um programa em seus computadores.
Desvantagem:Tempos de compilação
Uma das desvantagens de ter um compilador é que ele deve compilar o código-fonte. Enquanto os pequenos programas que muitos programadores iniciantes codificam levam um tempo trivial para compilar, os conjuntos de aplicativos maiores podem levar um tempo significativo para compilar. Quando os programadores não têm nada a fazer a não ser esperar que o compilador termine, esse tempo pode aumentar, especialmente durante o estágio de desenvolvimento, quando o código precisa ser compilado para testar a funcionalidade e solucionar falhas.