Language translators and IDEs · Tradutores de linguagem e IDEs
| English | Português |
|---|---|
| compiler/kəmˈpaɪlə/ | compilador |
| source code/sɔːs kəʊd/ | código-fonte |
| translator/trænˈsleɪtə/ | tradutor |
| machine code/məˈʃiːn kəʊd/ | código de máquina |
| assembler/əˈsemblə/ | montador |
| assembly language/əˈsemblɪ ˈlæŋɡwɪdʒ/ | linguagem assembleira |
| object code/ˈɒbdʒekt kəʊd/ | código objeto |
| executable/ɪɡˈzekjʊtəbl/ | executável |
| interpreter/ɪnˈtɜːprɪtə/ | intérprete |
| bytecode/ˈbaɪtkəʊd/ | bytecode |
| portable/ˈpɔːtəbl/ | portátil |
| virtual machine/ˈvɜːtʃuːəl məˈʃiːn/ | máquina virtual |
| just-in-time compilation/dʒʌst ɪn taɪm ˌkɒmpɪˈleɪʃn/ | compilação just-in-time |
| integrated development environment/ˈɪntɪɡreɪtɪd dɪˈveləpmənt enˈvaɪrənmənt/ | ambiente integrado de desenvolvimento |
| context-sensitive prompts/ˈkɒntekst ˈsensɪtɪv prɒmpts/ | prompts sensíveis ao contexto |
| auto-complete/ˈɔːtəʊ kəmˈpliːt/ | auto-completar |
| dynamic syntax checks/daɪˈnæmɪk ˈsɪntæks tʃeks/ | verificações de sintaxe dinâmicas |
| prettyprint/ˈpretɪprɪnt/ | formatação estética (prettyprint) |
| breakpoints/ˈbreɪkpɔɪnts/ | pontos de interrupção |
| single stepping/ˈsɪŋɡl ˈstepɪŋ/ | passo único |
| report window/rɪˈpɔːt ˈwɪndəʊ/ | janela de relatório |
Nobody believed the computer could write its own program
- In 1952 Grace Hopper built the first compiler 编译器, a program that turned a programmer's notation into machine instructions. "Nobody believed that," she said later. "I had a running compiler and nobody would touch it. They told me computers could only do arithmetic."
- Every language you have used since rests on that idea: you write source code 源代码 for people, and a translator produces the machine code 机器码 the processor runs.
- There are three kinds of translator and one famous hybrid, and the exam wants you to say which to use when, and why.
- This lesson is the translators, the trade-offs between compiling and interpreting, Java's mixture of both, and the tools an IDE puts around them.
Ninguém acreditava que um computador pudesse escrever seu próprio programa
- Em 1952, Grace Hopper construiu o primeiro compilador 编译器, um programa que convertia a notação do programador em instruções de máquina. "Ninguém acreditou nisso", ela disse depois. "Eu tinha um compilador funcionando e ninguém queria tocá-lo. Disseram-me que computadores só podiam fazer aritmética."
- Toda linguagem que você usou desde então baseia-se nessa ideia: você escreve código-fonte 源代码 para pessoas, e um tradutor produz o código de máquina 机器码 que o processador executa.
- Existem três tipos de tradutor e um híbrico famoso, e o exame quer que você diga qual usar quando e por quê.
- Esta aula trata dos tradutores, dos trade-offs entre compilar e interpretar, da mistura do Java entre ambos, e das ferramentas que uma IDE oferece ao redor deles.
Source code, machine code and the assembler
- The processor executes only machine code. A translator 翻译器 converts a program written for people into it.
- An assembler 汇编器 translates assembly language 汇编语言 into machine code: each mnemonic instruction,
LDD,ADD,JMP, becomes exactly one machine-code instruction, and labels and symbolic addresses are replaced by real addresses. - Assembly is used where the programmer needs direct control of the hardware: device drivers, embedded systems, the innermost loops of a game.
Código-fonte, código de máquina e o ensamblador
- O processador executa apenas código de máquina. Um tradutor 翻译器 converte um programa escrito para pessoas nesse formato.
- Um ensamblador 汇编器 traduz linguagem assembly 汇编语言 em código de máquina: cada instrução mnemônica,
LDD,ADD,JMP, torna-se exatamente uma instrução de código de máquina, e rótulos e endereços simbólicos são substituídos por endereços reais. - Assembly é usado onde o programador precisa de controle direto do hardware: drivers de dispositivo, sistemas embarcados, os loops mais internos de um jogo.
Match each translator to what it does. · Combine cada tradutor com o que ele faz.
Assembler: assembly→machine code; compiler: all-at-once to an executable; interpreter: line by line at run time. · Montador: assembly→código de máquina; compilador: tudo de uma vez para um executável; interpretador: linha por linha no tempo de execução.
The compiler
- A compiler translates the whole high-level program into machine code, object code 目标代码, before it is run. It produces an executable 可执行文件 file and reports all the syntax errors together, as a list, at the end of translation.
- It does not run the program. Once the code is clean, the executable runs without the compiler installed, as many times as you like.
- Fast at run time, since nothing is translated while running; but the machine code is tied to one processor and operating system.
O compilador
- Um compilador traduz o todo o programa de alto nível em código de máquina, código objeto 目标代码, antes de ser executado. Ele produz um arquivo executável 可执行文件 e relata todos os erros de sintaxe juntos, como uma lista, no final da tradução.
- Ele não executa o programa. Uma vez que o código está limpo, o executável roda sem o compilador instalado, quantas vezes você quiser.
- Rápido em tempo de execução, pois nada é traduzido enquanto roda; mas o código de máquina está vinculado a um único processador e sistema operacional.
The compiler route: source to running program · O caminho do compilador: código-fonte para programa em execução
Step through how a compiler works — translating the whole program once, before it runs. Contrast it with an interpreter, which translates and runs one line at a time. · Passe por como um compilador funciona — traduzindo todo o programa uma vez, antes de executar. Contraste com um interpretador, que traduz e executa uma linha de cada vez.
A compiler differs from an interpreter because it: · Um compilador difere de um interpretador porque ele:
A compiler translates all at once into an executable that runs without the compiler. An interpreter runs line by line. · Um compilador traduz tudo de uma vez em um executável que roda sem o compilador. Um interpretador roda linha por linha.
Put the compiler route in order, from writing code to running it. · Coloque as etapas do compilador em ordem, da escrita do código até a execução.
A compiler translates the whole program once into an executable; that file then runs without the compiler. · Um compilador traduz todo o programa uma vez em um executável; esse arquivo então roda sem o compilador.
The interpreter
- An interpreter 解释器 translates one statement of the high-level program at a time and executes it immediately before moving to the next.
- No executable is produced. It stops at the first error it meets and reports it, with the line, so you fix it and run again.
- Both the source code and the interpreter must be present every time the program runs, and each run re-translates, so execution is slower; but the same source runs wherever an interpreter exists.
Translate once and ship, or translate as you go
O interpretador
- Um interpretador 解释器 traduz uma instrução do programa de alto nível por vez e a executa imediatamente antes de passar para a próxima.
- Nenhum executável é produzido. Ele para no primeiro erro encontrado e o relata, com a linha, para que você o corrija e rode novamente.
- Tanto o código-fonte quanto o interpretador devem estar presentes toda vez que o programa roda, e cada execução re-traduz, então a execução é mais lenta; mas o mesmo código-fonte roda em qualquer lugar onde exista um interpretador.

