5.2.2 Choosing a Translation Method
Section 5.2.1 introduced the basic roles of assemblers, compilers and interpreters. This section focuses on the decision between compilation, interpretation and a mixed approach. The important skill is not simply listing features, but justifying which method best fits a development or distribution scenario.
By the end of this section, you should be able to:
- Compare the benefits and drawbacks of compiled and interpreted high-level programs.
- Explain when an interpreter is useful during development and debugging.
- Explain why a compiler is often preferred for a finished program distributed to users.
- Distinguish the programmer's view from the user's view when comparing translators.
- Justify a suitable translation method for a given scenario.
- Describe how Java can use both compilation and interpretation through bytecode and a virtual machine.
Why This Page Was Split from the Previous One
The previous section answered: What does each translator do? This section answers: Which translation approach should be chosen, and why? Keeping these as separate pages helps students first learn the mechanisms, then practise scenario-based justification.
| Page | Main focus | What is deliberately not repeated |
|---|---|---|
| 5.2.1 Assemblers, Compilers and Interpreters | Basic purpose and route of each translator. | Long comparisons of advantages and drawbacks. |
| 5.2.2 Choosing a Translation Method | Trade-offs, justified choices and Java's mixed route. | The detailed two-pass assembler process from Unit 4.2. |
Decision Factors
A translator choice depends on what matters most at that stage of the software's life: rapid debugging, speed, distribution, protection of source code, or portability.
| Factor | Why it matters | Method often favoured |
|---|---|---|
| Fast feedback while coding | The programmer wants to test a small change immediately. | Interpreter |
| Execution speed for finished software | The user expects the program to run efficiently. | Compiler |
| Distribution without source code | The developer does not want to send the original source program. | Compiler |
| Running on different systems | The same program should run where a suitable runtime environment exists. | Mixed approach such as Java |
| Error discovery during development | The programmer wants errors reported close to the point of execution. | Interpreter |
When an Interpreter Helps
An interpreter is especially useful while a program is being developed. The programmer can run the source program, observe behaviour, correct a problem, then run it again without waiting for a complete compilation process.
| Interpreter benefit | Explanation | Example scenario |
|---|---|---|
| Immediate feedback | Errors can be reported when the affected statement is reached. | A student tests one branch of a menu-driven quiz program. |
| Useful for debugging | The programmer can test and correct small changes repeatedly. | A prototype timetable script is adjusted after each test run. |
| Flexible during experimentation | The source program can be changed and tried quickly. | A data-analysis routine is tested with several sample files. |
The same behaviour can also be a drawback. If a part of the program is never reached during testing, an error in that part may remain hidden until later. Running the program also normally requires the interpreter and source code to be available.
When a Compiler Helps
A compiler is often preferred when a program is ready to be released. The whole source program is analysed before execution, and successful compilation produces translated code that can be stored and distributed.
| Compiler benefit | Explanation | Example scenario |
|---|---|---|
| Faster execution | The program does not need to be translated statement by statement during every run. | A school event-check-in application must process many students quickly. |
| Distribution without original source | Users can receive executable/object code rather than the developer's source program. | A finished revision app is sent to students as an installable program. |
| Whole-program translation checks | Compilation can report translation errors before the program is run. | A release build fails until all syntax errors are fixed. |
A compiler is not perfect. Compilation takes time, a new compilation is needed after source-code changes, and successful compilation does not prove that the program's logic is correct.
Programmer View and User View
Translator comparisons are stronger when they make clear whose perspective is being considered. A feature that helps a programmer during development may be inconvenient for a user running the final program.
| Perspective | Interpreter | Compiler |
|---|---|---|
| Programmer during development | Quick cycle of edit, run, diagnose and correct. | Useful for checking the whole source program, but repeated builds take time. |
| Programmer preparing release | Source code may need to be supplied with the interpreter. | Can prepare translated code for distribution. |
| User running the program | Needs a compatible interpreter and usually the source program. | Usually runs translated code without needing the compiler. |
| User experience | May be slower because translation is part of each run. | Usually faster because translation has already been done. |
Distribution, Source Code and Trust
Translation choice affects what is given to the user. With many compiled programs, the user receives translated code rather than the original source. This can help protect the developer's source code and make installation simpler.
However, source code being hidden is not the same as the program being safe. An executable can still contain malicious or faulty behaviour, and a user cannot easily inspect the original logic. Security depends on trust, testing, distribution channels and protective measures, not simply on whether the program was compiled.
Mixed Translation: Java Bytecode and a Virtual Machine
Some high-level languages use more than one translation stage. Java is the required example for this unit. A Java console program is first compiled into bytecode. The bytecode is then executed by a suitable Java Virtual Machine for the target computer system.
| Stage | What happens | Why it matters |
|---|---|---|
| 1. Java source code | The programmer writes the program in Java. | This is readable source code, not directly executed by the processor. |
| 2. Java compiler | The source code is converted into bytecode. | The result is an intermediate form, not a native executable for one processor. |
| 3. Java Virtual Machine | The JVM for the target system runs the bytecode. | Each system needs a suitable JVM. |
| 4. Execution | The program's instructions are carried out through the runtime environment. | The same bytecode can be used on different systems that have compatible JVMs. |
Choosing for a Scenario
The best method depends on the evidence in the question. Look for clues about stage of development, speed, distribution, source-code availability and system independence.
| Scenario clue | Recommended method | Justification |
|---|---|---|
| A prototype is being changed after each test. | Interpreter | It supports quick edit-run-debug cycles. |
| A finished program must run quickly for many users. | Compiler | Translation is completed before use, so repeated execution is usually faster. |
| The developer does not want to distribute the source program. | Compiler | Users can receive translated executable/object code. |
| The same Java console program should run where a suitable runtime exists. | Mixed translation | Java bytecode can be executed by an appropriate JVM on each system. |
| An error should be reported when a rarely used branch is reached. | Interpreter | Translation and execution occur as the program follows its control flow. |
Interactive: Translation Method Decision Tool
This new widget was created for this page. Choose a development scenario or select priorities manually. The widget recommends a translation method and shows the pathway that matches the decision.
Common Mistakes and Misconceptions
- Only listing features: "compiler is faster" is not enough if you do not connect it to the program being finished and run repeatedly.
- Wrong perspective: development benefits are about the programmer; distribution and running are usually about the user.
- Overclaiming compilation: successful compilation does not prove that the program gives correct results.
- Overclaiming interpretation: an interpreter may not find an error in a branch that is not executed.
- Java confusion: Java bytecode is an intermediate form executed by a virtual machine, not the same as ordinary native object code.
- Security confusion: hiding source code is not the same as making a program safe or trustworthy.
Practice
Try these original questions
- Give two reasons why an interpreter may be useful while developing a program.
- Give two reasons why a compiler may be preferred for finished software.
- Explain one drawback of using an interpreter for a finished program distributed to users.
- Explain one drawback of relying only on a compiler while repeatedly testing small changes.
- Compare interpreted and compiled programs from the user's point of view.
- Compare interpreted and compiled programs from the programmer's point of view.
- A company is releasing a payroll program to hundreds of offices. The source code should not be sent to users, and the program will run many times each week. Recommend a translation method and justify your answer.
- A student is experimenting with a short simulation and wants to test one change after another. Recommend a translation method and justify your answer.
- Describe the route from Java source code to execution by a Java Virtual Machine.
- Correct this statement: "Java bytecode is native machine code that every processor can execute directly."
Review
| Choice | Strong reason to choose it | Possible drawback |
|---|---|---|
| Interpreter | Supports rapid testing and error reporting as statements are reached. | Usually slower and normally requires the source program and interpreter. |
| Compiler | Produces translated code for distribution and usually faster repeated execution. | Requires recompilation after changes and does not guarantee logical correctness. |
| Mixed Java approach | Compiles to bytecode that can run using a suitable JVM on different systems. | Requires a compatible virtual machine and uses an extra runtime layer. |