Re: Auto My?

2004-12-21 Thread Michele Dondi
On Mon, 20 Dec 2004, James Mastros wrote:
OTOH, I realize now you can do that with zip in P6, in which case you do have 
a mention of the whole variable to stick a my on -- C  I think C reads better though, even 
though looking at it literally, you're attempting to lexicalize an element.
But dealing with a natural language, or with a programming language that 
is so strongly inspired by natural languages it doesn't seem so mandatory 
to have to "look at it literally". I don't know if it will be eventually 
chosen so, but since (even intuitively speaking) you can't lexicalize an 
element of an aggregate, an alleged attempt to do so could perfectly well 
be Perl's lingo for what some people already think to be a logical way to 
interpret it...

Michele
--
The trouble with engineers is that given the problem of knocking down
a stack of 100 bricks, they will start at the top, and work all
day removing them one at a time, while the mathematician will, after
a momemt's thought, remove the bottom brick and be done with it.
The "trouble" part, is having to brook the noise of the engineer
boasting about how much harder he worked while one is trying to
think about the next problem.
- Bart Goddard in sci.math


Re: Auto My?

2004-12-20 Thread Larry Wall
On Sun, Dec 19, 2004 at 08:25:58PM -0600, Rod Adams wrote:
: Another facet of this discussion comes into account when also specifying 
: type.
: 
: from S9:
:  my bit @bits;
:  my int @ints;
:  my num @nums;
:  my int4 @nybbles;
:  my str @buffers;
:  my ref[Array] @ragged2d;
:  my complex128 @longdoublecomplex;
: 
: Wouldn't this be much better as:
:  bit @bits;
:  int @ints;
:  num @nums;
:  int4 @nybbles;
:  str @buffers;
:  ref[Array] @ragged2d;
:  complex128 @longdoublecomplex;
: 
: Given that most of the stated reservations had to deal with explicit 
: declaration better defining scope, what is wrong with drooping the my in 
: this case?

How 'bout ambiguity with unary ops like "int" and "ref", or any
other unaries anyone ever decides to have that might conflict with
type names.  Plus it's just visually confusing.  Making it hard to
tell declarations from statements is one of the areas where C made
a big mistake, and I am not at all tempted to repeat it.

Larry


Re: Auto My?

2004-12-20 Thread Juerd
James Mastros skribis 2004-12-19 23:00 (+0100):
> Juerd wrote:
> >Just typing "my " before the first use of a variable isn't hard, and it
> >makes things much clearer for both the programmer and the machine. 
> Does this imply that it's now possible to type C, and 
> declare @foo?  In the current perl, this doesn't work -- it's a syntax 
> error.  It'd certainly make many constructs easier.

I didn't mean to imply that, but I sure think it's a great idea, even
though I can't think of useful examples (as everything I can come up
with is more elegantly done with vector ops or map anyway).


Juerd


Re: Auto My?

2004-12-20 Thread Mark J. Reed
On 2004-12-19 at 21:35:46, Luke Palmer wrote:
>In Perl 5 you can do the hackish:
> 
>(\my @foo)->[23] = 42;

Hm.  My reaction to the above is, and I think I speak for the entire
assemblage when I say this, "Yuckbo."

:)

Now, (my @foo)[23] would be somewhat better, but of course, that's
attempting to assign to an element of a nonce list, not an array.

I think it would be reasonable for { my @foo[23] = 42; } to be legal
Perl 6 that declares @foo as lexical.  Letting { my $foo[23] = 42; }
work in Perl 5 would be weirder, but Perl6's "arrays always have @"
means that it's pretty clear you're declaring an array rather than a single
element.

Just my 2c.

-Mark


Re: Auto My?