Traduza uma vez e distribua, ou traduza conforme avança
When does an interpreter report an error? · Quando um interpretador relata um erro?
An interpreter runs line by line, so it reports an error at the moment it reaches that line — handy during development. · Como um interpretador roda linha por linha, ele relata o erro no momento em que atinge essa linha — útil durante o desenvolvimento.
An interpreter produces no stand-alone executable, so the interpreter itself must be installed to run the program. · Um interpretador não produz um executável independente, portanto o próprio interpretador deve ser instalado para rodar o programa.
An interpreter translates and runs line by line each time — there is no separate executable to ship, unlike a compiler. · Um interpretador traduz e executa linha por linha cada vez — não há executável separado para distribuir, diferentemente de um compilador.
Benefits and drawbacks, as the mark scheme lists them
| compiler | interpreter | |
|---|---|---|
| execution speed | fast, already machine code | slower, translated on every run |
| what the user needs | only the executable; the source stays private | the source code and the interpreter |
| finding errors | all listed at once after translation | each reported at its line, as you develop |
| changing the code | recompile the whole program | edit and run again immediately |
| portability | one platform; recompile for each | runs wherever an interpreter exists |
Benefícios e desvantagens, conforme o gabarito lista
| compilador | interpretador | |
|---|---|---|
| velocidade de execução | rápida, já é código de máquina | mais lenta, traduzida em cada execução |
| o que o usuário precisa | apenas o executável; o código-fonte permanece privado | o código-fonte e o interpretador |
| encontrar erros | todos listados de uma vez após a tradução | cada um reportado em sua linha, durante o desenvolvimento |
| alterar o código | recompilar todo o programa | editar e rodar novamente imediatamente |
| portabilidade | uma plataforma; recompilar para cada | roda em qualquer lugar onde exista um interpretador |
You should choose a compiler when: · Você deve escolher um compilador quando:
Compiled executables are fast and stand-alone. Interpreters suit quick development and portable scripts. · Executáveis compilados são rápidos e independentes. Interpretadores adequam-se ao desenvolvimento rápido e scripts portáteis.
Which points favour using an interpreter while developing a program? Select all · todos that apply. · Quais pontos favorecem o uso de um interpretador durante o desenvolvimento de um programa? Selecione todos os aplicáveis.
Fast edit-run cycles and errors at their line are the interpreter's strengths. Run-time speed is the compiler's. · Ciclos rápidos de edição-execução e erros na linha correspondente são forças do interpretador. Velocidade de execução é força do compilador.
Worked example: an interpreter while writing, a compiler when finished
- A developer uses an interpreter while writing a program and a compiler when it is finished. Explain how each is used. [4]
- During development the interpreter runs the partly written program at once, without waiting for a complete translation. When it meets an error it reports the line, so the developer fixes it and runs again immediately: a fast edit-run cycle that makes debugging easier.
- When the program is finished, the compiler translates the whole program into an executable that runs faster, needs no translator on the user's computer, and keeps the source code private.
- Two marks for each tool: what it does, and why that suits that stage.
Exemplo resolvido: um interpretador enquanto escreve, um compilador quando termina
- Um desenvolvedor usa um interpretador enquanto escreve um programa e um compilador quando ele está terminado. Explique como cada um é usado. [4]
- Durante o desenvolvimento, o interpretador executa o programa parcialmente escrito imediatamente, sem esperar por uma tradução completa. Ao encontrar um erro, ele relata a linha, então o desenvolvedor o corrige e roda novamente imediatamente: um ciclo rápido de edição-execução que facilita a depuração.
- Quando o programa está terminado, o compilador traduz todo o programa em um executável que roda mais rápido, não precisa de tradutor no computador do usuário e mantém o código-fonte privado.
- Dois pontos para cada ferramenta: o que ela faz e por que isso se adequa àquela fase.
Java: partially compiled, partially interpreted
- Java source is compiled into bytecode 字节码, a compact, portable 可移植的 intermediate form that is not machine code for any real processor.
- A virtual machine 虚拟机, the JVM, then interprets the bytecode on whatever machine it runs on, or uses just-in-time compilation 即时编译 to turn the busiest parts into native code while the program runs.
- The compile stage catches syntax errors early; the interpret stage lets one bytecode file run anywhere a JVM exists. Java in console mode, a text program run from the command line, is the syllabus's example.
Write once, run anywhere: one bytecode file, one JVM per platform
Java: parcialmente compilado, parcialmente interpretado
- O código-fonte do Java é compilado em bytecode 字节码, uma forma intermediária compacta e portátil 可移植 que não é código de máquina para nenhum processador real.
- Uma máquina virtual 虚拟机, a JVM, então interpreta o bytecode na máquina onde roda, ou usa compilação just-in-time 即时编译 para converter as partes mais exigentes em código nativo enquanto o programa roda.
- A etapa de compilação captura erros de sintaxe cedo; a etapa de interpretação permite que um único arquivo de bytecode rode em qualquer lugar onde haja uma JVM. Java em modo console, um programa de texto executado pelo prompt de comando, é o exemplo do currículo.

