In perl5, the compiler and interpreter are both inside one program, so programmers can just type perl foo.pl
and not have to worry about extra files. This is in contrast with Java, where the compiler (javac) reads a .java source code file and creates a .class bytecode file, to be used with the interpreter (java).
I have read that perl6 will instead take the Java approach to this and keep the interpreter, currently dubbed "Parrot", seperated from the compiler.
I can see two possible problems with this, however:
- It would be annoying to have to type type perl6 foo.pl > foo.pbc; parrot foo.pbc every time your program changes.
- The eval "string" function. Since the string might have variable interpolations, it cannot be compiled until runtime. In perl5 this is not an issue, since the interpreter can just call the compiler again when it encounters eval "string".
The first problem could be solved by automatically execing parrot after compilation, but I have no idea about the second. It could exec the compiler again, but the overhead of starting a process would make it far slower than in perl5. Anyone care to enlighten me on this?