Another reason is that it's a good way to get the metaprogramming APIs.
Metaprogramming is writing programs that act on programs, say a program that implements a "synchronized" modifier with the necessary mutex handling and so on: It would get called during compilation at specific points, typically when "synchronized" is encountered in the program being compiled, and it would add necessary extra variables in classes and functions and the code to use them.
For that to work there must be a lot deeper interface with the compiler. Right now it's basically a black box where you put in a string that contains source code and get a program back. Metaprograms need to add new modifiers, inspect the symbols in a context, add symbols in programs and functions, manipulate types etc. That's a lot of API. Writing the compiler in the language is a good way to get them since the compiler itself needs those APIs. Parts of the compiler would probably need to be migrated to C again before it's used in production, say the low level type handling and the conversion to bytecode (if they're written in Pike to begin with).
Being able to write metaprograms in a high level language is very important to make it feasible to extend the language with high level features like persistence, transactions and aspects. The current compiler is too heavily hacked up to allow that. Even implementing a comparatively simple thing like the implicit create functions caused many tricky bugs that took too long to solve.
/ Martin Stjernholm, Roxen IS
Previous text:
2003-02-27 03:20: Subject: Re: 64 bit ints
The Pike compiler is streching its limits in terms of complexity and maintainability. In order to reduce code size and increase feature set it makes sense to rewrite it in a higher level language than C. Grubba can hopefully provide some more specific reasons.
/ Martin Nilsson (har bott i google)