A translator or programming language processor is a computer program that converts the programming instructions written in human convenient form into machine language codes that the computers understand and process. It is a generic term that can refer to a compiler, assembler, or interpreter - anything that converts code from one computer language into another. These include translations between high-level and human-readable computer languages such as C++ and Java, intermediate-level languages such as Java bytecode, low-level languages such as the assembly language and machine code, and between similar levels of language on different computing platforms, as well as from any of these to any other of these. Software and hardware represent different levels of abstraction in computing. Software is typically written in high-level programming languages, which are easier for humans to understand and manipulate, while hardware implementations involve low-level descriptions of physical components and their interconnections. Translator computing facilitates the conversion between these abstraction levels.[1] Overall, translator computing plays a crucial role in bridging the gap between software and hardware implementations, enabling developers to leverage the strengths of each platform and optimize performance, power efficiency, and other metrics according to the specific requirements of the application.[2]
The software development process is noticeably different depending on the type of translator used by a developer, this of course differs from translator to translator. Stages of the development process that are influenced by a translator include the initial programming stage, the debugging stage, and most notably the execution process. Factors that are affected during these stages include code performance, feedback speed for the debugging process, language features, and platform independence. Some of the more notable programming language processors used to translate code are compilers, interpreters, and assemblers.[3]
Compiler software interacts with source code by converting it typically from a higher-level programming language into object code that can later be executed by the computer's Central Processing Unit (CPU).[4] The object code created by the compiler consists of machine-readable code that the computer can process. This stage of the computing process is known as compilation. Utilizing a compiler leads to separation in the translation and execution process. After compilation, the new object code is saved separately from the source code resulting in the source code no longer being required for the execution process. With compiler programs, the translation process occurs one-time which results in efficient code that can be executed quickly for any number of times.
There are clear benefits when translating high-level code with a compiler.[5]
There are clear disadvantages when translating high-level code with a compiler.
Some notable programming languages that utilize compilers include:[6]
Interpreter programs function by interpreting high-level code into machine useable code while simultaneously executing the instructions line by line. Unlike compilers, interpreters do not need to compile the code prior to executing the instructions. The translation and execution process are done simultaneously and is interrupted in the event of an error in the program. The use of an interpreter allows developers to test and modify code in real-time. It makes the debugging process easier as well as aids in making more efficient code. Since the translation and execution process is done simultaneously, the execution time for interpreter programs is substantial.
There are clear benefits when translating high-level code with an interpreter.
There are clear disadvantages when translating high-level code with an interpreter.
Some notable programming languages that utilize interpreters include:
An assembler program functions by converting low-level assembly code into a conventional machine code that is readable by the CPU. The purpose of assembly language, like other coding languages, is to make the programming process more user-friendly than programming in machine language. Assembler languages utilize mnemonic devices and symbolic addresses to differentiate between opcode, operands, and specific memory addresses. Many of these components are not easily readable by humans and therefore mnemonics, symbols, and labels make the code decipherable. The assembler works by processing code one line at a time and then moves on to the next instruction. To eliminate issues that occur due to addressing locations, the translation process known as assembly is typically done in a two-pass process. The first pass of assembly is done in order to identify binary addresses that correspond to the symbolic names. This is essential in order to guide pass two which is the line-by-line translation into machine language.[7]
Commonly used assemblers include: