This and other RFCs are available on the web at
http://dev.perl.org/rfc/
=head1 TITLE
types and structures
=head1 VERSION
Maintainer: David Nicol <[EMAIL PROTECTED]>
Date: 17 Aug 2000
Version: 1
Mailing List: [EMAIL PROTECTED]
Number: 122
=head1 ABSTRACT
We adopt C base types, and C structure syntax.
=head1 DESCRIPTION
the C programming language has a flexible and efficient method
of describing the hardware representation of packed data: the
C<struct> keyword.
C has several variable types: C<int>, C<float>, and C<char>
are the standard ones, and the "derivative" ones are C<double>, C<short>
and any of the above prefixed with C<unsigned>.
Perl6 will use these types as well as the familiar perl types, which will
all appear in packable defined types as a memory address pointer.
The equivalent of C's C<struct> keyword will be our qs{} structure quoting operator,
which can take the same arguments as a C<struct> block and produce
an equivalent description (a "type definition") of a block of memory, which
is called a "struct." (rather than a "pseudohash" which is something
that acts very similar but has a different internal representation.)
Or we could use the C<struct> keyword as well, so that the C
struct rec
{
int a,b,c;
float d,e,f;
};
struct rec r;
could become, in perl6
# $rec = qs
$rec = struct
{
int a,b,c;
float d,e,f;
};
my $rec $r_as_a_perl5_ref;
my $rec %r_as_a_typed_perl6_hash;
my $rec %r; # much tighter interface IMO: let the compiler
# worry about what type it is
Perl structs appear in perl syntax as hashes with an ordered set of fixed
keys, returning items of the type as defined in their type definitions: records
of type $rec as defined above allow access to their internals via
associative array syntax. the C statement C<r.a=5> gets replaced with
a completely functionally equivalent C<$r{a}=5>
=head1 IMPLEMENTATION
Conversion routines are defined between the SV and the base types,
after that it's all bookkeeping.
C<my> appears to be taking over a lot of C<tie>'s duties.
=head1 REFERENCES
http://www.howstuffworks.com/c5.htm for C structures
RFC 61 (v2): Interfaces for linking C objects into perlsubs
RFC 75 (v1): first class interface definitions