2004-12-20 Thread Luke Palmer
James Mastros writes:
> Luke Palmer wrote:
> >James Mastros writes:
> >>Does this imply that it's now possible to type C, and 
> >>declare @foo?  In the current perl, this doesn't work -- it's a syntax 
> >>error.  It'd certainly make many constructs easier.
> >
> >That looks weird to me.  But as Rod points out, it can be useful with
> >hashes. 
> Yes, that's the primary case I was thinking of.  I was trying to find a 
> smaller example.
> 
> OTOH, I realize now you can do that with zip in P6, in which case you do 
> have a mention of the whole variable to stick a my on -- C zip(@keys, @values);>  I think C reads 
> better 
> though, even though looking at it literally, you're attempting to 
> lexicalize an element.

Know what's cool?

my %foo = @keys Â=>Â @values;

I think we have enough WTDI now. 

Luke


Re: Auto My?

2004-12-20 Thread James Mastros
Luke Palmer wrote:
James Mastros writes:
Does this imply that it's now possible to type C, and 
declare @foo?  In the current perl, this doesn't work -- it's a syntax 
error.  It'd certainly make many constructs easier.
That looks weird to me.  But as Rod points out, it can be useful with
hashes. 
Yes, that's the primary case I was thinking of.  I was trying to find a 
smaller example.

OTOH, I realize now you can do that with zip in P6, in which case you do 
have a mention of the whole variable to stick a my on -- C  I think C reads better 
though, even though looking at it literally, you're attempting to 
lexicalize an element.

-=- James Mastros,
theorbtwo


Re: Auto My?

2004-12-19 Thread chromatic
On Sun, 2004-12-19 at 20:25 -0600, Rod Adams wrote:

> One of the other reasons in favor of the idea was aesthetic.
> 
> # stuff which declares $x, $z, and $q
> 
> $x = 4;
> my $y = 7;
> $z = 12;
> my $r = 4543;
> $q = 121;
> 
> compared to:
> 
> # stuff which declares $x, $z, and $q
> 
> $x = 4;
> $y = 7;
> $z = 12;
> $r = 4543;
> $q = 121;
> 
> With a fixed width font, like all code editors use, all the =' like up, 
> and I can quickly scan the var names to get to the one I want to change 
> at that moment.

If you align the equals signs yourself with spaces, you can use variable
names of different lengths (and possibly improved meaningfulness in
actual factual code) too.

I'm only half-joking.  Vertical alignment makes a dramatic difference to
readability.

-- c



Re: Auto My?

2004-12-19 Thread Luke Palmer
James Mastros writes:
> Juerd wrote:
> >Just typing "my " before the first use of a variable isn't hard, and it
> >makes things much clearer for both the programmer and the machine. 
> Does this imply that it's now possible to type C, and 
> declare @foo?  In the current perl, this doesn't work -- it's a syntax 
> error.  It'd certainly make many constructs easier.

That looks weird to me.  But as Rod points out, it can be useful with
hashes. 

In Perl 5 you can do the hackish:

(\my @foo)->[23] = 42;

Luke


Re: Auto My?

2004-12-19 Thread Rod Adams
James Mastros wrote:
Juerd wrote:
Just typing "my " before the first use of a variable isn't hard, and it
makes things much clearer for both the programmer and the machine. 
Does this imply that it's now possible to type C, 
and declare @foo?  In the current perl, this doesn't work -- it's a 
syntax error.  It'd certainly make many constructs easier.
I see why that's an error. It can be very confusing In literal 
fashion you are attempting to make the 24th element of @foo lexical, and 
having some elements of @foo have different scope from the rest is a bad 
idea.

However, I have also been bitten by that rather frequently, though with 
a different construct. Typically it's with hash slices:

