O compilador, de forma sucinta, converte um código em linguagem textual (linguagem de alto nível, "legível" para nós) em linguagem de máquina (linguagem de baixo nível, específica para computadores/SO). Ao realizar essa tradução, ele transforma em um código assembly para então passar ao assembler para transformar em linguagem de máquina propriamente dita.
- Pode ser um pouco lento e ocupar maior quantidade de memória, pois ele traduz o código fonte inteiramente;
- O código compilado roda mais rápido que um código interpretado;
- Somente verifica erros de semântica e de sintaxe.
O interpretador realiza algo similar: ele realiza a mesma tradução de um código em linguagem de alto nível para um código de máquina (baixo nível) - no entanto, ele realiza isso em tempo de execução, ou seja, linha por linha ao executá-lo.
- Fácil depuração e gestão de memória automática;
- Mais flexível que uma linguagem compilada;
- Código interpretado roda mais lentamente que o código compilado.
Enquanto que um compilador salva o código compilado em um código objeto para direta execução e utilização futura, o interpretador não salva nenhum código de máquina - dessa forma, é necessário o código fonte para futura execução.
Linguagens Compiladas:
- C e C++ - os compiladores mais utilizados para essas linguagens são o GCC e Clang;
- COBOL - o GnuCOBOL é o mais utilizado e é open-source;
Linguagens Interpretadas:
- Python - PyPy é um interpretador famoso, enquanto CPython atua como interpretador e compilador (primeiro compila, depois interpreta);
- Ruby - CRuby/Ruby MRI é o mais utilizado, mas existem alternativas como JRuby, YARV e mRuby.
> Existem exceções como Java, por exemplo, que são tanto compiladas e interpretadas de acordo com seu jeito único de modelo de execução (máquina virtual ou VM).
Read-Eval-Print-Loop é tipo de ambiente que permite a entrada de expressões pelo usuário, que então são processadas e resultam em uma saída. Pode também ser conhecido por interpretador interativo. Dessa forma, permitem ambientes interativos para explorar ferramentas em alguns tipos específicos de linguagens de programação. Exemplos desse tipo de ambiente podem ser encontrados em:
- IPython
- Node.js console
- Bash shell no Linux
- Console do desenvolvedor em navegadores web
Por exemplo, pode-se colocar uma entrada num Bash como:
user@ubuntu:~$ expr 2 + 2
E obter como retorno o seguinte resultado:
4
Depende. Sendo majoritariamente compilado (GHC), ele também apresenta um modo interativo (GHCi) que possui comandos REPL. Ao utilizar o GHCi, podemos testar rapidamente trechos de código, enquanto o GHC compila o programa (com extensão .hs) em um executável do tipo .exe.
Neste exemplo, criamos uma função que retorna o valor de entrada somado a 4. Testamos primeiro com uma entrada e logo após com um array como entrada.
Com o programa pronto, podemos carregá-lo com o GHCi e realizar os testes nas funções presentes neles. Atente-se à precedência dos argumentos.
Difference Between Compiler and Interpreter - Geeks for Geeks