How about the JIT engine then. When does parrot use it? how well does it scale? ( has anyone done some benchmarking )
On Thu, 11 Apr 2002, [iso-8859-1] Jonathan E. Paton wrote: > > Where in the parrot code does the actual translation > > from byte code to binary code occur? > > Parrot eq. an interpreter, all the byte codes are like > commands to tell it what actions to take... it doesn't > directly take byte codes and turn them into binary code. > > Conversion would be compiling, but the benefit of using > bytecode is that if parrot compiles then the bytecode > can be executed. This is not like gcc's internal > bytecode, which is just an intermediate step. > > Parrot works rather like this simple RPN evaluator: > > #!/usr/bin/perl -w > > use strict; > > my @stack; > > # Setup function table and pattern > my %ops = ( '+' => sub { $stack[-2] += pop @stack }, > '-' => sub { $stack[-2] -= pop @stack }, > '*' => sub { $stack[-2] *= pop @stack }, > '/' => sub { $stack[-2] /= pop @stack }, > '^' => sub { $stack[-2] ^= pop @stack }, > '!' => sub { $stack[-1] = fact($stack[-1]) }, > 'd' => sub { pop @stack }, > 'p' => sub { print $stack[-1] }, > 'P' => sub { print pop @stack }, > 'r' => sub { return $stack[-1] }, > 's' => sub { @stack[-2,-1] = @stack[-1,-2] }, > 'c' => sub { @stack = () } > ); > > # Create re patterns > my $ops = join("|", map { quotemeta } keys %ops); > my $num = qr/\d+(?:\.\d+)?/; > > # RPN Expression Evaluator > sub eval_RPN { > local $_ = shift; > > while (/($ops|$num|\s+|.+)/go) { > my $token = $1; > > if (exists $ops{$token}) { > $ops{$token}(); > } > > elsif ($token =~ /\s+/) { > # Do nothing > } > > elsif ($token =~ /^$num$/) { > push @stack, $token; > } > > else { > die "Don't know what to do with: $_"; > } > } > return pop @stack; > } > > sub fact { > my ($x, $e) = (abs int shift, 1); > while ($x>1) { $e*=$x-- } > return $e; > } > > ### TEST ### > print eval_RPN(join " ", @ARGV); > > __END__ > > I wrote that one a while back... every programmer > has written one. Try: > > ../rpn 1 2 '+' 4 '*' p > > to get a feel of what it does. It mimicks the dc > command. > > Now, back to the topic: > > > where does it get executed? > > In C. > > > Im having a hard time finding things in the code... > > I haven't looked at the code, so don't feel bad :P > > Jonathan Paton > > __________________________________________________ > Do You Yahoo!? > Everything you'll ever need on one web page > from News and Sport to Email and Music Charts > http://uk.my.yahoo.com >