my @[EMAIL PROTECTED] = @[EMAIL PROTECTED]; # ERROR!
my %newhash;
@[EMAIL PROTECTED] = @[EMAIL PROTECTED]; # Okay, but not as convienent.
This was part of the reason I spawned this thread. But it was also due 
to being in the middle of trying to write some decent quality code under 
a heavy time pressure, and noticed that >50% of my lines had a 'my' on 
them. It's typically not that high of a percentage, but when you are 
creating lots of small utility routines, declaring all your lexicals can 
be a significant part of the task. I added to this the observation that 
lexical variables are significantly more common than non-lexicals, and 
thought out loud as to why I was doing more work for the common case 
than the uncommon case, in a language that generally doesn't have that 
problem.

One of the other reasons in favor of the idea was aesthetic.
# stuff which declares $x, $z, and $q
$x = 4;
my $y = 7;
$z = 12;
my $r = 4543;
$q = 121;
compared to:
# stuff which declares $x, $z, and $q
$x = 4;
$y = 7;
$z = 12;
$r = 4543;
$q = 121;
With a fixed width font, like all code editors use, all the =' like up, 
and I can quickly scan the var names to get to the one I want to change 
at that moment. Yes, I could have added a 'my ($y, $r);' to the front of 
the list, but that's adding another statement to the mix, same as the 
hash slice above, adding considerably more weight to 'my' than just 
three keystrokes (m - y - space).

However, given the strong opposition (with merits) to this in other 
responses, I am willing to live with it the P5 way. Just seemed like 
autolexicals was rather DWIMish.

Another facet of this discussion comes into account when also specifying 
type.

from S9:
 my bit @bits;
 my int @ints;
 my num @nums;
 my int4 @nybbles;
 my str @buffers;
 my ref[Array] @ragged2d;
 my complex128 @longdoublecomplex;
Wouldn't this be much better as:
 bit @bits;
 int @ints;
 num @nums;
 int4 @nybbles;
 str @buffers;
 ref[Array] @ragged2d;
 complex128 @longdoublecomplex;
Given that most of the stated reservations had to deal with explicit 
declaration better defining scope, what is wrong with drooping the my in 
this case?

-- Rod Adams


Re: Auto My?

2004-12-19 Thread James Mastros
Juerd wrote:
Just typing "my " before the first use of a variable isn't hard, and it
makes things much clearer for both the programmer and the machine. 
Does this imply that it's now possible to type C, and 
declare @foo?  In the current perl, this doesn't work -- it's a syntax 
error.  It'd certainly make many constructs easier.

	-=- James Mastros


Re: Auto My?

2004-12-18 Thread Luke Palmer
JOSEPH RYAN writes:
> As bad of an idea that I think this is, I wonder if Perl6's reflection
> capabilities will be powerful enough to where a module/pragma could be
> written that would be able to do this?  For instance, one idea was:
> lexically change the current grammar to a subclass of the grammar.  In
> this subclass, there is a hook on the "variable" deparsing rule that
> will implictly declare a variable into its outer scope if it has not
> yet been declared in the current scope.  Totally whacky, sure; but
> doable?

I don't doubt it.  I'd write it right now, but we don't know enough
about the compiler interface yet.

> That brings up another idea that I had just now: will it be possible
> to load 2 different grammars at once if they don't conflict with each
> other?  For instance, say we have loaded a grammer,
> Grammar::WhackyVars, that subclasses from the main Perl6 grammar but
> modifies the "variable" rule somehow.  However, then say I want to use
> a grammar that also subclasses from the main Perl6 grammar that lets
> you use "happyfunactiontime" instead of the word "class".  Since the
> modified rules don't conflict with each other, can I just "use
> Grammar::HappyFunActionTime" and everything will work?  Or will
> Grammar::HappyFunActionTime overload the changes done by the
> Grammar::WhackyVars?

This begs the use of a particular abstraction Perl 6 has introduced with
grammars.  Maybe grammar munges aren't subclasses at all, but
grammatical roles. 

The only problem I see with such roles is code generation.  If we're
going to make it parse in such a modular way, we ought to generate code
in the same modular way.  That will take some clever design (but I think
it can be done).  This is important insight right about now, since we're
rethinking what the parse tree that rules spit out looks like.

