Author: ruoso Date: 2009-02-16 17:57:10 +0100 (Mon, 16 Feb 2009) New Revision: 25359
Modified: docs/Perl6/Spec/S16-io.pod Log: [spec/S16] reorganizing the roles a bit, to make it less confusing. Now we should discuss IO::Socket, IO::Pipe and other very OS-specific matters Modified: docs/Perl6/Spec/S16-io.pod =================================================================== --- docs/Perl6/Spec/S16-io.pod 2009-02-16 15:16:11 UTC (rev 25358) +++ docs/Perl6/Spec/S16-io.pod 2009-02-16 16:57:10 UTC (rev 25359) @@ -65,7 +65,7 @@ It is important to realize that this is "raw" read. You're going to have plain octets stored in $buf, if this is actually encoded data, -you're going to need to encode it later, or use a "getc" or other +you're going to need to encode it later, or use "getc" or other IO::Readable::Encoded methods. =back @@ -89,38 +89,24 @@ =back -=head2 IO::FileDescriptor +=head2 IO::Seekable -This role indicates that this object actually represents an open file -descriptor in the os level. - =over -=item has int $.fileno +=item method Bool eoi() -File descriptors are always native integers, conforming to C89. +Returns true if it's the end of the input (ie. end of file or whatever), returns false if +not, returns undef if we can't say for certain. -=back +=item method Bool seek(Int $position) -=head2 IO::Closeable +Position this stream into $position. The meaning of this position is +always in "octets". -This role indicates that this object can be closed. +=item method Int tell() -=over +Returns the current raw position in the stream in number of "octets". -=item method Bool close() - -Closes the file or pipe associated with the object. - -Returns True on success, but might return an unthrown failure. -Returns true only if IO buffers are successfully flushed and closes the system -file descriptor. - -You don't have to close IO if you are immediately going to do -another C<open> on it, because C<open> will close it for you. (See -C<open>.) However, an explicit C<close> on an input file resets the line -counter (C<$.>), while the implicit close done by C<open> does not. - =back =head2 IO::Buffered @@ -128,46 +114,31 @@ Indicates that this object performs buffering. The management of the buffer is completely implementation specific. +=over + =item method Bool flush() Flushes the buffers associated with this object. -=item has Bool $.autoflush is rw +=item method Bool autoflush() is rw Forces this object to keep its buffers empty -=head2 IO::POSIX - -Indicates that this object can perform standard posix IO -operations. It implies IO::Readable and IO::Writeable. - -=over - -=item method IO dup() - -=item has Bool $.blocking is rw - -=item method Bool flock(:$r,:$w) - -=item method Bool funlock() - -=item ... - =back -=head2 IO::Seekable +=head2 IO::Streamable +This role represents objects that depend on some external resource, +which means that data might not be available at request. + =over -=item method Bool eoi() +=item method Bool blocking() is rw -Returns true if it's the end of the input (ie. end of file or whatever), returns false if -not, returns undef if we can't say for certain. +This allows the user to control wether this object should do a +blocking wait or immediatly return in the case of not having data +available. -=item IO.seek - -=item IO.tell - =back =head2 IO::Encoded @@ -176,9 +147,10 @@ =over -=item has $.encoding is rw -=item has $.locale is rw +=item method Str encoding() is rw +=item method Str locale() is rw + Encoding and locale are required for sane conversions. =back @@ -190,31 +162,31 @@ =over -=item has $.input_record_separator is rw +=item method Str input_record_separator() is rw This regulates how "readline" behaves. -=item has $.input_field_separator is rw +=item method Str input_field_separator() is rw This regulates how "readfield" behaves. -=item has $.input_escape is rw +=item method Str input_escape() is rw This allows the definition of a escape character, which should be used by readline and readfield. -=item method Str readline +=item method Str readline() Reads the stream before it finds a $.input_record_separator and returns it (including the separator). If $.input_escape is set, it should pay attention to that. -=item method Str readfield +=item method Str readfield() Reads the stream before it finds a $.input_field_separator and returns it (including the separator). If a readfield finds a -$.input_record_separator it skips it and reads the next field. If -$.input_escape is set, it should pay attention to that. +$.input_record_separator it consumes the record separator, but returns +undef. If $.input_escape is set, it should pay attention to that. =item method Str getc(Int $length? = 1) @@ -222,18 +194,16 @@ the $.locale, or the undefined value at end of file, or if there was an error (in the latter case C<$!> is set). -=item IO.lines +=item our List multi method lines (IO $handle:) is export; - our List multi method lines (IO $handle:) is export; - our List multi lines (Str $filename); +=item our List multi lines (Str $filename); Returns all the lines of a file as a (lazy) List regardless of context. See also C<slurp>. -=item IO.slurp +=item our Item multi method slurp (IO $handle: *%opts) is export; - our Item multi method slurp (IO $handle: *%opts) is export; - our Item multi slurp (Str $filename, *%opts); +=item our Item multi slurp (Str $filename, *%opts); Slurps the entire file into a Str or Buf regardless of context. (See also C<lines>.) Whether a Str or Buf is returned depends on @@ -252,21 +222,22 @@ =over -=item has $.output_record_separator is rw +=item method Str output_record_separator() is rw This regulates how say and print(%hash) behaves. -=item has $.output_field_separator is rw +=item method Str output_field_separator() is rw This regulates how print(@arr), say(@arr), print(%hash) and say(%hash) behave. -=item has $.output_escape is rw +=item method Str output_escape() is rw This allows the definition of a escape character, which should be used by say and print to preserve the record/field semantics. =item method Bool print(Str $str) + =item method Bool say(Str $str) Sends $str to the data stream doing proper encoding conversions. Say @@ -274,6 +245,7 @@ convert "\n" to the desired $.output_record_separator. =item method Bool print(Array @arr) + =item method Bool say(Array @arr) Sends each element of @arr separated by $.output_field_separator. Say @@ -283,6 +255,7 @@ do the escaping. =item method Bool print(Hash %hash) + =item method Bool say(Hash %hash) Sends each pair of the hash separated by $.output_record_separator, @@ -291,12 +264,12 @@ $.output_field_seaparator and $.output_escape is set, it should do the escaping. -=item print +=item our Bool method print (IO $self: *...@list) - our Bool method print (IO $self: *...@list) - our Bool multi print (*...@list) - our Bool method print (Str $self: IO $io) +=item our Bool multi print (*...@list) +=item our Bool method print (Str $self: IO $io) + Prints a string or a list of strings. Returns Bool::True if successful, Failure otherwise. The IO handle, if supplied, must be an object that supports I/O. Indirect objects in Perl 6 must always @@ -307,15 +280,11 @@ (However, it's fine if you have an explicit argument list that evaluates to the empty list at runtime.) -There is are no variables corresponding to Perl 5's C<$,> and -C<$\> variables. Use C<join> to interpose separators; use filehandle -properties to change line endings. +=item say our Bool method say (IO $self: *...@list) -=item say +=item our Bool multi say (*...@list) - our Bool method say (IO $self: *...@list) - our Bool multi say (*...@list) - our Bool method say (Str $self: IO $io) +=item our Bool method say (Str $self: IO $io) This is identical to print() except that it auto-appends a newline after the final argument. @@ -326,36 +295,46 @@ As with C<print>, it is a compiler error to use a bare C<say> without arguments. -=item printf +=item our Bool method printf (IO $self: Str $fmt, *...@list) - our Bool method printf (IO $self: Str $fmt, *...@list) - our Bool multi printf (Str $fmt, *...@list) +=item our Bool multi printf (Str $fmt, *...@list) The function form works as in Perl 5 and always prints to $*DEFOUT. The method form uses IO handles, not formats, as objects. -=item warn LIST +=back -=item Str.warn +=head2 IO::FileDescriptor -Prints a warning just like Perl 5, except that it is always sent to -the object in $*DEFERR, which is just standard error ($*ERR). +This role indicates that this object actually represents an open file +descriptor in the os level. +=over + +=item method int fileno() + +File descriptors are always native integers, conforming to C89. + =back +=head2 IO::Closeable -=head2 IO::Openable +This role indicates that this object can be closed. -This role implies that the object can be connected to, or listened on. +=over -=over 4 +=item method Bool close() -=item open +Closes the file or pipe associated with the object. - method Bool open(); +Returns True on success, but might return an unthrown failure. +Returns true only if IO buffers are successfully flushed and closes the system +file descriptor. -Attempts to open the handle. Depending on the implementation, this could be an open() -call, a connect(), a listen(), or something similar. +Unlike in Perl 5, an IO object is not a special symbol table entry +neither this object is available magically anywhere else. But as in +Perl 5, unless stated otherwise, IO::Closeable objects always close +themselves during destruction =back @@ -375,16 +354,6 @@ (should IO::Socket.close() call shutdown, instead of having a different name?) -=back - -=head2 IO::Streamable - -role IO::Streamable does IO::POSIX does IO::Openable does IO::Closeable { -... -} - -=over - =item IO.accept =item IO.bind @@ -722,6 +691,25 @@ =back +=head2 IO::POSIX + +Indicates that this object can perform standard posix IO +operations. It implies IO::Readable and IO::Writeable. + +=over + +=item method IO dup() + +=item has Bool $.blocking is rw + +=item method Bool flock(:$r,:$w) + +=item method Bool funlock() + +=item ... + +=back + =head2 IO::Pipe class IO::Pipe does IO::Streamable { @@ -805,6 +793,8 @@ =head1 Removed functions +=over + =item IO.eof Gone, see IO::Endable @@ -821,6 +811,8 @@ Gone, see Socket.pair +=back + =head1 Additions Please post errors and feedback to perl6-language. If you are making