Of Noomian Translations and Computer Compilers

Since it may not be clear how this problem relates to computers I have included a detailed explanation. Although the explanation is a little lengthy, it should not be hard to follow.

Compilers

The central processing unit (CPU) of a computer comes with its own built-in computer language. Different CPU chips have different languages. The Intel CPU chip in a PC speaks a different language from the CPU chip in an Apple computer.

A typical CPU instruction would translate to something like:
"Add the contents of location 2017 to the contents of location 1346."

It would be a very tedious and error-prone task to have to write a program containing thousands of such instructions. To manage the task of writing programs, high level computer languages have been developed that are easier to work with. Even if you have not done any programming you may at least be familiar with some of the names of these languages: Basic, COBOL, FORTRAN, C, Ada, Java. A typical statement in such a language may be something like:
"Average_Value = Total_Value / Number_Of_Entries".

Since computers don't understand high level languages, it is necessary to have a program called a compiler that is written in the computer's language which can translate from a high level language into the computer's language.

A Compiler for a New Computer

Suppose that we have developed a brand new type of computer with its own CPU. We would like to write programs for it in a high level language. We choose the language C. We now must write a C compiler for our computer. Instead of writing the compiler in the computer's language we write the compiler in C.

Obviously, the computer will not understand this program. The problem is analogous to the one of an English speaker trying to use the Noomian to English translation written in Noomian. Here the computer's language serves the role of English and C stands for Noomian. What we need is the equivalent of a speaker of Nablus and a book written in Nablus that translates from Noomian to Narus. In computer terms this means we need to find another computer and a C compiler for that computer - a progam that translates from C (Noomian) to the other computer's language (Nablus) written in the other computer's language.

IBM PC as Speaker of Narus

The C language is very popular and there are numerous C compilers for the IBM PC. We now take the C code for our new computer's compiler over to a PC and use one of the C compilers for the PC to compile our program. This is equivalent to having the speaker of Narus translate the Noomian-to-English book into Narus.

We now have our compiler running on the PC. This program can translate any program written in C into the language of our new computer. In particular, it can take the original C code of the compiler that we wrote and translate it into the language of our new computer. This is equivalent to having the speaker of Narus use his Narus translation of the Noomian-to-English book to translate the original into English.

We are now done. All we have to do is move the output file over to our new computer and we will have a C compiler for our new computer written in its own language.

Bootstrapping

Suppose that after developing our C compiler we discover that extensions have been added to the C language. At this point we can handle these extensions without relying on another compuer. We simply add the code for compiling the language extensions to the C code for our C compiler, taking care not to use the extensions in the code we write. When we compile the program we are now able to use the language extensions. We now have the option of simplifying the code for out C compiler by rewriting portions of it using the language extensions.