Author: wayland
Date: 2009-02-14 06:38:34 +0100 (Sat, 14 Feb 2009)
New Revision: 25328

Modified:
   docs/Perl6/Spec/S16-io.pod
Log:
S16-io: Reorganised everything, grouping things together a bit better.  This is 
only a 
draft; otherwise I'd be a lot more careful :).  

Specifically, I've:
-       Taken some of the stuff that was spread throughout the document, and 
put it in 
        with its associated role 
-       Created sections for a lot of the different classes we'll need

It still needs a lot of work.  



Modified: docs/Perl6/Spec/S16-io.pod
===================================================================
--- docs/Perl6/Spec/S16-io.pod  2009-02-14 05:28:12 UTC (rev 25327)
+++ docs/Perl6/Spec/S16-io.pod  2009-02-14 05:38:34 UTC (rev 25328)
@@ -82,8 +82,17 @@
 
 =item method Bool close()
 
-returns True on success, but might return an unthrown failure.
+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
@@ -184,6 +193,15 @@
 Reads the next character in the set $.encoding according to the
 $.locale.
 
+=item getc
+
+    our Bool method getc (IO $self: Bool :async)
+
+Returns the next character from the input stream attached to IO,
+or the undefined value at end of file, or if there was an error (in
+the latter case C<$!> is set). The C<:async> flag lets the call
+return an undefined value if no character is immediately available.
+
 =cut
 
 =head2 IO::Writeable::Encoded
@@ -218,12 +236,165 @@
 $.output_field_seaparator and $.output_escape is set, it should do the
 escaping.
 
+=item print
+
+    our Bool method print (IO $self: *...@list)
+    our Bool multi print (*...@list)
+    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
+be followed by a colon, and any indirect object more complicated than
+a variable should be put into parentheses.
+
+If IO is omitted, prints to C<$*DEFOUT>, which is aliased to C<$*OUT>
+when the program starts but may be temporarily or permanently rebound to
+some other file handle.  The form with leading dot prints C<$_> to C<$*DEFOUT>
+unless an explicit filehandle is supplied.
+
+It is a compiler error to use a bare C<print> without arguments.
+(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)
+    our Bool multi say (*...@list)
+    our Bool method say (Str $self: IO $io)
+
+This is identical to print() except that it auto-appends a newline after
+the final argument.
+
+    Was:    print "Hello, world!\n";
+    Now:    say   "Hello, world!";
+
+As with C<print>, it is a compiler error to use a bare C<say> without
+arguments.
+
+=item printf
+
+    our Bool method printf (IO $self: Str $fmt, *...@list)
+    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.
+
 =back
 
+=head2 IO::Openable
+
+This role implies that the object can be connected to, or listened on.
+
+=over 4
+
+=item open
+
+ method Bool open();
+
+Attempts to open the handle.  Depending on the implementation, this could be 
an open() 
+call, a connect(), a listen(), or something similar.  
+
+=back
+
+=head2 IO::Socket
+
+role   IO::Socket does IO::POSIX does IO::Openable does IO::Closeable {
+...
+}
+
+=over
+
+=item IO.accept
+
+=item IO.bind
+
+=item Socket.pair
+
+    our List of IO method pair(Int $domain, Int $type, Int $protocol)
+
+A wrapper for socketpair(2), returns a pair of IO objects representing the
+reader and writer ends of the socket.
+
+   use Socket;
+   ($r, $w) = Socket.pair(AF_UNIX, SOCK_STREAM, PF_UNSPEC);
+
+
+=back
+
 =head1 Filehandles, files, and directories
 
 =over 4
 
+=item IO.fcntl
+
+Available only as a handle method.
+
+=item IO.ioctl
+
+Available only as a handle method.
+
+=item IO.name
+
+The C<.name> method returns the name of the file/socket/uri the handle
+was opened with, if known.  Returns undef otherwise.  There is no
+corresponding C<name()> function.
+
+=item syscall
+
+=item sysopen
+
+=item umask
+
+=item utime
+
+=back
+
+=head1 Classes
+
+=head2 IO::File
+
+This does file input and output.  
+
+class  IO::File does IO::POSIX does IO::Closeable does IO::Openable {
+...
+}
+
+=over
+
+=item init
+
+ method init(String $filename, $options?);
+ method init(Int $fd);
+
+ # Read
+ $fobj = new IO::File($filename);
+
+ # Write
+ $fobj = new IO::File($filename, :w);
+
+ # Read using file descriptor
+ $fobj = new IO::File($fd);
+
+Associate an IO object with an already-open file descriptor,
+presumably passed in from the parent process.
+
+=back
+
+=head2 IO::FileSystem
+
+This reads directories, worries about ownership and permissions, and the like. 
 
