Sobre a construção de programas de computador, analise as afirmativas a seguir. I. Um compilador realiza a tradução de um código-fonte escrito em linguagem de alto nível para instruções em linguagem de máquina. II. A diferença entre um compilador e um interpretador é que o primeiro traduz apenas as instruções demandadas em tempo de execução, enquanto o segundo faz a tradução de todas as instruções, de uma só vez, em tempo de projeto. III. As linguagens de programação que possuem tipagem forte e estática; obrigatoriamente são traduzidas por compiladores, pois, neste caso, os tipos das variáveis são determinados em tempo de execução. Está correto o que se afirma apenas em
- A)I.
A alternativa apresenta apenas a afirmativa I, que descreve o compilador como a ferramenta que traduz o código-fonte de alto nível para código de máquina. Em termos conceituais, essa é a ideia clássica cobrada em Programação: o compilador processa o programa antes da execução e produz um código executável ou objeto. Por isso, essa é a única proposição compatível com a questão.
- B)I e II.
Essa alternativa combina a afirmativa I com a II. A I traz a noção correta de compilador, mas a II inverte os conceitos: quem traduz e executa sob demanda, em tempo de execução, é o interpretador; já o compilador faz a tradução prévia do programa como um todo. Como a segunda proposição descreve o papel das ferramentas ao contrário do que ocorre na prática, a combinação não se sustenta.
- C)I e III.
Aqui aparecem a afirmativa I e a III. A primeira está adequada, mas a III erra ao dizer que linguagens fortemente e estaticamente tipadas precisam ser compiladas e que, nesse caso, os tipos seriam definidos em tempo de execução. Tipagem estática significa justamente o contrário, isto é, a verificação e a determinação dos tipos ocorrem em tempo de compilação, e a forma de tradução não depende, por si só, do tipo de tipagem.
- D)II e III.
Esta opção reúne as afirmativas II e III, ambas problemáticas. A II troca os papéis de compilador e interpretador, atribuindo ao compilador a tradução sob demanda em execução e ao interpretador a tradução integral antecipada, o que está invertido. A III também erra ao vincular tipagem forte e estática à obrigatoriedade de compilação e ao afirmar que os tipos seriam determinados em tempo de execução, quando a tipagem estática, por definição, é verificada antes da execução.
Gabarito: A
Quando voce estuda construção de programas, a primeira dupla que precisa ficar clara é compilador e interpretador. O compilador pega o código-fonte em linguagem de alto nível e o traduz, em regra, para linguagem de máquina ou para um código intermediário, gerando um executável ou algo pronto para execução. Já o interpretador vai executando o programa aos poucos, traduzindo instrução por instrução, durante a execução. E aqui a questão gosta de inverter tudo para testar atenção de vestibular de concurso, um clássico da banca. A afirmativa I esta correta porque descreve justamente a função básica de um compilador: converter o código-fonte em uma forma compreensível pela máquina. Isso pode ocorrer de modo integral antes da execução, o que difere do interpretador. Em linhas gerais, essa é a definição doutrinária usual adotada em Introdução à Programação e Linguagens de Programação. A afirmativa II esta errada porque trocou as características. Quem traduz apenas o que é necessário em tempo de execução é o interpretador, e quem faz a tradução de uma vez só, em tempo de compilação/projeto, é o compilador. Ou seja, a banca virou o jogo exatamente no ponto que mais derruba candidato apressado. A afirmativa III também esta errada. Tipagem forte e estática não significa que os tipos são determinados em tempo de execução; ao contrário, tipagem estática indica verificação e definição dos tipos em tempo de compilação. Além disso, uma linguagem não precisa obrigatoriamente ser compilada só por ter esse tipo de tipagem, porque existem modelos híbridos e diferentes formas de implementação. Por isso, apenas a I esta correta, e o gabarito A faz todo sentido.