Os compiladores são usados fora do desenvolvimento?

14

No que diz respeito ao meu entendimento, os compiladores são destinados a desenvolvedores que compilam seu código em arquivos executáveis (código de máquina). 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 é então transportado para as outras máquinas para uso como aplicativos.

Os compiladores têm uma função fora desse processo? Se sim, quando são usados?

    
por Pankaj Upadhyay 30.08.2011 / 16:33
fonte

8 respostas

19

Sim e não. Sim, o cenário clássico é um desenvolvedor usando um compilador para gerar código de máquina a partir do código-fonte, e o código da máquina é então distribuído para os usuários.

Existem poucas exceções para isso. Primeiro, muitos projetos de software livre são distribuídos principalmente (ou até mesmo exclusivamente) na forma de código-fonte, e esperam que o usuário final os instale digitando alguns comandos como make e, em seguida, make intall . Isso invocará o compilador, o vinculador, etc., para gerar o código da máquina a partir do código-fonte para o computador desse usuário. Nesses casos, no entanto, o processo de criação e instalação é (pelo menos intencionalmente) automatizado ao ponto de o usuário raramente precisar de muito conhecimento dele, além do fato de nunca ter instalado um pacote somente de código fonte anteriormente. , seu gerenciador de pacotes normalmente listará alguns pacotes de "desenvolvimento" como um pré-requisito para instalar o aplicativo com o qual eles realmente se importam (embora alguns ainda vejam isso como hostil aos usuários finais).

Outra exceção (que foi aludida, mas não foi explicada muito bem nas outras respostas que vi) é de compiladores just-in-time (JIT). Alguns exemplos óbvios de compiladores JIT são o CLR (Common Language Runtime) da Microsoft e a JVM (Java Virtual Machine). Nestes casos, há normalmente dois compiladores inteiramente separados envolvidos na tradução do código-fonte para 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 byte independente da máquina. O CLR / JVM inclui então um compilador segundo , totalmente separado do primeiro, que converte os 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. Versões anteriores da JVM (por exemplo) apenas interpretavam os códigos de bytes em vez de compilá-los. Isso geralmente carrega uma penalidade de desempenho bastante séria, portanto, as JVMs razoavelmente recentes pretendidas para uso em produção incluem um compilador JIT.

    
por 30.08.2011 / 17:42
fonte
24

Sim, os compiladores são usados principalmente pelos desenvolvedores, com algumas exceções notáveis. Os usuários finais às vezes usam compiladores para compilar e instalar o software de código aberto mais recente, mesmo que não façam alterações no código. Além disso, algumas linguagens de programação não possuem compiladores. Eles usam intérpretes em vez disso "compilar" na hora. Nesse caso, os usuários finais precisam ter o intérprete instalado em suas máquinas.

    
por 30.08.2011 / 16:41
fonte
10

Sim

Um compilador é definido como um programa que traduz o código de um idioma para outro (consulte Wikipedia ). O uso mais comum de 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 um compilador (porque ele converte da linguagem de origem, Python, na linguagem de destino, código de bytes do Python).

Outro exemplo é o mecanismo JavaScript V8. O converte o JavaScript em código de máquina x86 e, assim, se encaixa na definição de um compilador também. O V8 não apenas se encaixa na definição de um compilador, mas também é incluído no Chrome e é amplamente usado em máquinas clientes.

    
por 30.08.2011 / 17:05
fonte
4

Um caso seria para um aplicativo que gerasse código dinamicamente em tempo de execução e, em seguida, 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.

    
por 30.08.2011 / 17:18
fonte
3

compilers are meant only for developers for compiling their programming-language code to executable(machin-code) files

Eu diria que "os compiladores são primários para desenvolvedores ...". Mas eu tenho visto exemplos onde os programas geram novos códigos de linguagem de programação on-the-fly e, portanto, precisam de um compilador para ser instalado na máquina de usuários finais. Isso não significa que o usuário final tenha que trabalhar com o compilador por si só.

Possíveis motivos para esse design de programa:

  • desempenho: pense em um aplicativo orientado por regras em que as regras são armazenadas em algum tipo de armazenamento de dados do usuário final e você tem alguns dados em massa a serem processados por essas regras. Em vez de interpretar as regras repetidas vezes, um programa gera o código de processamento primeiro, compila e executa os dados a serem processados

  • pense em um programa em que o usuário final pode adicionar algum tipo de fórmula matemática e o desenvolvedor do programa não deseja implementar seu próprio analisador / interpretador para isso. Em vez disso, o programa usa essa fórmula, faz algumas adições para transformá-la em uma parte válida do código do programa, permite que o compilador a compile e execute-a posteriormente.

por 30.08.2011 / 16:52
fonte
2

É 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 uma das muitas shells de linha de comando (C-shell, 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.

    
por 30.08.2011 / 16:41
fonte
1

Os administradores também podem precisar usar linguagens de programação ao 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 algum espaço em disco. A linguagem usada para escrever o script deve ser interpretada ou compilada para que possa ser executada no sistema.

    
por 30.08.2011 / 16:59
fonte
1

Alguns programas são metaprogramas : durante a execução, eles podem gerar algum outro programa (ou algum código-fonte) e compilá-lo, em seguida, executá-lo de alguma forma. Leia também sobre programação em vários estágios .

Então, para usar esses tipos de programas, um compilador seria necessário, mesmo se o usuário não soubesse como se programar (porque o computador geraria algum código que precisa ser compilado).

Por exemplo, veja MELT (que gera código C ++ para estender GCC ) ou o CAIA sistema de inteligência artificial da J.Pitrat ( que geram código C - notavelmente 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 contêm um mecanismo JIT em JavaScript (como V8 ). Além disso, a maioria das implementações do Common Lisp -e.g. SBCL - contém um compilador (útil para executar aplicativos, o que pode gerar e avaliar expressões). Leia também sobre idiomas homoicônicos e Programas Qine .

    
por 04.12.2014 / 19:13
fonte

Tags