+
+class  IO::FileSystem does IO::POSIX does IO::Closeable does IO::Openable {
+...
+}
+
+=over 4
+
 =item IO ~~ :X
 X<:r>X<:w>X<:x>X<:o>X<:R>X<:W>X<:X>X<:O>X<:e>X<:z>X<:s>X<:f>X<:d>X<:l>X<:p>
 X<:S>X<:b>X<:c>X<:t>X<:u>X<:g>X<:k>X<:T>X<:B>X<:M>X<:A>X<:C>
@@ -371,51 +542,10 @@
     $mode = '0o644'; chmod $mode, 'foo';     # this is better
     $mode = 0o644;   chmod $mode, 'foo';     # this is best
 
-=item close IO
-
-=item IO.close
-
-Closes the file or pipe associated with the file handle, returning
-true only if IO buffers are successfully flushed and closes the system
-file descriptor.  Closes the currently selected filehandle if the
-argument is omitted.
-
-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.
-
-If the file handle came from a piped open, C<close> will additionally
-return false if one of the other system calls involved fails, or if the
-program exits with non-zero status.  (If the only problem was that the
-program exited non-zero, C<$!> will be set to C<0>.)  Closing a pipe
-also waits for the process executing on the pipe to complete, in case you
-want to look at the output of the pipe afterwards, and
-implicitly puts the exit status value of that command into C<$!>.
-
-=item connect
-
- my $fh = connect($hostname, 80);
-
-Attempts to connect to a remote host and returns an IO handle if successful.
-The call fails with an exception if it cannot connect.
-
-=item IO.fcntl
-
-Available only as a handle method.
-
 =item glob
 
-=item IO.ioctl
-
-Available only as a handle method.
-
 =item link
 
-=item IO.listen
-
-Available only as a handle method.
-
 =item lstat
 
 Returns a stat buffer.  If the lstat succeeds, the stat buffer evaluates
@@ -425,27 +555,6 @@
 
 =item mkdir
 
-=item IO.name
-
-The C<.name> method returns the name of the file/socket/uri the handle
-was opened with, if known.  Returns undef otherwise.  There is no
-corresponding C<name()> function.
-
-=item open
-
-    # Read
-    my $fh = open($filename);
-
-    # Write
-    my $fh = open($filename, :w);
-
-=item IO.fdopen
-
-    our IO method fdopen(Int $fd)
-
-Associate an IO object with an already-open file descriptor,
-presumably passed in from the parent process.
-
 =item IO::Dir::open EXPR
 
   my $dir = IO::Dir::open('.');
@@ -477,12 +586,6 @@
 
 =item symlink
 
-=item syscall
-
-=item sysopen
-
-=item umask
-
 =item unlink LIST
 X<unlink> X<delete> X<remove> X<rm>
 
@@ -499,71 +602,86 @@
 
 It is an error to use bare C<unlink> without arguments.
 
-=item utime
+=back
 
+=head2 IO::Socket::INET
+
+class  IO::Socket::INET does IO::Socket {
+...
+}
+
+=over
+
+=item  init
+
+ method Bool init($RemoteHost, $RemotePort, $LocalHost?, $LocalPort?);
+
+=item open($Listen?);
+
+If $Listen is 0, it does a connect().  If $Listen is 1, it does a connect() 
and a 
+listen().  If $Listen is 2, it does a listen(), but no connect().  
+
+=item IO.getpeername
+
+=item /[get|set][host|net|proto|serv|sock].*/
+
 =back
 
-=head1 Input and Output
+=head2 IO::Pipe
 
-=over 4
+class  IO::Pipe does IO::POSIX does IO::Closeable does IO::Openable {
+...
+}
 
-=item getc
+May also do IO::Readable and IO::Writable, depending on opening method.  
 
-    our Bool method getc (IO $self: Bool :async)
+=over
 
-Returns the next character from the input stream attached to IO,
-or the undefined value at end of file, or if there was an error (in
-the latter case C<$!> is set). The C<:async> flag lets the call
-return an undefined value if no character is immediately available.
+=item close()
 
-=item print
+If the file handle came from a piped open, C<close> will additionally
+return false if one of the other system calls involved fails, or if the
+program exits with non-zero status.  (If the only problem was that the
+program exited non-zero, C<$!> will be set to C<0>.)  Closing a pipe
+also waits for the process executing on the pipe to complete, in case you
+want to look at the output of the pipe afterwards, and
+implicitly puts the exit status value of that command into C<$!>.
 
-    our Bool method print (IO $self: *...@list)
-    our Bool multi print (*...@list)
-    our Bool method print (Str $self: IO $io)
+=item Pipe.to
 
-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
-be followed by a colon, and any indirect object more complicated than
-a variable should be put into parentheses.
+    our IO method to(Str $command, *%opts)
 
