Hi,
Am 23.06.2010 13:59, schrieb Hiroki Horiuchi:
I asked the same question to #perl6.
But now I think it was a wrong place.
no, you had the bad luck of asking at a time when nobody was around.
My question is:
In current Rakudo,
my Int $i = '123';
causes a runtime error, not a compile time error.
How about in future Perl 6?
In general this is a very hard problem. Let me explain why.
Perl 6 is a very extensible language; you can override built-in
functions, methods and operators, as well as add new multi variants.
So in a seemingly simple case as
my Str $x = 2 + 3
the compiler has to know
1) which infix:<=> and infix:<+> multis are available in the current
lexical scope
2) if those are pure functions that can be executed at compile time
without loss of semantics
3) about local grammar modifications that might change the meaning of
the number literals
4) if there is a local redefiniton of the Str type
Since the + is implemented as a multi sub, it can't just know the return
type, but it has to execute the 2 + 3 at compile time (constant folding)
to find the type of the return value.
That is why the specification doesn't mandate a minimum level of type
inference at compile time.
That said, the consensus seems to be that detecting failures early (ie
at compile time) is a good thing, as far as it's robust.
Back to the current situation, I don't think we will significant effort
on constant folding, type checking or other things at compile time prior
to the Rakudo Star release.
Tyler Curtis is currently working on an optimization framework
(sponsored by Google as part of the "Summer of Code" project), which I
plan to use to play around with compile-time transformations.
But I fear that optimizations are a risky business, considering our
rather low test coverage (and considering that we don't really know how
much of our code paths are actually covered by tests).
Cheers,
Moritz