Escreva uma vez, execute em qualquer lugar: um único arquivo de bytecode, uma JVM por plataforma
Java compiles to bytecode that runs on a JVM. The main benefit is: · Java compila para bytecode que roda em uma JVM. O principal benefício é:
Bytecode is platform-independent; any JVM can run it (with JIT giving near-native speed for hot code). · Bytecode é independente de plataforma; qualquer JVM pode executá-lo (com JIT oferecendo velocidade próxima à nativa para código quente).
Java's compiler produces platform-independent ____, which a virtual machine then interprets. · O compilador do Java produz ____ independente de plataforma, que uma máquina virtual então interpreta.
Bytecode is an intermediate form: compiled once, then run by the JVM on any platform. That is what makes Java partially compiled and partially interpreted. · Bytecode é uma forma intermediária: compilado uma vez, depois executado pela JVM em qualquer plataforma. Isso faz com que Java seja parcialmente compilado e parcialmente interpretado.
Worked example: why compile to bytecode and then interpret?
- Explain why Java is compiled to bytecode rather than straight to machine code.
- A compiler produces machine code for one processor and operating system, so a program compiled on one machine will not run on another.
- Java's compiler targets a virtual machine instead, so the bytecode is identical everywhere. Each platform supplies its own JVM to interpret it.
- The cost is speed: interpreting bytecode is slower than running native code, which is why the JVM adds just-in-time compilation for the hot parts.
Exemplo resolvido: por que compilar para bytecode e depois interpretar?
- Explique por que o Java é compilado para bytecode em vez de diretamente para código de máquina.
- Um compilador produz código de máquina para um processador e sistema operacional, então um programa compilado em uma máquina não rodará em outra.
- O compilador do Java mira uma máquina virtual, então o bytecode é idêntico em todos os lugares. Cada plataforma fornece sua própria JVM para interpretá-lo.
- O custo é a velocidade: interpretar bytecode é mais lento do que executar código nativo, por isso a JVM adiciona compilação just-in-time para as partes quentes.
The IDE and its four groups of features
- An integrated development environment 集成开发环境 (IDE) is one application for writing, translating, running and debugging a program. The syllabus groups its features in four.
- For coding: context-sensitive prompts 上下文相关提示 pop up the identifiers, keywords or parameters that fit at that point; auto-complete 自动补全 finishes the name.
- For initial error detection: dynamic syntax checks 动态语法检查 underline a mistake as you type, before translation. For presentation: prettyprint 代码美化 shows keywords, identifiers, strings and comments in different colours with consistent indentation; expand and collapse hides the body of a block so you see the outline.
- For debugging: breakpoints 断点 pause the program at a marked line; single stepping 单步执行 runs one line at a time; a window shows the values of variables and expressions; the report window 报告窗口 lists errors, warnings and output.
Coding, error detection, presentation, debugging
A IDE e seus quatro grupos de recursos
- Um ambiente integrado de desenvolvimento 集成开发环境 (IDE) é um único aplicativo para escrever, traduzir, executar e depurar um programa. O currículo agrupa seus recursos em quatro categorias.
- Para codificação: sugestões contextuais 上下文相关提示 aparecem com identificadores, palavras-chave ou parâmetros adequados naquele ponto; autocompletar 自动补 completar o nome.
- Para detecção inicial de erros: verificações dinâmicas de sintaxe 动态语法检查 sublinham um erro enquanto você digita, antes da tradução. Para apresentação: prettyprint 代码美化 mostra palavras-chave, identificadores, strings e comentários em cores diferentes com indentação consistente; expandir e recolher oculta o corpo de um bloco para mostrar o esqueleto.
- Para depuração: pontos de interrupção 断点 pausam o programa em uma linha marcada; execução passo a passo 单步执行 executa uma linha de cada vez; uma janela mostra os valores de variáveis e expressões; a janela de relatório 报告窗口 lista erros, avisos e saída.