-If IO is omitted, prints to C<$*DEFOUT>, which is aliased to C<$*OUT>
-when the program starts but may be temporarily or permanently rebound to
-some other file handle.  The form with leading dot prints C<$_> to C<$*DEFOUT>
-unless an explicit filehandle is supplied.
+Opens a one-way pipe writing to $command.  IO redirection for
+stderr is specified with :err(IO) or :err<Str>.  Other IO redirection
+is done with feed operators. XXX how to specify "2>&1"?
 
-It is a compiler error to use a bare C<print> without arguments.
-(However, it's fine if you have an explicit argument list that evaluates to
-the empty list at runtime.)
+=item Pipe.from
 
-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.
+    our IO method from(Str $command, *%opts)
 
-=item say
+Opens a one-way pipe reading from $command.  IO redirection for
+stderr is specified with :err(IO) or :err<Str>.  Other IO redirection
+is done with feed operators. XXX how to specify "2>&1"?
 
-    our Bool method say (IO $self: *...@list)
-    our Bool multi say (*...@list)
-    our Bool method say (Str $self: IO $io)
+=item Pipe.pair
 
-This is identical to print() except that it auto-appends a newline after
-the final argument.
+    our List of IO method pair()
 
-    Was:    print "Hello, world!\n";
-    Now:    say   "Hello, world!";
+A wrapper for pipe(2), returns a pair of IO objects representing the
+reader and writer ends of the pipe.
 
-As with C<print>, it is a compiler error to use a bare C<say> without
-arguments.
+   ($r, $w) = Pipe.pair;
 
-=item printf
+=back
 
-    our Bool method printf (IO $self: Str $fmt, *...@list)
-    our Bool multi printf (Str $fmt, *...@list)
+=head1 Calls that operate on the default IO handle
 
-The function form works as in Perl 5 and always prints to $*DEFOUT.
-The method form uses IO handles, not formats, as objects.
+=over
 
+=item close()
+
+=item open()
+
 =back
 
 =head1 Unfiled
@@ -574,18 +692,10 @@
 
 =item IO.flock
 
-=item IO.getpeername
-
 =item IO.eof
 
-=item IO.accept
-
-=item /[get|set][host|net|proto|serv|sock].*/
-
 =item alarm
 
-=item IO.bind
-
 =item IO.binmode
 
 =item IO.lines
@@ -596,28 +706,16 @@
 Returns all the lines of a file as a (lazy) List regardless of context.
 See also C<slurp>.
 
-=item pipe
-
-Gone, see Pipe.pair
-
 =item prompt
 
     our Str prompt (Str $prompt)
 
-=item IO.read
-
-=item IO.readline
-
 =item Str.readpipe
 
 =item IO.recv
 
 =item IO.seek
 
-=item select(both)
-
-Gone.  (Note: for subsecond sleep, just use sleep with a fractional argument.)
-
 =item IO.send
 
 =item IO.setsockopt
@@ -635,10 +733,6 @@
 
 =item socket
 
-=item socketpair
-
-Gone, see Socket.pair
-
 =item IO.sysread
 
 =item IO.sysseek
@@ -656,44 +750,22 @@
 Prints a warning just like Perl 5, except that it is always sent to
 the object in $*DEFERR, which is just standard error ($*ERR).
 
-=item Pipe.to
+=back
 
-    our IO method to(Str $command, *%opts)
+=head1 Removed functions
 
-Opens a one-way pipe writing to $command.  IO redirection for
-stderr is specified with :err(IO) or :err<Str>.  Other IO redirection
-is done with feed operators. XXX how to specify "2>&1"?
+=item pipe
 
-=item Pipe.from
+Gone, see Pipe.pair
 
-    our IO method from(Str $command, *%opts)
+=item select(both)
 
-Opens a one-way pipe reading from $command.  IO redirection for
-stderr is specified with :err(IO) or :err<Str>.  Other IO redirection
-is done with feed operators. XXX how to specify "2>&1"?
+Gone.  (Note: for subsecond sleep, just use sleep with a fractional argument.)
 
-=item Pipe.pair
+=item socketpair
 
-    our List of IO method pair()
+Gone, see Socket.pair
 
-A wrapper for pipe(2), returns a pair of IO objects representing the
-reader and writer ends of the pipe.
-
-   ($r, $w) = Pipe.pair;
-
-=item Socket.pair
-
-    our List of IO method pair(Int $domain, Int $type, Int $protocol)
-
-A wrapper for socketpair(2), returns a pair of IO objects representing the
-reader and writer ends of the socket.
-
-   use Socket;
-   ($r, $w) = Socket.pair(AF_UNIX, SOCK_STREAM, PF_UNSPEC);
-
-
-=back
-
 =head1 Additions
 
 Please post errors and feedback to perl6-language.  If you are making

Reply via email to