Re: A6: Strict signature checking - was: Complex Parameter Types

2003-03-14 Thread Erik Steven Harrison
 
--

On Fri, 14 Mar 2003 10:08:15  
 Larry Wall wrote:
>On Thu, Mar 13, 2003 at 07:36:00PM -0800, Brent Dax wrote:
>: I think that there should be two types of arg typing[1]: 'strict' and
>: 'loose'.  Strict arg typing doesn't coerce, except to turn subclasses
>: into superclasses; loose arg typing, on the other hand, coerces whenever
>: possible.  The mechanism for choosing between strict and loose arg
>: typing should be under the caller's control, not the callee's.  (The
>: callee decides what types they want, and the caller decides how to
>: create those types.  This seems consistent with Perl's philosophy of
>: being flexible and making B&D optional.)
>
>Precisely.  The parameter types are completely invariant for the
>callee.  They are optionally invariant for the caller depending on some
>kind of stricture.  But I darn well want the naive user to be able to
>pass a Scalar to an Int parameter and have it DWTM without them knowing
>a blessed thing about these mysterious entities called "classes".
>
>We've got to keep the entry ramp low, or Perl is no longer Perl.
>
>The real question is whether this particular stricture is part of the
>default "use strict" that classes and modules assume.  There are
>decent arguments on both sides of that one, but just to mollify Damian
>I'm inclined to come down on the strict side for that.
>

I'll put my vote down on strictness (as in "complain about mismatch 
as soon as possible") by default.


But just as prototypes are ignored when we prepend & in Perl 5 can't 
some similar frobobnitz say "But on this here call, wait till runtime 
and coerce if needed"? After all, it's not the kind of thing a callee 
should dictate, but the caller.


>This week.  :-)

I'm easy.

-Erik
>
>Larry
>



Get 25MB of email storage with Lycos Mail Plus!
Sign up today -- http://www.mail.lycos.com/brandPage.shtml?pageId=plus 


Re: Arrays vs lists; A possible solution?

2003-02-13 Thread Erik Steven Harrison
 
--

On Thu, 13 Feb 2003 16:03:41  
 Joseph F. Ryan wrote:
>Erik Steven Harrison wrote:
>
>> 
>>--
>>
>>On Wed, 12 Feb 2003 17:14:17  
>> Erik Steven Harrison wrote:
>>  
>>
>>>--
>>>
>>>On Wed, 12 Feb 2003 18:29:29  
>>>Joseph F. Ryan wrote:
>>>
>>>
>>>>As near as I can tell, the only problem with the nice flow of:
>>>>
>>>>A I is a piece of data.
>>>>A I is a variable that holds a literal.
>>>>
>>>>A I is a sequence of literals and scalars.
>>>>An I is a variable that holds a list.
>>>>
>>>>is the "Rvalue-assign list", which takes the form of:
>>>>
>>>>($r1, $r2, $r3) = (1, 2, 3);
>>>>  
>>>>
>>>I don't see a problem here. The list on the right is still just  
>>>value, unmodifiable. It is a list of rvalues. When you use a variable 
>>>on the right hand side it is a rvalue. Similarly, a list of variables 
>>>doesn't flatten to it's values - it is the list itself that it is 
>>>immutable. It's individual members still retain asignibility in 
>>>rvalue context.
>>>
>>>
>>
>>Okay, pardon me for replying to myself, but that was _really_ badly 
>>worded. An example
>>
>>
>>foreach ($foo, $bar, $baz) {
>>.zoomdingle;
>>}
>>
>>The  objects in the list retain full status qua objects even though 
>>they are in a list, which is why we can call methods on them. 
>>Similarly, the fact that a scalar variable acts as a value on the 
>>lefthand side and a rvalue on the right hand side is retained even 
>>though it is in a list. It is the list itself which is immutable. 
>>Python programmers will grasp this real fast - it's just a tuple.
>>
>
>You're completely right.  See my last message :-)

I *am*? Mark it on your calender!

-Erik

>
>
>Joseph F. Ryan
>[EMAIL PROTECTED]
>
>



Get 25MB of email storage with Lycos Mail Plus!
Sign up today -- http://www.mail.lycos.com/brandPage.shtml?pageId=plus 



Re: Arrays vs lists; A possible solution?

2003-02-12 Thread Erik Steven Harrison
 
--

On Wed, 12 Feb 2003 17:14:17  
 Erik Steven Harrison wrote:
> 
>--
>
>On Wed, 12 Feb 2003 18:29:29  
> Joseph F. Ryan wrote:
>>As near as I can tell, the only problem with the nice flow of:
>>
>> A I is a piece of data.
>> A I is a variable that holds a literal.
>>
>> A I is a sequence of literals and scalars.
>> An I is a variable that holds a list.
>>
>>is the "Rvalue-assign list", which takes the form of:
>>
>>($r1, $r2, $r3) = (1, 2, 3);
>
>I don't see a problem here. The list on the right is still just  
>value, unmodifiable. It is a list of rvalues. When you use a variable 
>on the right hand side it is a rvalue. Similarly, a list of variables 
>doesn't flatten to it's values - it is the list itself that it is 
>immutable. It's individual members still retain asignibility in 
>rvalue context.

Okay, pardon me for replying to myself, but that was _really_ badly 
worded. An example


foreach ($foo, $bar, $baz) {
.zoomdingle;
}

The  objects in the list retain full status qua objects even though 
they are in a list, which is why we can call methods on them. 
Similarly, the fact that a scalar variable acts as a value on the 
lefthand side and a rvalue on the right hand side is retained even 
though it is in a list. It is the list itself which is immutable. 
Python programmers will grasp this real fast - it's just a tuple.


-Erik



