[% setvar title Attributes for compiler hints %]

This file is part of the Perl 6 Archive

Note: these documents may be out of date. Do not use as reference!

To see what is currently happening visit http://www.perl6.org/


Attributes for compiler hints


  Maintainer: Simon Cozens <simon@brecon.co.uk>
  Date: 25 Sep 2000
  Mailing List: perl6-internals@perl.org
  Number: 297
  Version: 1
  Status: Developing


Allow the user to provide type hinting to the Perl translator using variable and subroutine attributes.



When people talk about a Perl compiler, what they actually want is a translator; they don't want the hassle of a Perl run time environment. A true Perl-to-C translator for Perl 5 may or may not be possible; for Perl 6, it should be possible. Even if it isn't totally possible, this RFC will still apply to whatever replaces B::C.

Even so, we'd need to lug around the new SVs for each Perl variable. This proposal allows the user to give hints to optimise the variables used by the translator, and narrow the gap between Perl and the target language.

Note that this is for the translator and for the translator only; it has no effect on what happens when the user's program is interpreted using the normal perl bytecode compiler and virtual machine. The hints are non-binding. You can quite easily say:

    my $x : integer;
    $x = 0.5;

The Perl interpreter will ignore the hint at run time; or, at least, it'll try using an int and find it needs to convert to a float at best and an SV at worst. The interpreter will Do The Right Thing, anyhow.

However, if you want to translate the thing to C or any other typed language, that's going to blow up. It might not compile, or it might compile and behave weirdly. Your fault. Lie to Perl, and it will get you.


Have the translator or compiler recognise sub and variable attributes such as int, string, ref, float and so on. Attempt to use the appropriate type when translating Perl to a typed language. No effect on the Perl interpreter; ignore the attributes.


RFC ??: "Kick out all ops - libprt".