Luke


Re: Auto My?

2004-12-18 Thread JOSEPH RYAN
- Original Message -
From: Luke Palmer <[EMAIL PROTECTED]>
Date: Saturday, December 18, 2004 4:16 pm
Subject: Re: Auto My?

> Rod Adams writes:
> There are pros and cons, and it basically ends up being a design 
> choice.
> > Well, at least when strictures are on. When they are off, the 
> coder is 
> > obviously playing fast and loose, and should get the easy 
> 'everything 
> > global' behavior.
> 
> When strictures are on, the compiler ought to die if you're tyring to
> use a variable without declaration.  This is another reason why Perl
> doesn't like autodeclaration.

As bad of an idea that I think this is, I wonder if 
Perl6's reflection capabilities will be powerful 
enough to where a module/pragma could be written 
that would be able to do this?  For instance, one 
idea was: lexically change the current grammar to a 
subclass of the grammar.  In this subclass, there is
a hook on the "variable" deparsing rule that will 
implictly declare a variable into its outer scope if
it has not yet been declared in the current scope.  
Totally whacky, sure; but doable?

That brings up another idea that I had just now: 
will it be possible to load 2 different grammars at
once if they don't conflict with each other?  For 
instance, say we have loaded a grammer, 
Grammar::WhackyVars, that subclasses from the main 
Perl6 grammar but modifies the "variable" rule 
somehow.  However, then say I want to use a grammar
that also subclasses from the main Perl6 grammar 
that lets you use "happyfunactiontime" instead of 
the word "class".  Since the modified rules don't 
conflict with each other, can I just "use 
Grammar::HappyFunActionTime" and everything will 
work?  Or will Grammar::HappyFunActionTime overload
the changes done by the Grammar::WhackyVars?

- Joe



Re: Auto My?

2004-12-18 Thread Juerd
Rod Adams skribis 2004-12-18 14:55 (-0600):
> Considering that "proper" and common usage, not to mention strictures, 
> dictates a heavy insistence on 'my'. I will thus assume that creation of 
> lexical variables with 'my' far out numbers the creation of package 
> space globals. Should we not then have it where it's the default 
> behavior, and creation of package ones take explicit declaration (via 
> 'our')

No.

Some other languages, including Ruby, do this. I dislike it. The best
thing about strict is that it catches typos. With automatic declaration,
you loose typo checking, or solve it in an ugly manner by requiring
assignment (which is still declaration, just with different syntax).

Just typing "my " before the first use of a variable isn't hard, and it
makes things much clearer for both the programmer and the machine. For
the programmer, because you immediately see what some variable's scope
is, and for the machine because it no longer has to guess whether
something's a typo in order to warn you ("used only once" is not always
a typo).


Juerd


Re: Auto My?

2004-12-18 Thread Luke Palmer
Rod Adams writes:
> Considering that "proper" and common usage, not to mention strictures,
> dictates a heavy insistence on 'my'. I will thus assume that creation
> of lexical variables with 'my' far out numbers the creation of package
> space globals. Should we not then have it where it's the default
> behavior, and creation of package ones take explicit declaration (via
> 'our')?

Larry has addressed this before, coining "I made 'my' short for a
reason".  Python and Ruby both autodeclare in the lexical scope like
this, and some people like that.  Sometimes you see bogus assignments
in those languages just to declare a variable in an outer scope.

Also, the idea is a bit brittle in the face of large subs.  If you
change the control flow a little bit, you might accidentally change a
variable's scope, and then what you thought was one variable just became
two distinct lexicals.

There are pros and cons, and it basically ends up being a design choice.

> Well, at least when strictures are on. When they are off, the coder is 
> obviously playing fast and loose, and should get the easy 'everything 
> global' behavior.

When strictures are on, the compiler ought to die if you're tyring to
use a variable without declaration.  This is another reason why Perl
doesn't like autodeclaration.

Luke