No meu entender, os compiladores são destinados a desenvolvedores que compilam seu código em arquivos executáveis (código de máquina). Os compiladores não se estendem à máquina do cliente ou ao sistema do usuário final.
Em vez disso, os desenvolvedores apenas usam o compilador para converter seu código em código de máquina, que é transportado para outras máquinas para uso como aplicativos.
Os compiladores têm uma função fora desse processo? Se sim, quando eles são usados?
Respostas:
Sim e não. Sim, o cenário clássico é um desenvolvedor que usa um compilador para gerar código de máquina a partir do código-fonte, e o código da máquina é distribuído aos usuários.
Não são poucas excepções a esta embora. Primeiro, muitos projetos de código aberto são distribuídos principalmente (ou mesmo exclusivamente) no formato de código-fonte e esperam que o usuário final os instale digitando alguns comandos como
make
e depoismake intall
. Isso chamará o compilador, o vinculador etc. para gerar o código da máquina a partir do código-fonte do computador desse usuário. Nesses casos, no entanto, o processo de criação e instalação é (pelo menos pretendido) automatizado a ponto de o usuário raramente precisar de muito conhecimento além do fato de que, se nunca instalou um pacote somente de código-fonte anteriormente , o gerenciador de pacotes normalmente listará algum pacote de "desenvolvimento" como um pré-requisito para instalar o aplicativo de que realmente se preocupa (embora alguns ainda o considerem hostil para os usuários finais).Outra exceção (já mencionada, mas não explicada muito bem nas outras respostas que eu vi) são os compiladores just-in-time (JIT). Alguns exemplos óbvios de compiladores JIT são o Microsoft Common Language Runtime (CLR) e a Java Virtual Machine (JVM). Nesses casos, normalmente existem dois compiladores completamente separados envolvidos na conversão do código-fonte em código de máquina. Um é usado pelo desenvolvedor. No entanto, em vez de gerar código de máquina diretamente, ele gera um código de bytes independente de máquina. O CLR / JVM inclui um segundo compilador, totalmente separado do primeiro, que converte esses códigos de bytes em código de máquina para o computador de destino.
Devo acrescentar que o segundo compilador não é estritamente necessário. As versões anteriores da JVM (por exemplo) apenas interpretavam os códigos de bytes em vez de compilá-los. No entanto, isso geralmente gera uma penalidade de desempenho bastante séria, portanto, as JVMs razoavelmente recentes destinadas ao uso em produção incluem um compilador JIT.
fonte
Sim, os compiladores são usados principalmente pelos desenvolvedores, com algumas exceções notáveis. Às vezes, os usuários finais usam compiladores para compilar e instalar o software de código aberto mais recente, mesmo que eles não façam alterações no código. Além disso, algumas linguagens de programação não possuem compiladores. Em vez disso, eles usam intérpretes que "compilam" rapidamente. Nesse caso, os usuários finais precisam ter o intérprete instalado em suas máquinas.
fonte
sim
Um compilador é definido como um programa que traduz código de um idioma para outro (consulte a Wikipedia ). O uso mais comum dos compiladores é traduzir o idioma de origem em código de máquina, mas isso define a palavra "compilador".
Por exemplo, o Python gera código de bytes quando importa um módulo e, portanto, se encaixa na definição de compilador (porque converte da linguagem de origem, Python, para a linguagem de destino, código de bytes do Python).
Outro exemplo é o mecanismo JavaScript V8. Ele converte JavaScript em código de máquina x86 e, portanto, também se encaixa na definição de compilador. O V8 não apenas se encaixa na definição de compilador, mas também está incluído no Chrome e é amplamente utilizado nas máquinas clientes.
fonte
Um caso seria para um aplicativo que gerasse código dinamicamente no tempo de execução e depois executasse o código gerado. Esse código precisaria ser compilado em tempo de execução.
Edit: Existem outras exceções, mas elas já foram mencionadas em outras respostas.
fonte
Eu diria "compiladores são primários para desenvolvedores ...". Mas vi exemplos em que os programas geram um novo código da linguagem de programação on-the-fly e, portanto, precisam que um compilador seja instalado na máquina do usuário final. Isso não significa que o usuário final precise trabalhar com o compilador sozinho.
Possíveis razões para o design deste programa:
desempenho: pense em um aplicativo orientado a regras em que as regras sejam armazenadas em algum tipo de armazenamento de dados do usuário final e você tenha alguns dados em massa a serem processados por essas regras. Em vez de interpretar as regras repetidamente, um programa gera o código de processamento primeiro, o compila e executa nos dados a serem processados
pense em um programa em que o usuário final possa adicionar algum tipo de fórmula matemática e o desenvolvedor do programa não queira implementar seu próprio analisador / intérprete para isso. Em vez disso, o programa adota essa fórmula, faz algumas adições para transformá-lo em uma parte válida do código do programa, deixa o compilador compilá-lo e o executa posteriormente.
fonte
Isso mesmo - os compiladores compilam o código-fonte no formato executável, que é então vinculado a um arquivo binário executável por um vinculador. O código-fonte também pode ser executado diretamente por um intérprete, como um dos muitos shells da linha de comando (shell C, bash, zsh etc.), awk, sed e assim por diante.
Pode ser difícil traçar uma linha clara entre "desenvolvedor" e "usuário final", a menos que você limite sua discussão a um produto específico. Os desenvolvedores são todos "usuários finais" das ferramentas que usam, e "usuários finais" podem ter ferramentas de desenvolvimento, como compiladores e intérpretes instalados em suas máquinas.
fonte
Os administradores também podem precisar usar linguagens de programação para escrever scripts para executar várias tarefas automatizadas. Por exemplo, ter um script que exclua arquivos de log antigos de um servidor após 90 dias para liberar espaço em disco. O idioma usado para escrever o script deve ser interpretado ou compilado para que possa ser executado no sistema.
fonte
Alguns programas são metaprogramas : durante a execução, eles podem gerar outro programa (ou algum código-fonte) e compilá-lo e executá-lo de alguma forma. Leia também sobre programação em vários estágios .
Portanto, para usar esse tipo de programa, seria necessário um compilador, mesmo que o usuário não saiba programar (porque o computador geraria algum código que precisa ser compilado).
Por exemplo, consulte MELT (que gera código C ++ para estender o GCC ) ou o sistema de inteligência artificial CAIA da J.Pitrat (que gera código C - principalmente seu próprio código - para resolver problemas combinatórios).
Além disso, algumas linguagens e algumas implementações quase exigem que um compilador esteja presente em todos os lugares (em todos os programas codificados nessa linguagem e implementação). Primeiro, vários navegadores da Web contêm um mecanismo Javascript JIT (como V8 ). Além disso, a maioria das implementações do Common Lisp -eg SBCL - contém um compilador (até útil para a execução de aplicativos, que pode gerar e avaliar expressões). Leia também sobre idiomas homoicônicos e programas Qine .
fonte