Codificação, detecção de erros, apresentação, depuração
Which feature is part of an IDE's debugger? · Qual recurso faz parte do depurador de um IDE?
A debugger lets you set breakpoints, step through code line by line, and inspect variable values. · Um depurador permite definir pontos de interrupção, avançar pelo código linha por linha e inspecionar valores de variáveis.
Match each IDE feature to its syllabus group. · Combine cada recurso do IDE com seu grupo do currículo.
Coding, initial error detection, presentation, debugging: the four groups the syllabus names, one feature each here. · Programação, detecção inicial de erros, apresentação, depuração: os quatro grupos nomeados pelo currículo, um recurso cada aqui.
Worked example: finding the bug in Calculate()
- A function
Calculate()returns an unexpected value. Describe how the debugging features of an IDE help find the cause. [4] - Set a breakpoint on the first line of
Calculate(), so the program pauses there instead of running through. - Single-step through the function one line at a time. After each step, read the values of the variables and of any expression you have asked the IDE to watch, and compare them with what you expected.
- The first line after which a value is wrong is where the logic error is. The report window shows any run-time error messages and output along the way.
Pause, step, inspect
Exemplo resolvido: encontrando o bug em Calculate()
- Uma função
Calculate()retorna um valor inesperado. Descreva como os recursos de depuração de uma IDE ajudam a encontrar a causa. [4] - Defina um ponto de interrupção na primeira linha de
Calculate(), para que o programa pause lá em vez de passar por todas as linhas. - Execute passo a passo pela função uma linha de cada vez. Após cada passo, leia os valores das variáveis e de qualquer expressão que você tenha pedido à IDE para monitorar, e compare-os com o que você esperava.
- A primeira linha após a qual um valor está errado é onde está o erro lógico. A janela de relatório mostra quaisquer mensagens de erro de tempo de execução e saída ao longo do caminho.