>
>-Erik
>
>>
>>Well, what if an "Rvalue-assign list" is simply decoupled from
>>a normal "data list."  The confusion would end.  The concepts
>>themselves are separate, so why shouldn't the names be?  "data
>>lists" become "The One True List Type", and "Rvalue-assign lists"
>>become something like "Rvalue sequences" (or a catchier name).
>>Peace would reign on earth, or at least p6-lang and p6-doc. 
>>
>>(I hope I'm not missing something obvious here, at any rate :)
>>
>>
>>Joseph F. Ryan
>>ryan.311@osu
>>
>>
>
>
>
>Get 25MB of email storage with Lycos Mail Plus!
>Sign up today -- http://www.mail.lycos.com/brandPage.shtml?pageId=plus 
>



Get 25MB of email storage with Lycos Mail Plus!
Sign up today -- http://www.mail.lycos.com/brandPage.shtml?pageId=plus 



Re: Arrays vs lists; A possible solution?

2003-02-12 Thread Erik Steven Harrison
 
--

On Wed, 12 Feb 2003 18:29:29  
 Joseph F. Ryan wrote:
>As near as I can tell, the only problem with the nice flow of:
>
> A I is a piece of data.
> A I is a variable that holds a literal.
>
> A I is a sequence of literals and scalars.
> An I is a variable that holds a list.
>
>is the "Rvalue-assign list", which takes the form of:
>
>($r1, $r2, $r3) = (1, 2, 3);

I don't see a problem here. The list on the right is still just  
value, unmodifiable. It is a list of rvalues. When you use a variable 
on the right hand side it is a rvalue. Similarly, a list of variables 
doesn't flatten to it's values - it is the list itself that it is 
immutable. It's individual members still retain asignibility in 
rvalue context.

-Erik

>
>Well, what if an "Rvalue-assign list" is simply decoupled from
>a normal "data list."  The confusion would end.  The concepts
>themselves are separate, so why shouldn't the names be?  "data
>lists" become "The One True List Type", and "Rvalue-assign lists"
>become something like "Rvalue sequences" (or a catchier name).
>Peace would reign on earth, or at least p6-lang and p6-doc. 
>
>(I hope I'm not missing something obvious here, at any rate :)
>
>
>Joseph F. Ryan
>ryan.311@osu
>
>



Get 25MB of email storage with Lycos Mail Plus!
Sign up today -- http://www.mail.lycos.com/brandPage.shtml?pageId=plus 



Re: Arrays vs. Lists

2003-02-12 Thread Erik Steven Harrison
 
--

On Tue, 11 Feb 2003 12:28:23  
 Luke Palmer wrote:
>> Date: Tue, 11 Feb 2003 10:34:57 -0800
>> From: Michael Lazzaro <[EMAIL PROTECTED]>
>> 
>> On Monday, February 10, 2003, at 05:56  PM, Luke Palmer wrote:
>> > Indeed, this supports the distinction, which I will reiterate:
>> >
>> > - Arrays are variables.
>> > - Lists are values.
>> 
>> My hesitation about the 'arrays are variables' part is that Damian 
>> corrected me on a similar thing when I was writing about scalars.  A 
>> variable is more like "a name of a container for a value", e.g. there's 
>> three parts to it:
>> 
>> - the name  (what it's called in the namespace)
>> - the container (a specific container implementation)
>> - the value (what's inside it)
>> 

Maybe I'm confused about why there is 
confusion. An array is an object (in fact 
all containers are objects, or 
implementations thereoff). We can call 
methods on it, and dispatch functions 
differently based on it's type - which is 
why we can treat lists and arrays 
differently.

A list is not a object - it is a value, 
immutable. It is the data that the array 
object wraps around.


The name @array names arrays which Perl can 
autovivify. The '@' is part of it's name. If 
 Perl sees a name begining with @ is hasn't 
seen before is creates the array object 
automatically. So 

@array = (1,2,3,4);


really means


@array := Array.new (1,2,3,4)


or possibly (treating = as an overloaded 
operator on the type Array)


(@array := Array.new) = (1,2,3,4)


the commas being operators which construct 
the list value.


Or am I confused?

-Erik

>> So I don't know that arrays are variables, so much as arrays are 
>> containers, if we want to get pedantic about it (which I don't, but... 
>> documentation... sigh).
>
>Well, that doesn't assume the definition of the variable includes a
>namespace entry.  So, yes, I suppose container would be better.  The
>thing the namespace entry points to, but not the value.
>
>> Just to clarify... in P6, is this an array reference, or a list 
>> reference?
>> 
>>  [1,2,3]
>>
>> What about this?
>> 
>>   \@array
>> 
>> I'd say both of them are array references, but there's no variable 
>> associated with the first one 
>
>I'd agree.
>
>> -- it's just an anonymous container.  So I'd rewrite the definition
>> to:
>> 
>>- Lists are an ordered collection of scalar values
>>- Arrays are containers that store lists
>
>I think that's a pretty good one.
>
>> (Coupled with Uri's explanations, of course... it's the 'container' 
>> part that allows read/write, as opposed to simply read.)  Yes/no?
>
>Yes, from my perspective, the container is the one that knows
>read/write.  Basically, the only you can't modify lists is that they
>have no operations defined that can modify them.  Arrays on the other
>hand, do.
>
>> 
>> > Arrays are things that know about lists.  They know how to get a
>> > particular element out of a list. They know how to *flatten
>> > themselves, interpolating themselves into the surrounding list.  They
>> > know how to map, grep, sort, splice themselves.  They know how to turn
>> > themselves into a scalar.  Lists don't know how to do these things.
>> 
>> But is it OK for a list to be silently promoted to an array when used 
>> as an array?  So that all of the following would work, and not just 50% 
>> of them?
>> 
>> (1..10).map {...}
>> [1..10].map {...}
>
>I don't really know here.  I'm not sure whether this should work
>I think if lists don't have the C method, that shouldn't work.
>
>> (@a,@b,@c).pop
>> [@a,@b,@c].pop
>
>Why would you suppose the former to work?  Or do you mean that to mean
>(@a.pop,@b.pop,@c.pop)?  Can lists have methods?
>
>This clear distinction that I once had in my mind is getting blurrier
>and blurrier.  :(
>
>Luke
>



Get 25MB of email storage with Lycos Mail Plus!
Sign up today -- http://www.mail.lycos.com/brandPage.shtml?pageId=plus 



Re: A4 aliasing syntax (and a note on statement modification)

2003-02-09 Thread Erik Steven Harrison
 
--

On Fri, 7 Feb 2003 16:28:43   
 gpurdy wrote:
>All --
>
>A4 gives this example of C:
>
>for @foo -> $a, $b { ... }  # "for @foo into $a and $b..."
>
>but, this seems more natural to me (and, it turns out, closer to the P5
>syntax for ill or good):
>
>for $a, $b <- @foo { ... } # "for $a and $b from @foo..."

All else aside, I think that a <- will not 
fly. It's too easily read as greater-than-unary-minus

-Erik

>
>(heck, that even looks like shifting -- "shifty aliasing". The A4 syntax
>looks like popping until you realize it is really shoving the left N
>thingees into the containers on the right -- Syntactical Action at a
>Distance).
>
>
>
>Then, A4 gives this example of C:
>
>grep -> $x { $x eq 3 } @list # "grep into $x, $ eq 3 from @list"
># NOTE: String comparison to a number...
>
>But, this would match the C example better, IMO (and puts the
>alias name near the source of the things it will be aliasing):
>
>grep { $x eq 3 } @list -> $x # "grep $x eq 3 where @list into $x"
>
>My guess is that Larry wanted $x to appear before the block it
>will be used in, and that C's swapping of block and list
>(when compared to C) makes doing so ugly (IMO).
>
>
>
>But, this would be more natural overall (again, IMO), following my
>suggestion for C, above:
>
>grep { $x eq 3 } $x <- @list # "grep $x eq 3 where $x from @list"
>
>Whether what I suggest makes sense to anyone else or not, I do
>think the disparity between C and C in A4 should be
>dealt with...
>
>--
>
>Oh, and A4 also says "Standard Perl declarations will be plainly
>marked with C or C." The C<< -> >> or C<< <- >> notation
>for what amounts to a C should be mentioned nearby, IMO.
>
>--
>
>On another  note, this would seem to be a handy statement modifier
>form for greppage:
>
>my @threes = @list when $_ eq 3; # NOTE "where" sounds better
>
>although appropriate aliasing syntax for this eludes me at the moment...
>
>my @threes = $x <- @list when $x eq 3;
>
>feels weird with the $x near the '='. And neither of these feels right 
>either:
>
>my @threes = @list when -> $x { $x eq 3 }; # Close to A4 C 
>ayntax
>my @threes = @list -> $x when $x eq 3; # Close to A4 C syntax
>
>
>Regards,
>
>-- Gregor
>



Get 25MB of email storage with Lycos Mail Plus!
Sign up today -- http://www.mail.lycos.com/brandPage.shtml?pageId=plus 



RE: [RFC] Perl6 Operator List, Take 5

2002-11-01 Thread Erik Steven Harrison
 
--

On Thu, 31 Oct 2002 15:08:06  
 Brent Dax wrote:
>Erik Steven Harrison:
># All that said, can anyone come up with a case to 
># confuse  with <$File_Handle>?
>
>If you assume infinite lookahead, it's fine, but if not...
>
>...
>
>Is that a call to
>
>   sub something() returns(IO::Handle)
>
>or a hypered
>
>   sub operator:something($operand:)
>

Granted. So, I'm not as bright as I'd like to be. But 
it's not unreasonable to ask for the parens to 
disambiguate, and I think that I could live with a 
required  as opposed to girly French 
angles I can't type, especially since (at least for 
me) the vector ops are the common case.

I'll be up front and honest: I don't know enough about parsers. But don't we know what 
operators were using before we parse, and use that knowledge to disambiguate? Sure we 
can define new operators, but aren't we already assuming infinite lookahead if we can 
define new operators and use them without a foreward declaration?

-Erik

>?
>
>--Brent Dax <[EMAIL PROTECTED]>
>@roles=map {"Parrot $_"} qw(embedding regexen Configure)
>
>Wire telegraph is a kind of a very, very long cat. You pull his tail in
>New York and his head is meowing in Los Angeles. And radio operates
>exactly the same way. The only difference is that there is no cat.
>--Albert Einstein (explaining radio)
>
>



Get 25MB of email storage with Lycos Mail Plus!
Sign up today -- http://www.mail.lycos.com/brandPage.shtml?pageId=plus 



RE: [RFC] Perl6 Operator List, Take 5

2002-10-31 Thread Erik Steven Harrison
 
--

On Thu, 31 Oct 2002 11:26:13  
 Brent Dax wrote:

>I can honestly say at this point that I'd rather give up <$iterator>
>than lose hyperops. 

I was thinking the same thing not long ago. But now 
that I think about it, is  ever going to be 
confused for <$File_Handle>? The vector operation cosy 
up well to the concept of iteration anyway. Hell, if 
were desperate (and I think we are) then why not just 
double the brackets to <[op]> or []. Sure it's 
ugly, but I prefer it to ^[op] any day of the week, 
and it's not going to be ambiguous.


All that said, can anyone come up with a case to 
confuse  with <$File_Handle>?


-Erik

 And I consider relegating them to the << >>
>digraphs losing them, because I'm never going to be able to remember how
>to type them, and neither will anybody else.
>
>Let's look at this logically.  Here's all the punctuation (non-\w)
>characters on my keyboard and what they do in Perl 6:
>
>   TERMOPERATORDOUBLE
>OPERATOR
>`  backticks   nonenone
>'  string constantsnone**  none
>"  string constantsnonenone
>
>#  comment comment comment
>
>$  scalar sigilnonenone
>@  array sigil nonenone
>%  hash sigil  modulo  none
>
>&  sub sigil   junction and**  logical and
>!  logical not none (?)none
>^  complement  junction xor**  logical xor**
>|  nonejunction or**   logical or
>
>/  regex   divide  defined or (in
>5.9)
>*  list flatten*   multiplyexponent
>-  numify and negate   subtraction
>postdecrement
>+  numify**addition
>postincrement
>~  stringify*  concat**smart
>match
>
>=  noneassignment
>comparison
>\  get reference   nonenone
>.. method call**   method call**   range constructor
>?  force to bool*  none**  trinary operator
>
>,  nonelist composer   list composer
>;  nonestatement end   statement end
>(in parentheses)   super-comma none
>:  nonesuper-comma package
>separator, trinary operator
>
>
>( )expression grouping sub parameters  yuck
>{ }hash composing  hash subscripts yuck
>   block composing block composing yuck
>[ ]array composing array subscriptsyuck
>< >iterator syntax comparison ops  shift-left, shift-right
>UNUSED:5   8   9
>
>Items marked with a * are new, ** are changed.  There are twenty-two
>'none's on that list, but none of them line up.  (Isn't Perl great?!?)
>
>';;' is available (it doesn't mean anything in either term or operator
>context), but it's really ugly.  The other possibilities I see there
>have the same problem.
>
>There are potentially some meaningless sequences, especially with
>sigils, but those'll look quite cluttered.  Actually, one of the few
>good meaningless ones is ^[op] (with the square brackets).  In term
>context it would normally mean "bitwise complement this array", and in
>operator context it would mean "add this array to an xor junction".  If
>we lose xor junctions (which I'm not necessarily advocating, mind you),
>this sequence is pretty much open.
>
>Damn.  Larry, I don't envy you your job.  :^)
>
>--Brent Dax <[EMAIL PROTECTED]>
>@roles=map {"Parrot $_"} qw(embedding regexen Configure)
>
>Wire telegraph is a kind of a very, very long cat. You pull his tail in
>New York and his head is meowing in Los Angeles. And radio operates
>exactly the same way. The only difference is that there is no cat.
>--Albert Einstein (explaining radio)
>
>



Get 25MB of email storage with Lycos Mail Plus!
Sign up today -- http://www.mail.lycos.com/brandPage.shtml?pageId=plus 



Re: Perl6 Operator List (REMAINING ISSUES)

2002-10-30 Thread Erik Steven Harrison
 
--

On Wed, 30 Oct 2002 16:37:09  
 Michael Lazzaro wrote:
>OK, by my count -- after editing to reflect Larry's notes -- only a few 
>issues remain before the ops list can be completed.
>
>
>
>1) Need a definitive syntax for hypers,
> ^[op]  and  +op;
>have been most seriously proposed -- something that keeps a
>bracketed syntax, but solves ambiguity issues.

Maybe this is a bit radical (but hey, I'm not ashamed) but why not do 
what Larry proposed way back in Apoc. 1, namely, grabbing <> from 
iterators. Angel Faus already made a proposal for 
grabbing them for a qw() variant. I'd prefer stealing them for 
 meself. I love hyperops (vector ops, if you prefer), can't 
easily type +hyperop;, and ^[hyperop] leaves a bad taste in my mouth.


Maybe we could give fuel to Cozen's fire by totally dropping 
consistency, and generalize hypers to some quote like variant 
allowing you to define your own delimiters. Hey! then maybe hyper is 
spelled map . . . 


-Erik


--

On Wed, 30 Oct 2002 16:37:09  
 Michael Lazzaro wrote:
>OK, by my count -- after editing to reflect Larry's notes -- only a few 
>issues remain before the ops list can be completed.
>
>
>
>1) Need a definitive syntax for hypers,
> ^[op]  and  +op;
>have been most seriously proposed -- something that keeps a
>bracketed syntax, but solves ambiguity issues.
>
>2) Possible inclusion of unary prefix ^, meaning "complement".
>(Assuming doesn't conflict with (1))
>
>3) Possible inclusion of "like"/"unlike" or similar as synonyms for ~~ 
>!~.  Which we don't have to decide now.
>
>
>
>All other op issues, by my count, revolve around the meanings of 
>specific hyperop constructs.  There is one, overriding question with 
>the hyperops, which is the precise relation between an op, an 
>assignment op, and their (three!) hyperop equivs:
>
>  A   op   B
>  A   op=  B
>  A ^[op]  B
>  A ^[op=] B
>  A ^[op]= B
>
>If we can formalize the precise relationship between the three hypers 
>in the presence of scalar and list (and hash?) values for A and B, I 
>believe we can answer nearly all the hyperop questions definitively.  
>For example:
>
>@a ^[op] @b   #  array v array
>$a ^[op] @b   # scalar v array
>@a ^[op] $b   #  array v scalar
>$a ^[op] $b   # scalar v scalar
>
>@a ^[op=] @b   #  array v array
>$a ^[op=] @b   # scalar v array
>@a ^[op=] $b   #  array v scalar
>$a ^[op=] $b   # scalar v scalar
>
>@a ^[op]= @b   #  array v array
>$a ^[op]= @b   # scalar v array
>@a ^[op]= $b   #  array v scalar
>$a ^[op]= $b   # scalar v scalar
>
>Some of these are nonsensical, some of them aren't.  So which are 
>which, and can someone demonstrate that the rule holds true for ALL 
>hyperoperators, as opposed to just MOST?   ;-)
>
>MikeL
>
>



Get 25MB of email storage with Lycos Mail Plus!
Sign up today -- http://www.mail.lycos.com/brandPage.shtml?pageId=plus 



Re: Wh<[ie]>ther Infix Superposition ops

2002-10-30 Thread Erik Steven Harrison
 
--

On Wed, 30 Oct 2002 07:13:40  
 Damian Conway wrote:

>Yes. That superpositions are going to be so widely used once people
>catch on, that users going to curse us every time they have to
>write C at the start of every scope.


So, I open my inbox and see that it has been stuffed with Perl 6 
language. It's like a little gift. :-) But then I see this debate 
over the use of superpositions. If there are those who are still 
disbelieving then go look at the prior art. Icon is a fine little 
programming language (though a little too "pretty" for my tastes) 
that uses very similar syntax to what were talking about here. The 
big difference is that Icon supports loads of (very nice and clean) 
backtracking. | and  & are Icon's || and &&, but Icon's backtracking 
gives us a really cool idiom. Superpositions offer us the same thing 
in Perl 6. Take a look at Icon over at 
http://www.cs.arizona.edu/icon/ . Once I saw it I did a Piers: "This 
is something I want in Perl and I want it right now!"


>
>;-)
>
>Damian
>
>
>



Get 25MB of email storage with Lycos Mail Plus!
Sign up today -- http://www.mail.lycos.com/brandPage.shtml?pageId=plus 



Re: labeled if blocks

2002-10-26 Thread Erik Steven Harrison
 
--

On Sat, 26 Oct 2002 21:02:20  
 Larry Wall wrote:
>On Sat, 26 Oct 2002, Steve Canfield wrote:
>: Will Perl6 have labeled if blocks?  Like this:
>: 
>:   BLAH:
>:   if ($foo) {
>:  ...
>:  last BLAH if $bar;
>:  ...
>:   }
>
>I don't see why we need it offhand.  But we might well have something
>that returns out of the innermost {...} anyway, so you could use that.

Well, I always thought that labeled blocks in general would give us a 
way to label lexical scopes. If so, why shouldn't it apply to if 
blocks?

-Erik

>
>Larry
>
>



Get 25MB of email storage with Lycos Mail Plus!
Sign up today -- http://www.mail.lycos.com/brandPage.shtml?pageId=plus 



Re: Character Properties

2002-10-22 Thread Erik Steven Harrison
 
--

On Mon, 21 Oct 2002 16:49:57  
 Dan Sugalski wrote:
>
>Almost. At least perl 5's macros look like C. Emacs' macro horrors 
>make C look like Lisp...

This is because C is _clearly_ a dialect of Lisp . . . 

-Erik

>-- 
> Dan
>
>--"it's like this"---
>Dan Sugalski  even samurai
>[EMAIL PROTECTED] have teddy bears and even
>   teddy bears get drunk
>



Get 25MB of email storage with Lycos Mail Plus!
Sign up today -- http://www.mail.lycos.com/brandPage.shtml?pageId=plus 



Re: Private contracts?

2002-10-04 Thread Erik Steven Harrison

 
--

On Thu, 3 Oct 2002 18:46:14   
 Michael G Schwern wrote:
>
>I see us already smashing too many things into the method signature as it
>is.  It will rapidly get messy if you have a method with a complex signature
>and a handful of attributes and preconditions.

This is the sort of creeping elegance which made me 
worry about is/but in the first place. 

>
>Also, where do the postconditions go?  In the signature at the front? 

Well, if pre and post conditions are blocks they don't 
have to go in the signature at all. We can affect a 
lexical scope outside of the lexical scope, so we can 
simply define the PRE and POST blocks lexically to the 
method _outside_ of the method. No need to put it in 
the signature. Assuming method foo


foo.MY{ PRE } := sub { ... };


This is all contingent on the idea that we can name 
lexical scopes (such as with loop labels, named rules 
and subs, methods). The precondition here will refer 
to whatever method foo is defined, wherever it is 
defined in the inheritance heirarchy. If you want to 
point to a specific foo, use it's fully qualified 
name, if you want to point to a lexically scoped foo 


__FILE__.MY{ '&foo' }.MY{ PRE } := sub { ... };
#Ugly, ain't it?


though why you wouldn't want to do it in the method 
definition itself is beyond me.


Now this example syntax is ugly intentionally. It's 
ugly so that someone smarter than me will feel the 
need to fix it. The symbol table, taking a reference 
to a class, the %MY stash are all a little vague 
anyway, and I'd like to see someone propose good 
syntax for it.


-Erik, of the evil mailer


 That
>doesn't make sense, it should go at the end so you can keep them in mind
>when you're writing the return code.
>
>Consider...
>
>  method foo($this, $that) is memoized is something
>   is pre { $this <= 42 }
>   is pre { $that == $this / 2 }
>   is pre { a lot of code which is hard to
>shove into a block of code
>this close to the right margin }
>   is post { what is a post condition
> doing at the front? }
>  {
>  ...
>  }
>
>They can, of course, be pulled back from the margin:
>
>  method foo($this, $that) is memoized is something
>  is pre { $this <= 42 }
>  is pre { $that == $this / 2 }
>  is pre { now we have a little bit more room to play with using
>   a differnt indentation style }
>  is post { but post conditions are still distanced from the
>code which return()s }
>  {
>  ...
>  }
>
>I realize that conditions are technically part of the signature, but putting
>them in there paints us into a stylistic corner.
>
>I'm also not fond of the pre/PRE distinction.  Few of the other special
>blocks (given, eval, try, invar, etc...) use all cap names.  At least I hope
>not.  Simply attaching an "is private" attribute to a pre condition block
>seems the simplest way to go about it.  Just like any other private thing,
>it's not inherited and not visible outside the current class.  "pre" vs
>"PRE" doesn't convey that meaning.
>
>
>-- 
>
>Michael G. Schwern   <[EMAIL PROTECTED]>http://www.pobox.com/~schwern/
>Perl Quality Assurance  <[EMAIL PROTECTED]> Kwalitee Is Job One
>AY!  The ground beef, she is burning my groin!
>http://sluggy.com/d/990105.html
>


Is your boss reading your email? Probably
Keep your messages private by using Lycos Mail.
Sign up today at http://mail.lycos.com



Re: for loop and streams

2002-09-27 Thread Erik Steven Harrison

 
--

On Thu, 26 Sep 2002 14:06:50  
 John Williams wrote:

>We should respect default values if arrays can declare them.
>
>Perhaps there will be a modifier for operator declarations to declare what 
>the default behavior should be.  Otherwise I don't know how different 
>behaviors for different operators would be possible, especially for 
>user-defined operators.

Having an operator force some very narrow kind of 
context to control what the list returns is very 
strange. The list should respond in some generalized 
way (undef or whatever the list is set to pretend is 
undef) and have the operator choose how to respond to 
that, and return whatever it deems to be the "result" 
of the operation. Under this mechanic the only tricky 
part is figuring out when the list is exhausted and 
when it is passing the autoviv value legitimately.

Related note, if we can define default values for a 
list, is that a compile time or runtime property. I 
confess as to not knowing quite how to tell. I would 
hope it was runtime for the syntax alone:

@users but autovivs ("Anonymous User");

-Erik


>   sub operator:foo is hyper_default(1) ...
>I agree with "Blech", but we can procrasticate doing it at least until
>Damian makes it clear how operators will define their behavior.
>
>Otherwise, a contextualized undef (0 in numeric context, '' in string) 
>would seem DWIM to me.  
>
>I wouldn't want to throw tons of warnings from one operation, so maybe 
>hyper-operating on unequal lengths gets a new warning, instead of throwing 
>lots of 'undefined value' warnings.
>
>~ John Williams
>
>


Is your boss reading your email? Probably
Keep your messages private by using Lycos Mail.
Sign up today at http://mail.lycos.com



Re: Argument aliasing for subs

2002-09-09 Thread Erik Steven Harrison

 
--

On Sun, 08 Sep 2002 22:24:11  
 Damian Conway wrote:

>
>Think of it as punctuation. As a necessary alternative to the poor
>overworked colon.
>

Or the poor overworked dot?

>
>
>> it all looks the same to me. And I like different things to look different. 
>
>A fair point. My counterargument is that you're looking at the wrong bit.

A fair counterargument (a new programming game - 
badmitton!) 

At this point I originally had a long reply stating my 
feelings. In the course of writing it and trying to 
anticiplate Damian's counter counter counter arguments 
the reply grew and grew until I realized I had changed 
sides. But I'll assemble what thoughts were worth 
salvaging into a different post and see where they go, 
and get Damian off of the CC list :-).


>Hang in there. If these "mixed number" Cs were allowed then I'd suggest
>the semantics be that they indicate that *either* a scalar or array is
>acceptable in the corresponding argument slot. The scalar variant of the
>parameter would be bound to a scalar argument, or to a reference to an array
>argument.  The array variant of the parameter would be bound to an array
>argument, or it's zeroth element bound to a scalar argument.

I think that my problem here lies that I want to treat 
a property as either a lvalue or a subroutine call, 
and my brain keeps screaming "Watch out for variable 
interpolation!". I've been bitten by that enough in my 
early module writing days that the fear comes quickly. 
What I need (and I hope I'm not alone, or with too 
much company) is to know exactly what the is does 
here. What kind argument is it taking? Value, name, or 
reference? Once I pin that down, the whole thing 
should be clear.


>
>
>> -Erik
>> 
>>>Damian
>> 
>> PS - Ha! My name above Damian's :-)
>
>Letting me get the last word, eh? Very kind of you. ;-)

Touche ('cept with an accent on the e there). Maybe were fencing, not playing 
badmitton.

-Erik

>
>Damian



Is your boss reading your email? Probably
Keep your messages private by using Lycos Mail.
Sign up today at http://mail.lycos.com



Re: Argument aliasing for subs

2002-09-07 Thread Erik Steven Harrison

 
--

On Thu, 05 Sep 2002 09:26:08  
 Damian Conway wrote:
>Erik Steven Harrison wrote:
>
>
>> Is it just me or is the 'is' property syntax a little 
>> too intuitive? Seems like everywhere I turn, the 
>> proposed syntax to solve a problem is to apply a 
>> property. 
>
>That's because most of the problems we're discussing are solved
>by changing the semantics of a variable, subroutine, or class
>in some way, and C properties are the way to do that in Perl 6.
>
>
> > And is the is/but distinction still around?
>
>Oh, yes.

Thanks goodness.

>
>
>> Since but's proposal I've not seen any use of it, and 
>> the distinction between a compile time and run time 
>> property was somewhat hazy to me anyway, so I can't be 
>> sure that it's dead or just of rare use.
>
>Of rare use (nice turn of phrase, BTW).

Thanks.

But still, what counts as a runtime property, other than true or 
false, as in the delightful '0 but true'? What other kind of runtime 
labels can I slap on a value?


-Erik


Is your boss reading your email? Probably
Keep your messages private by using Lycos Mail.
Sign up today at http://mail.lycos.com



Re: Argument aliasing for subs

2002-09-07 Thread Erik Steven Harrison

 reposted because my mailer is evil
--

On Thu, 05 Sep 2002 09:31:45  
 Damian Conway wrote:
>Erik Steven Harrison wrote:
>
>> I know that the property syntax is pseudo established, 
>> but I'm beggining to become a bit jaded about all the 
>> built in properties were building. What about good ol' 
>> aliases?
>> 
>> sub hidden (str $name, int $force := $override) {...}
>
>I'm not keen on it because it will be hard to explain
>(or detect) the difference between that and:
>
>   sub hidden (str $name, int $force //= $override) {...}
>

Just found this hidden in my inbox. I didn't think anyone was paying 
attention ;-).


I think that the difference can be swept under the table in a 
handwavy sort of manner by pointing out that these subroutine 
declarations shouldn't be pointing to globals or widely scoped 
lexicals like that. But this all brings me back to the question of 
lexical leaking. Are $name and $force lexical to the sub? I know that 
we are trying to avoid lexical scopes leaking into each other, but I 
honestly can't figure out how that rules and these argument 
declarations interact. Someone care to explain?


>What I most like about the C syntax is (like methods in
>OO Perl), it associates a meaningful *name* with each
>deviation from standard behaviour.

This is the argument that would win me over to the property syntax. 
Self documenting code is an admirable goal. But I wonder about our 
overuse of 'is'. The performance issues of a hash that lives with 
every variable aside, it all looks the same to me. And I like 
different things to look different. In a related note, I'm always 
confused by whether or not we look at the value of the variable or 
it's name. See below . . .


>
>I find:
>
>   sub hidden (str $name, int $force is aka($override)) {...}
>
>*much* more readable, since I can read it in English.

Yeah . . . except I want at least single quotes around that darn 
$override. Required singles even. Having it be context sensitive to 
the type of property is WAY to subtle for me. And if $override is a 
reference I'd like that to DWIM (though I understand that I may be 
the only person for which that behavior is intuitive). And what 
happens with double quotes -  a symref? Ack! 


If $force is aka(@override) is going to be a compile time error, then 
why can't we just $force is aka(override) and just carry the typing 
over. And if it's not a compile time error then what in Knuth's name 
does it . . . . oh never mind - my head just exploaded.


-Erik


>
>Damian
>
PS - Ha! My name above Damian's :-)


Is your boss reading your email? Probably
Keep your messages private by using Lycos Mail.
Sign up today at http://mail.lycos.com



Re: Argument aliasing for subs

2002-09-07 Thread Erik Steven Harrison

 
--

On Thu, 05 Sep 2002 09:31:45  
 Damian Conway wrote:
>Erik Steven Harrison wrote:
>
>> I know that the property syntax is pseudo established, 
>> but I'm beggining to become a bit jaded about all the 
>> built in properties were building. What about good ol' 
>> aliases?
>> 
>> sub hidden (str $name, int $force := $override) {...}
>
>I'm not keen on it because it will be hard to explain
>(or detect) the difference between that and:
>
>   sub hidden (str $name, int $force //= $override) {...}
>

Just found this hidden in my inbox. I didn't think anyone was paying attention ;-).

I think that the difference can be swept under the table in a handwavy sort of manner 
by pointing out that these subroutine declarations shouldn't be pointing to globals or 
widely scoped lexicals like that. But this all brings me back to the question of 
lexical leaking. Are $name and $force lexical to the sub? I know that we are trying to 
avoid lexical scopes leaking into each other, but I honestly can't figure out how that 
rules and these argument declarations interact. Someone care to explain?

>What I most like about the C syntax is (like methods in
>OO Perl), it associates a meaningful *name* with each
>deviation from standard behaviour.

This is the argument that would win me over to the property syntax. Self documenting 
code is an admirable goal. But I wonder about our overuse of 'is'. The performance 
issues of a hash that lives with every variable aside, it all looks the same to me. 
And I like different things to look different. In a related note, I'm always confused 
by whether or not we look at the value of the variable or it's name. See below . . .

>
>I find:
>
>   sub hidden (str $name, int $force is aka($override)) {...}
>
>*much* more readable, since I can read it in English.

Yeah . . . except I want at least single quotes around that darn $override. Required 
singles even. Having it be context sensitive to the type of property is WAY to subtle 
for me. And if $override is a reference I'd like that to DWIM (though I understand 
that I may be the only person for which that behavior is intuitive). And what happens 
with double quotes -  a symref? Ack! 

If $force is aka(@override) is going to be a compile time error, then why can't we 
just $force is aka(override) and just carry the typing over. And if it's not a compile 
time error then what in Knuth's name does it . . . . oh never mind - my head just 
exploaded.

-Erik

>
>Damian
>
PS - Ha! My name above Damian's :-)


Is your boss reading your email? Probably
Keep your messages private by using Lycos Mail.
Sign up today at http://mail.lycos.com



Re: Argument aliasing for subs

2002-09-04 Thread Erik Steven Harrison

>  sub hidden (str $name, int $force is aka($override))
>{ ... }

I know that the property syntax is pseudo established, 
but I'm beggining to become a bit jaded about all the 
built in properties were building. What about good ol' 
aliases?

sub hidden (str $name, int $force := $override) 
{ . . .}

While less verbose, it's actually more legible to me, 
in that the prototype (we still calling it that?) 
get's less visual clutter.

In a related note, even if the 'is aka($am, $are, 
$also_known_as) = 'Electric Mayhem')' syntax get's 
establsihed will the alising trick still work? Or are 
we stepping on the Perl 6 rule against leaking lexical 
scopes?


-Erik


Is your boss reading your email? Probably
Keep your messages private by using Lycos Mail.
Sign up today at http://mail.lycos.com



Re: Argument aliasing for subs

2002-09-04 Thread Erik Steven Harrison

Somewhere, in another thread . . . 
Dr. Claw wrote . . .
>>  sub hidden (str $name, int $force is aka($override))
>>{ ... }
>
>Yeah, that's what I meant.

Is it just me or is the 'is' property syntax a little 
too intuitive? Seems like everywhere I turn, the 
proposed syntax to solve a problem is to apply a 
property. And is the is/but distinction still around? 
Since but's proposal I've not seen any use of it, and 
the distinction between a compile time and run time 
property was somewhat hazy to me anyway, so I can't be 
sure that it's dead or just of rare use.

-Erik


Is your boss reading your email? Probably
Keep your messages private by using Lycos Mail.
Sign up today at http://mail.lycos.com



Re: Perl 6 parser, built in rules, etc.

2002-09-04 Thread Erik Steven Harrison

 
--

On Wed, 4 Sep 2002 07:45:37   
 Sean O'Rourke obviated:
To me a language's grammar, once
>defined, shouldn't do a lot of changing, internally or otherwise.  When
>was the last time C's grammar changed?  Or even gcc's implementation of
>it?

Granted . . .mostly. Were talking about Perl, the 
language designed to evolve. How much did the Perl 
grammer (even if there was no definitive one in the 
Perl 6 lex-on-the-fly sense) change between Perl 1 and 
Perl 5? Perl 5 and Perl 5.8? I think the answer to the 
first question (which I suspect is "a lot") point to 
perhaps a different issue - how much do we expect Perl 
to change after this rewrite, and how are we 
accomodating Perl's inevitable evolution? The answer 
to the second question (which I think is probably "a 
little, but some") is more to the point here. Parsing 
small or experimental features (vstrings and 
subroutine attricute come to mind) will probably cause 
changes to the parser. I'd like to keep the potential 
to introduce such features without breaking existing 
code.


All that said, perhaps there is a solution. I'm not 
much of a Python programmer, but as I understand it 
Python offers an internal module called 'future' which 
holds features planned for inclusion in the next 
stable release. The idea here is that old code gets a 
chance to refactor in anticipation of language changes 
while still bringing new features into the language. 
Code which uses those features simply imports from the 
future modules. Hugo is working on the perl6ish pragma 
which already brings the concept to Perl. Perhaps a 
Perl 6 pragma can control these feature inclusions to 
help protect code which accesses the parser?

-Erik


Is your boss reading your email? Probably
Keep your messages private by using Lycos Mail.
Sign up today at http://mail.lycos.com



Perl 6 parser, built in rules, etc.

2002-09-04 Thread Erik Steven Harrison

It seems to me that what I mostly do is wave my arms 
about my head with a concern and then stay silent 
whenever praise is required. Everyone - consider 
yourselves praised :-)

On to the concern (which I am fairly confident someone 
will obviate). I've never touched the Perl internals 
(and P5P should be thankful of that) so I'm not sure 
how much the parser changes. I worry that, since the 
rules that the Perl 6 grammer uses to parse the 
language are exposed to the users, that we could be 
forced to have an ever growing Perl 6 grammer to keep 
bakcwards compatability. If a reorganization of the 
parser ever occured, the language level rules would 
need to be maintained so that a) lexically scoped 
grammer changes do not break and b) those rules which 
are useful to all different kinds of parsing tasks 
(such as parsing quoted constructs) are still there 
for those programs which will inevitably use them.


How are we planning on dealing with this, or do the 
implementers consider it a non issue? It seems to me 
that we are forced to do it (meaning the parser) right 
and cleanly the first time, which is a reasonable but 
heavy burden.

-Erik


Is your boss reading your email? Probably
Keep your messages private by using Lycos Mail.
Sign up today at http://mail.lycos.com



Re: auto deserialization

2002-08-28 Thread Erik Steven Harrison


>From:  [EMAIL PROTECTED]
>> Wow, this is nice. He means (I think) that this will be translated into
>> my Date $bday = Date->new('June 25, 2002');

I don't think this is going to work. First off, there 
is no predefined constructor name in Perl. Secondly, 
you can have multiple constructors in the same class. 
And thirdly Date.new (for better or for worse) does 
not have to return a Date object.

Finally, if these problems could be surmounted (ie 
Perl 6 defines an implicit constructor), then we get 
very subtle bugs like this

my Dog $spot = Poodle.new;


$spot is typed to accept Dog subclasses, right? But 
what if Dog.new is typed to accept an object as it's 
first argument? Or, worse, has no argument list? Does 
this construct turn into


my Dog $spot = Dog.new( Poodle.new );


or


my $spot is 'Dog';

$spot = new Poodle.new

-Erik


Is your boss reading your email? Probably
Keep your messages private by using Lycos Mail.
Sign up today at http://mail.lycos.com



Sigils again

2002-08-21 Thread Erik Steven Harrison

I've sent this message before, but Piers was kind 
enough to point out that the CGI script I'm forced to 
use to send mail does not readably format my messages, 
increasing the likelyhood that they are ignored. So 
here's a repost that's (hopefully) better to read.
==

Somewhat random question here:


We all know how to alias things in Perl 5. The binding 
operator allows aliasing in Perl 6, I understand. So, 
how do we alias grammer rules? Here are my guesses.


Rules live in the same namespace as subroutines, so 
you can use the &. Or possibly (because filehandles 
are first class objects and formats are phhbbtt) 
rule1 := rule2 with no sigil. Even if rules don't work 
like this, I'd like to know if that works for subs.

If we think of &sub $scalar @array and %hash as typed 
references and the sigils as disambiguating *which* 
reference, then perhaps we use <> as in  := 


We can't.

A related question - rule {..} can create an anonymous 
rule, but how do we create a ref to a named rule?

-Erik





Is your boss reading your email? Probably
Keep your messages private by using Lycos Mail.
Sign up today at http://mail.lycos.com



Sigils, et all

2002-08-17 Thread Erik Steven Harrison

Somewhat random question here:

We all know how to alias things in Perl 5. The binding operator allows aliasing in 
Perl 6, I understand. So, how do we alias grammer rules? Here are my guesses.

Rules live in the same namespace as subroutines, so you can use the &. Or possibly 
(because filehandles are first class objects and formats are phhbbtt) rule1 := rule2 
with no sigil. Even if rules don't work like this, I'd like to know if that works for 
subs.

If we think of &sub $scalar @array and %hash as typed references and the sigils as 
disambiguating *which* reference, then perhaps we use <> as in  := 

We can't.

I related question - rule {..} can create an anonymous rule, but how do we create a 
ref to a named rule?

-Erik


Is your boss reading your email? Probably
Keep your messages private by using Lycos Mail.
Sign up today at http://mail.lycos.com



loop and the super comma

2002-07-16 Thread Erik Steven Harrison

 Long have I been a fan of giving pure Perl modules the power to change the rules and 
create a more built-in look, feel, and functionality. So, of course, I love %MY, I 
love real named parameters, I love the ability to create iterators that look just like 
native control structures. But while laying in bed (which I should be doing now) a 
thought occured to me.

How would I create an itertor in pure Perl 6 which worked like a C style for, now 
loop? Pondering this, these vaguely related thoughts passed through my mind:

1. We now have the super comma,which can sperate arguements, so at least that looks 
right. But without changing the parsing rules, can I make the lack of a comma between 
the (...) and the block not an error?

2. This still won't work beacuse the three expressions will be evaluated before being 
passed to the iterator. I could get around this by having them be passed at strings 
and evaling them, but that defeats the idea of writing a control structure that's 
bulit in. What feature would Perl 6 have to have to make this possible? I remembered 
the ugly pass by name thread that I ignorantly started earlier, and realized that 
being able to hold the expression's evaluation until it's used makes it the perfect 
fit for this sort of thing. Can someone please show me I'm wrong and that this can be 
accomplished without pass by name?

3. Finally, if the above we're no longer issues,I realized that it would be easy to 
write an iterator that breaks our golden rule of blocks - lexical scope should not 
leak. I'm not yet adept at Perl 6 enough to write out an example of such an iterator, 
but it would be a simple matter of eva;uating the initial arg to loop, checking %MY to 
cee what lexicals were created, and then monkeying with the %MY of the closure passed 
to the iterator as a final argument. Is this an issue, or can does it fall under the 
"a use declaration makes a prgram a Perl 'dialect' and is free to break the rules"?
-Erik


Is your boss reading your email? Probably
Keep your messages private by using Lycos Mail.
Sign up today at http://mail.lycos.com



Re: hyper operators - appalling proposal

2002-07-15 Thread Erik Steven Harrison

 
 
>Karl Glazebrook <[EMAIL PROTECTED]> disgusted:
> 
> @solution =  (^-@b + sqrt(@b^**2 ^+ 4^*@a^*@c) ) ^/ (2^*@a);

>[Stuff]

>If I was forced to write vector code like this I *WILL* give up on perl, 
>and resort to Numerical
>Python or IDL instead.
>

You can always use the map and foreach like we've done all along. And, frankly, I find 
this (surprisingly) legible. It's no great shakes, but there are regexen which are 
signifigantly worse. Remember, your never forced to do much of anything in Perl.

Where I see a big win for hyper operators is in places where the scafolding code 
ordinarly clutters the actual work. I like being able to write

@defaults ^//= 1;

don't you?

-Erik


Is your boss reading your email? Probably
Keep your messages private by using Lycos Mail.
Sign up today at http://mail.lycos.com



Re: Perl 6, The Good Parts Version

2002-07-05 Thread Erik Steven Harrison


>What about parsing?  I think the fact that Perl 6 will pretty much
>have parser capabilities built in is pretty distinctive.
>
>Ted

When someone wants to write a parser, they turn to Perl 90% of the time (at least to 
prototype). The fact that they're really using a powerful lexer instead of a parser 
and don't ralize it is a sign of why regex and regex culture needed to change. 

But I don't think that advances in regexen, however great are what Pythonistas and 
Java Junkies need to hear to be convinced of Perl 6's power/usefullness. 

-Erik


Is your boss reading your email? Probably
Keep your messages private by using Lycos Mail.
Sign up today at http://mail.lycos.com



Re: Perl 6, The Good Parts Version

2002-07-03 Thread Erik Steven Harrison

Michael Schwerned:
>I've been trying to pick out what parts of Perl 6 would make a Java
>programmer sit up and go "I wish I had that" or a Python programmer think
>"Hmm, maybe there is more than one way to do it" and, in fine Perl
>tradition, a few things which make the whole audience go "what a bunch of
>fruitcakes!"

In general I like the Python crowd, but there is a tendency to think that other OO 
heavy languages are really just reimplementations of Python, and you might have to 
fight that a little, seeing how Perl's increase in OO in the core language is coming 
along.

The thing with Java programmers I think is that the already extant features of Perl's 
OO will make them drool (in my likely ignorant estimation) if they can be convinced 
that Perl's OO is 'proper' OO. Seeing how we're getting more Bondage and Dicipline OO, 
that might make them give the model enough respect to see the rapid development power 
of being able to look at the guts of a class or object from the outside, at runtime 
even. This might eliminate the 'catch up' opinion.

I think that regexes mostly need to be avoided, simply because outsiders think of Perl 
too much in terms of regexes and already view us as king. In terms of selling Perl 6, 
regexes won't win us a crowd.


-Erik


Is your boss reading your email? Probably
Keep your messages private by using Lycos Mail.
Sign up today at http://mail.lycos.com



Re: Perl 6 Summary

2002-07-03 Thread Erik Steven Harrison

>But unlike
>iterators, when you ask a generator for the next value, it picks up
>execution exactly where 
>it left off when it returned the last value -- i

Aren't these what The Damien calls coroutines? Are we getting coroutines (RFC 30, as I 
recall . . .)? I'm also big on seeing these.

Also, thanks to everyone who answered my question. My understanding of pass by name 
means I understand that we can do iterators without them, and would prefer to. As is 
often the case, the technical information one recieves online is incorrect. I'm not 
looking for pass by name to be in the core, and I never was except in as much was 
necessarry to see strong iterator support. Again, thanks guys and gels.

-Erik


Is your boss reading your email? Probably
Keep your messages private by using Lycos Mail.
Sign up today at http://mail.lycos.com



Re: Perl 6 Summary

2002-07-02 Thread Erik Steven Harrison

 
--

On 02 Jul 2002 09:56:46 +010  
 pdcawley summed:

>  Ruby iterators
>
>Ruby interators were the subject of Erik Steven Harrison's post, which
>also referred to 'pass by name' and 'the Jensen Machine', and wanted to
>know 'the Perl 6 stance on the matter'. Nobody has yet stepped up to the
>plate on this one and, speaking personally, I'm not entirely sure I've
>understood the question.

Fortunately, a little research, has clarified a good bit of my question for me. So I 
think I can reposit it more clearly. Here goes.

You all know what pass by reference is, right? And pass by value? Well, Algol 60 
(somewhat by accident, it seems) created a third passing semantic, which is just plain 
bizzare. A Perlish example, then an explanation.

my $a = 'foo';

pass_by_name ( sub { print $a} );

sub pass_by_name {
my $a = 'bar';
&@_[0];
}

Now, I have trouble keeping Perl 6 and 5 straight, but what I think this does is print 
'foo', as the sub ref is a closure, and gets $a bound to it. Fair enough.

But in pass by name, expressions passed to a function aren't evaluated until they are 
used inside that function, and are evaluated in the context of the surrounding 
function. In a pass by name environment, the above code would print 'bar' as the sub 
isn't evaluated until it is used in pass_by_name, and then it gets pass_by_name's 
value of $a. Understand? Isn't that weird?

So, pass by name sort of went to the wayside in the history of language design (Algol 
60 passed chunks of the parse tree around to make all this possible). There are 
benefits (Jensen's Machine is apparantly an example, but don't ask me what it is) but 
no one has used it since Algol 68 because it's difficult to explain, and hard to 
implement.

Now that you understand the background, here is the impetus for my
question: Ruby has brought pass by name back into the mainstream with it's much lauded 
iterators. A Ruby iterator is a block of code that objects can take and are evaluated 
as you would expect in a pass by name environment. I haven't used Ruby, but I am 
jealous of their iterators. So, my question is, now that we have seen that pass by 
name has a practical use, and can be handled in a manner which doesn't confuse the 
user, can we steal it, using Ruby as prior art?
Basically, do we get Ruby iterators?

-Erik


Is your boss reading your email? Probably
Keep your messages private by using Lycos Mail.
Sign up today at http://mail.lycos.com



Re: Perl 6 grammar progress?

2002-07-01 Thread Erik Steven Harrison

 
--

On Sun, 30 Jun 2002 21:09:40  
 Sean O'Rourke wrote:
>On Sun, 30 Jun 2002, Ashley Winters wrote:
>
>> I don't know how the grammars are going, and I'm not fit to write one
>> myself,
>
>Hey, neither am I, but that hasn't stopped me from taking a stab or two,
>figuring that through pain comes fitness.  The attempt has certainly given
>me a much better understanding of Perl (both 5 and 6) than I had before as
>a mere user.  If there's anyone else out there with the time for and
>interest in working on a Parse::RecDescent grammar, feel free to speak up.
>
>> but I wrote a list of variables I'll try to parse using any
>> grammars which go by. Are all of these legal? I suppose that's more of
>> a -language question.
>
>Cc'd accordingly.
>
>> # need more tests for ${}, I'm not evil enough for it
>> ${foo};
>
>Neither am I, but we might as well throw in @{foo}, %{foo}, &{foo}, maybe
>even $*{foo} (global symbolic reference?).
>
>> # Also, there are globals to consider
>> [...]
>
>And the wonderous *@$*foo (flattened dereferenced global $foo?).
>
>> # off the subject, but lets make sure $foo.. is parsed correctly
>> $foo..1;
>
>> $foo..[1];
>> $.foo..{1};
>
>Color me slow, but are these even legal?  What does an anonymous list
>constructor do on the LHS of a range operator?  I suppose it could just be
>one example of something that is always true, but could it possibly be
>useful other than by the perversity of overloading ".."?  And would the
>second require whitespace before the '{' to be parsed as a closure/block?
>
>> @foo{1};  # I ass_u_me {} [] and () can be overloaded?
>
>Blech!  Even if it's legal, this seems like it should be a mandatory smack
>upside the head.  If we allow this, someone will overload {} to do hash
>slices on %foo, and we'll be right back to Perl 5 ;).
>
>> @foo(1);
>> @foo();
>
>Strange overloading again, or am I missing something?  If we allow
>subscripting and calling to be overloaded on variables with any kind of
>sigil, what's the point of having sigils at all?
>
>> foo{1};  # foo is unary here
>
>Is this a hash subscript on a no-argument function returning a hash, or a
>block passed to foo(&block), or a malformed hash constructor being passed
>to foo(%hash)?  I vote for the first, because I thought blocks' and
>hashes' opening brackets always needed preceding whitespace (or at least
>/(?
>> foo.();  # Is this &{ foo() }() or foo()? I would vote former
>
>aka foo()()?  Sick...
>
>> # As a final sanity check, lets chain these things
>>
>> @.proc[$*PID].ps.{RSS};
>
>== "@{.proc()[$*PID].ps().{RSS}}", right?
>
>> @proc.[$*PID].ps().{RSS};
>
>== "@{proc().[$*PID].ps().{RSS}}"?  Or is that '[]' overloaded on a '.'
>operator on '@proc'?  In either case, we may have to do a sick amount of
>look-ahead and guess-work to figure out whether the leading '@' is a sigil
>or a dereference.  Which has higher precedence: prefix '@' or infix '.'?
>
>You might also want to add a couple of directly-chained subscriptings,
>e.g.
>
>@foo[1]{2}(3)[4..6].
>
>/s,
>sufferer at the fickle hands of PerlQt.
>
>


Is your boss reading your email? Probably
Keep your messages private by using Lycos Mail.
Sign up today at http://mail.lycos.com



Re: Apoc 5 questions/comments

2002-06-09 Thread Erik Steven Harrison

 
>
>Ah, Mr Wardley, I see you have finally apprehended the magnitude of my
>nefarious plan. Five years of plotting and scheming, of gaining influence and
>gradually insinuating my dastardly code creations into the community
>consciousness: all
>about to culminate in unleashing of Perl 6 on an unsuspecting populous. What a
>pity you shall not live to see it! Henchmen, throw him to the giant
>constrictive python!
>
>


  Ahhh, duh . . . Docter Claw . . .er Conway, uh, the Python always throws up Perl 
Coders . . . Shoulds we maybe bash him with the Giant Shell, or TCL him to death . . . 


-Erik


Is your boss reading your email? Probably
Keep your messages private by using Lycos Mail.
Sign up today at http://mail.lycos.com



RE: regex and xml/html/*ml

2002-06-05 Thread Erik Steven Harrison

 
--

On Wed, 5 Jun 2002 13:21:39   
 Brent Dax wrote:
>[EMAIL PROTECTED]:
># Just read (skimmed) apocalypse 5, had one concern - it looks 
># like we are on a serious collision course with parsing the 
># various *mls.
># 
># before:
># 
># m#..etc#
># 
># after
># 
># m#\\\#
>
>That's intentional.  What will that regex do with this?
>
>   
>
>That's interpreted the same way, but typed a bit differently.  It won't
>match your regex.
>
>The moral of the story is that you should not try to parse the *MLs with
>regexen--use modules instead.
>
>--Brent Dax <[EMAIL PROTECTED]>
>@roles=map {"Parrot $_"} qw(embedding regexen Configure)
>
>Early in the series, Patrick Stewart came up to us and asked how warp
>drive worked.  We explained some of the hypothetical principles . . .
>"Nonsense," Patrick declared.  "All you have to do is say, 'Engage.'"
>--Star Trek: The Next Generation Technical Manual
>
>


Is your boss reading your email? Probably
Keep your messages private by using Lycos Mail.
Sign up today at http://mail.lycos.com



Re: FIRST, BETWEEN, etc.. (was Re: Loop controls)

2002-05-16 Thread Erik Steven Harrison

 
--



On Thu, 16 May 2002 12:36:42  
 Miko O'Sullivan wrote:
>SUMMARY
>
>Arrays should always have known lengths because that's what arrays do.  This
>requirement is enforced culturally, not programmatically.

I totally agree that this should be enforced culturally. I think that the way a tied 
array (or hash, for that matter) should handle this in this way:

sub LENGTH { #Possible implicit sub for determining length
return undef but true; #or would this be is?
}

As Larry (I think) approximately said module and class authors should not use undef 
for false - it should mean undef. This seems pretty clear to me. "We have a length 
here, yes, but we don't know what it is yet. It's undefined".

-Erik


Is your boss reading your email? Probably
Keep your messages private by using Lycos Mail.
Sign up today at http://mail.lycos.com



Re: Accessor methods ?

2002-05-10 Thread Erik Steven Harrison


>(Perl6 syntax obviously). I hope it's going to be possible to set that
>up automagically... (Yeah, I know, if/when Perl 6 gets macros...)

I've been playing around with Perl 5.6's lvalue subs. And (though at times irritating 
to deal with) they're wonderful. It seems to me that the use of an assignment operator 
is quite clear, and so there is no need for individual method calls for retrieving and 
setting the attribute. Will this exist in Perl 6? In fact, as long as we're mulling 
over it, will subroutine attributes be supported in Perl 6 and what kind of changes 
should we expect?

-Erik Harrison


Is your boss reading your email? Probably
Keep your messages private by using Lycos Mail.
Sign up today at http://mail.lycos.com



perl6-language@perl.org

2002-05-06 Thread Erik Steven Harrison

 
 
--

On Mon, 6 May 2002 16:26:16   
 Dan Sugalski wrote:
>*Alot of good answers to questions*

Appreciate the descent from the mountain to help clear things up down here.

-Erik


Is your boss reading your email? Probably
Keep your messages private by using Lycos Mail.
Sign up today at http://mail.lycos.com



Re: Loop controls

2002-04-30 Thread Erik Steven Harrison

Lots of people said:
>Lots of stuff about 'else' loops.

*Erik thunks himself some deep thought*

I see no true slippery slope here, especially if handled correctly. I suspect that an 
explicit or implicit "why not" near the beginning of discussion lead to the feature 
feeding frenzy and the slippery slope responses.

To my thinking, assuming this is a needed feature, the ELSE block method is not quite 
adequate. We are approaching the limit to the number of implicit blocks within control 
structures a mind can be reasonably expected to handle. Although we have made comments 
on the placement of these blocks being hapahzard as is, there isn't necessarily a 
clear position within the flow of code that is associated with the concepts behind 
those blocks. 'ELSE' however seems to clearly need to be after the block to which it 
represents an alternative. Scoping issues also tend toward the post block syntax.

The need for such a structure has been most clearly defined and argued for in the case 
of 'loop'. While others have said 'I can see advantages' I generally cannot, save in 
the case of loop where the synthetic code of the flag to check if the loop was passed 
through is a hassle and not clear. Allowing a 'loop {...} else {...}' syntax seems to 
fill this niche nicely.

I have always argued that any exceptions to the looping rules should be attatched to 
while, as while already had special behavior for DWIM. Now that loop has gained this 
behavior anyway, loop seems the most deserving canidate for that reason.

Finally, scoping issues seem to have mostly to do with aliasing. While plenty of 
implicit aliasing occurs with 'loop <> {...}' explicit aliasing seems to occur with 
'foreach'. By only allowing the else construct on the control structure least likely 
to have scoping issues, it makes the learning of the syntax easier. Even if you don't 
understand them, you're less likely to run into them. As far as implicit aliasing 
goes, I think that it would be clear that the else block only executes if $_ hasn't 
been assigned to by the diamond, making it unlikely anyone would be bit by subtle bugs 
from the use of $_ in the else block. I hope :-)

So, all of these things seem to say to me that the case can be made for allowing 
'loop' to have an 'else' block, and for no other structures to, and that this clock 
should work like an if block, and not like the implicit blocks already extant.

-Erik


Is your boss reading your email? Probably
Keep your messages private by using Lycos Mail.
Sign up today at http://mail.lycos.com



Re: Fisher-Yates shuffle

2002-04-12 Thread Erik Steven Harrison

 
--

On Fri, 12 Apr 2002 18:27:11  
 abigail wrote:
>On Fri, Apr 12, 2002 at 04:42:07PM +0100, Piers Cawley wrote:
>> [EMAIL PROTECTED] writes:
>> >
>> > Why isn't
>> >
>> > if %foo {"key"} {print "Hello 1"}
>> >
>> > equivalent with the perl5 syntax:
>> >
>> > if (%foo) {"key"} {print "Hello 1"}
>> >
>> > Which keyword is it expecting?
>> 
>> Keyword /els(e|if)/, or end of line, or semicolon. Sorry badly phrased
>> on my part. The closing brace of {"key"} only ends the statement if it


As i understand it (Tell me if I'm wrong) This

%hash {key};

will not work, because space between the hashname and the brace was no longer allowed. 
This allows for

if %hash{key} { ... }

and also

if $scalar { ... }.

The only other white space rule is that white space after the closing brace of a 
closure, when that closure is the last argument of a user defined sub get's treated as 
a semicolon if there is nothing else on that line. This allows custom iterators to 
parse (or appear to parse) like builtins.

myforeach @arry, %hash, $scalar {
   ...
} 
#No semicolon required!

What problems does this seem to cause - I don't see anything wrong. I don't see how 
(except in the case of closure as last argument) how it matters one way or another 
what kind white space appears between tokens. 

What am I missing?

-Erik


Is your boss reading your email? Probably
Keep your messages private by using Lycos Mail.
Sign up today at http://mail.lycos.com



Re: Bracekets

2002-04-08 Thread Erik Steven Harrison


>
>$a is a hash key
>$b is an array index
>$c is another hash key
>
>So, if I try:
>
>@multi_dim[$b][$a][$c]
>
>then it's obviously going to break.  But how can I, the
>programmer, easily spot that?  It's not as clear as:
>
>@multi_dim{$a}[$b]{$c}
>
>where I can see what I'm getting as I work through the
>data structure.
>

A glance at my email tells me that several messages about this are yet to come, but 
I'll risk repeating someone else.

What, exactly is the issue here? If $a is a hash key, that is clear by  the funny 
character.

%hash[key][additional][levels][of][depth]

If we are worried about about accidentally giving a key where an index is expected, I 
don't understand how the semantics are much more confusing that the current ones. A 
string'll get converted to a number and get used creating silent errors, or raise a 
warning, which is not made more clear by the precence of a brace. If we're talking 
about while I'm coding then the level of indirection by making the thing a variable in 
the first place defeats any advantage that having the braces might give. For a really 
BIG structure, if your are going to forget where the hashes are, then the braces 
aren't going to help - you'll just put 'em inthe wrong place. 

Printing out the value should solve the problem regardless - the braces don't seem to 
make this issue much more clear. (To me anyway. I get the nagging feeling I'm missing 
something.)

As to the inspring issue about using [] for hashes, I say go for it if (and only if) 
it is a signifigant improvement for the parser. The historical pressure here is high, 
so it can't just be a little faster.

However, if this isn't the 'idiomatic' sematics, I can see Perl in non-strict form 
silently using whatever is between the []'s regardless of what the reference is. I 
wonder at a)what sort of speed penalty we may be looking at for this, b)what degree of 
advantage it is for QnD scripts and c)whether or not things like refs should really be 
given that lazy a usage. Like modules perhaps, unstrictness in refs might be 
unjustifiable.

-Erik



Is your boss reading your email? Probably
Keep your messages private by using Lycos Mail.
Sign up today at http://mail.lycos.com



Re: Apoc4: The loop keyword

2002-01-25 Thread Erik Steven Harrison


>>Besides no one has commented on Steve Fink's (I think it was him) idea
>>to store the result of the most recently executed conditional in $?. I
>>kinda like that idea myself. It makes mnemonic sense.

H . . . I could grow used to that. A couple of thoughts.

1) It doesn't seem to buy us much that $_ doesn't already, except some slight 
legibility in that we can say what the variable holds as in:

foreach $PIN_number (@list) {
my $PIN = $PIN_number;
#Stuff
}

2) What about our new, more complex foreach:

foreach ($key, $value) %hash {

#What's $? here?

}

Perhaps we could use @_, since we're already used to that giving us arguments from 
outside the current scope. Using @_ might very well be logical since custom iterators 
will be using it anyway.

3) Even given 2 above I'm not sure that:

foreach ($key, $value) %hash {
my ($key, $value) = @_;
# Do stuff
}

is more useful than 

do{
my ($key, $value);
foreach ($key, $value) { . . . }
}

simply because at the end of the first we have $key and $value still overwriting any 
previous values, and they'll have values afterward. Even if a $? or @_ implementation 
existed I'd probably use the do { . . . } anyway for that reason.

-Erik


Is your boss reading your email? Probably
Keep your messages private by using Lycos Mail.
Sign up today at http://mail.lycos.com