On Thu, 14 Feb 2002, Dave Mitchell wrote:

> > $foo would first be a Dog, then a FireHydrant. When it changed to a
> > FireHydrant the previous contents would get blown away.
>
> Hmmm - how do we distinguish between a plain scalar that is temporarily
> typed, and a 'proper' permanently-typed scalar?
>
> eg in the following
>
> my Dog $spot = Dog.new("waggly tail");
> $spot = Cat.new();
>
> you would expect $spot to always remain a dog no matter what, and will
> throw a run-time (or compile time) error if it can't think of a way of
> making itself into a "doggish" cat.

I think you're thinking at too high a level to make much sense of what
the vtables should be doing.  A better example to drive your mind would
be:

 tie $foo, 'Baa';
 $foo = 12;

In which case the $foo PMC will know that it is somehow tied, and dispatch
control to an appropriate bit of perl code.

> it's current vtable pointer, and if so, under what circumstances
> are we allowed to change the pointer? Do we need a PMC flag saying
> that our type is fixed? And if so, how do we handle

PMCs define how a variable behaves in different circumstances.  We can
change the pointer in every instance except those where the receiving
PMC does not let us, in general a PMC will be happy to lose its
identity.

Alex Gough
-- 
#!/usr/bin/perl
use Quantum::Entanglement qw(:DEFAULT :complex);
$language = entangle(1,'python',1/i,'C',i*i,'Perl',1/i**2,'Java',i**5,'C#');
print "Just another $language hacker,\n" if $language eq 'Perl';


Reply via email to