Pausar, passo a passo, inspecionar
Put the steps of finding a logic error with a debugger in order. · Coloque as etapas de encontrar um erro lógico com um depurador em ordem.
Pause, step, inspect, compare, locate. Each is one of the debugging features the syllabus lists. · Pausa, passo, inspeção, comparação, localização. Cada um é um dos recursos de depuração listados no currículo.
Marks that slip away
- A compiler does not run the program. It translates the whole of it and produces an executable.
- An interpreter stops at the first error; a compiler lists them all. Do not swap these.
- "Faster" needs "at run time", and "portable" needs "the same source runs wherever an interpreter exists".
- Sort IDE features into the syllabus's four groups: a breakpoint is debugging, prettyprint is presentation, a context-sensitive prompt is coding. Bytecode is not machine code.
Marcas que escapam
- Um compilador não executa o programa. Ele traduz todo ele e produz um executável.
- Um interpretador para no primeiro erro; um compilador lista todos. Não troque esses conceitos.
- "Mais rápido" precisa de "em tempo de execução", e "portátil" precisa de "o mesmo código-fonte roda em qualquer lugar onde exista um interpretador".
- Classifique os recursos da IDE nos quatro grupos do currículo: um ponto de interrupção é depuração, prettyprint é apresentação, uma sugestão contextual é codificação. Bytecode não é código de máquina.
You've got it
- assembler: one assembly instruction to one machine-code instruction · compiler: the whole program, before it runs, an executable, all errors listed · interpreter: one statement at a time, executed at once, stops at the first error, no executable
- compiler for speed, distribution and privacy of the source; interpreter for a fast edit-run cycle, portability and beginners
- Java compiles to portable bytecode that a JVM interprets or JIT-compiles: partially compiled, partially interpreted
- IDE features in four groups: coding (context-sensitive prompts), initial error detection (dynamic syntax checks), presentation (prettyprint, expand and collapse), debugging (breakpoints, single stepping, variables, report window)
Entendeu?
- ensamblador: uma instrução assembly para uma instrução de código de máquina · compilador: o programa inteiro, antes de rodar, um executável, todos os erros listados · interpretador: uma instrução por vez, executada imediatamente, para no primeiro erro, sem executável
- compilador para velocidade, distribuição e privacidade do código-fonte; interpretador para ciclo rápido de edição-execução, portabilidade e iniciantes
- Java compila para bytecode portátil que uma JVM interpreta ou JIT-compila: parcialmente compilado, parcialmente interpretado
- Recursos da IDE em quatro grupos: codificação (sugestões contextuais), detecção inicial de erros (verificações dinâmicas de sintaxe), apresentação (prettyprint, expandir e recolher), depuração (pontos de interrupção, execução passo a passo, variáveis, janela de relatório)