Nothing makes you re-think your reply length like having your mailer
lose your message ;-)
A lot of your message revolves around this idea that there's a "normal
file open" semantic. What I've tried (but clearly failed) to articulate
previously is that this notion is becoming archaic in what is shaping up
to be the post-POSIX world. Gnome VFS and the .NET Framework are good
examples of this.
Now, I don't think that the state of the world is yet such that we can
say that Perl should embrace the Gnome VFS or .NET Framework or whatever
OS/X does or any other meta-file-framework on people, but I do think
that we can safely expect Perl 6 to have to deal with these concepts and
would be well served by building in a standard way to add your More Than
One Way later on through CPAN.
On Fri, 2005-05-06 at 15:10, Larry Wall wrote:
> On Fri, May 06, 2005 at 08:19:05AM -0400, Aaron Sherman wrote:
> : "open" as a verb is extremely ambiguous. In dictionary searches I see as
> : many as 19 definitions just for the verb form.
>
> Well, sure, but also need to take Perl history into account, where dwimmy
> open is considered something of a liability.
I've come across many folks (and I'm one of them) who a) like the "-"
magic a lot and b) are in the majority in my experience. I definitely
see the concern around adverbial bits showing up in the text (e.g. ">"
and "<"), but not magical filenames like "-". Three-argument open is a
godsend, but I'd love to preserve the bits that were useful in Perl 6.
> I think the dwimminess of open() probably arises only from MMD, and
> a string or array of string in the first argument implies ordinary
> file open. That means perhaps we have
>
> open uri($x)
Ok, I had a long reply to this, but I'll sum up:
* open uri($x) implies that I know that $x is a URI.
* Being able to "use IO::URI :stropen" makes an otherwise
cumbersome chore into a breeze, e.g.:
use IO::URI :stropen;
use IO::SomethingElse :stropen;
GetOptions('f|file' => \$input_file);
my $input = open($input_file, :r);
* I don't think any of this should be on by default, with the
possible exception of "-", but that's only possible.
> :
> : sub File::Copy::copy(IO $file1 :r, IO $file2 :w) {...}
I think you took this as a request for long, "::"-separated names in
everyday code. I was just being verbose for one-line clarity, not
because I think subdefs should look like that in real code. To be more
specific:
module File::Copy is export<copy> {
sub copy(IO $file1 :r, IO $file2 :w) {...}
}
And I was asking if that would pass the adverb down to the constructor
for IO like so:
$file1 = IO.new($param, :r)
and if not, how one can do that.
> Those are all pretty bletcherous. How 'bout
>
> io('-') ==> io('-');
In Perl 5, File::Copy::copy is not a pipelineable (or potentially lazy)
operation because it can be implemented by OS-level special-purpose
functions. I think that overloading infix:==>(IO $a,IO $b) to behave
this way would be potentially very misleading to the programmer, and
thus should probably be left alone.
Should file copying be a core function or a module as it was in Perl 5?
I don't know, but either way I think it needs to continue to make OS
specific copying available for the six or seven platforms that Perl 5
currently knows about.
[...example code...]
> : I would need some error handling here, and possibly would need to defer
> : to a parent as a fallback.
Sure, that all makes sense. I was white-boarding, and haven't even yet
solved the problem of scoping the change.
> : That brings up the idea of delegation... should this be handled by
> : delegation instead of the way I've done it? Not sure. I'm still trying
> : to figure out how to make this scope correctly so that:
Delegation might work very well here. There was a nice use for it that I
had in mind for IO::Pipe as well. I have to re-read the array delegation
rules to see how that behaves, but thanks for reminding me of it.
--
Aaron Sherman <[EMAIL PROTECTED]>
Senior Systems Engineer and Toolsmith
"It's the sound of a satellite saying, 'get me down!'" -Shriekback