Re: Perl 6 fears

2005-10-24 Thread Nate Wiger

Joshua Gatcomb wrote:

On 10/24/05, Juerd [EMAIL PROTECTED] wrote:


Feel free to add your own, or fears you heard about!


FEAR: The Perl6 process is driving away too many good developers

FEAR: Perl6 will not be as portable as p5

FEAR: Perl6 is un-necessary and the time, money, and resources is impacting
p5.


These are at the top of my list. Sooner or later big Perl advocates 
(like myself) are going to look for other languages because the future 
is too uncertain and unstable.


Also, in terms of module rewriting: This is a massive effort. I don't 
know if anybody's looked at the internals of stuff like Class::DBI and 
its derivatives, but it's huge.


The fact that there's not alot of active p5p'ers on this list should 
alarm people more.


-Nate


Re: $1 change issues [was Re: syntax for accessing multiple versions of a module]

2005-10-21 Thread Nate Wiger

Luke Palmer wrote:

Every regex engine in every language uses $1 or \1. This includes Java,
JavaScript, C, PHP, Python, awk, sed, the GNU regex libs, etc. Somehow
other languages seem ok with this, because it's a widely-used convention.


Perl 6's patterns are _not_ regexes anymore.  But I doubt that we
won't be imitated, because the new regexes are way better than the old
ones.  Breaking cruft for a reason and all that.


Ok, I'll wait on this one. I've said my piece. Maybe they'll go back and
update awk and sed after Perl 6 comes out. (Ok now I'm just being
sarcastic, sorry. :-)


The fact that we use . instead of - (like every other language on
the planet)?


You're using my argument for me - thanks. See above.


Huh?   So you want to go back to Perl 5's arrow?  *Anybody* coming to
Perl 6 from some non-Perl 5 language is going to be more comfortable
with dot.


No, no, you misread that completely. Basically, you're saying to use the
. for objects because everyone else does. I'm using the same
supporting argument (everyone else does) for why to start with $1.

BTW, C and PHP both use - still.


It sounds like you want a backwards-compatible change.  From the
outset we knew that this wasn't our goal.  Perl 5 is full to the brim
with syntax, and there's pretty much nowhere we can add anything, and
there's tons of cruft that we had to get rid of.

Consider Perl 6 to be a derivative, not an extension, of Perl 5.


I really do understand that - really. But I think things are getting a
bit overboard. The Latin-1 sigil is another discussion that nobody wants
to admit is a legit problem, despite numerous legitimate issues. Even
being able to type in the syntax itself is going to be problematic!

Anyways, you can listen or not listen to those of us from real, large,
corporate environments. I'm just trying to temper the enthusiasm for
many of the real improvements in Perl 6 with some of the real costs -
which are largely being ignored as no big deal.

I'm a big Perl advocate, but I guess I'm just not sure if I'm gonna be a 
big Perl 6 advocate yet. There's alot of downsides and real business risk.


-Nate


Re: syntax for accessing multiple versions of a module

2005-10-20 Thread Nate Wiger

Larry Wall wrote:

I think there can be some kind of community metainformation that sets
defaults appropriately.  And if not, the site/project can certainly
establish defaults.  On the other hand, a lot of projects do simply
want to specify the version and author explicitly eveyr time,
and they'd rather tweak it by hand (or by script) if they want to
change it, since then at least they know when they need to rerun the
regression tests.


I think it's a laudable idea in theory, but not necessarily application. 
I've done quite alot of Perl programming, and I've never run into this 
personally. Who has? (Really, I'm being serious.) Are there really 
multiple modules sharing interchangeable interfaces? Or instances where 
we want to allow the same name to mean different concepts depending on 
the author?


There's no logical difference between:

   use DBI:TIMB
   use DBI:JEFFSTER

And:

   use TIMB::DBI
   use JEFFSTER::DBI

Anyways, I don't like the idea of people being able to upload 
identically named modules to CPAN. I think that's a very bad idea. See 
Rob Kinyon's message.



You mean the pattern matching characters on the dispatcher?  Or the
method declaration syntax?  Which part is making your head spin?


Yes. :-)


But now you're changing your complaint.  If we apply your previous
complaint to this, in many cases we're doing that redesign *precisely*
to fix the thing you're complaining about--too many special cases for
one instance...only it's Perl 5 that's the culprit here, not Perl 6.
In Perl 6 we've greatly regularized the special cases and reserved
most of the special syntax for common cases.  Or more precisely, for
what we *suspect* will be common cases in the future, not necessarily
the common cases in the past.


And I think that's actually my problem right now. Back when Perl 6 
design started in 1999/2000 (and we wrote all the original RFC's), we 
were careful not to throw the entire enchilada out. Perl 5 is enormously 
successful because is solves *actual* problems, not *suspected* problems.


And, it shares alot with other languages people know and use.

Right now the design is going towards something that's very very 
un-Perlish from a syntax standpoint. Sure, the philosophy's there, but 
there are fewer and fewer things Perl 6 shares with Perl 5 (or other 
widely-used languages).


And there are many superflous changes, such as using $0 as the first 
match, where every other accepted regex engine/program on the planet uses 1.


Anyways, I'm not trying to rant or be obstructive (really); I am simply 
trying to provide a slightly different perspective on a few things.


-Nate


Re: syntax for accessing multiple versions of a module

2005-10-20 Thread Nate Wiger

Nicholas Clark wrote:



$1 is a prime example. $0 means the program name (all scopes). $1 is the
first match.  It's been that way for a very, very, very long time, and
it works just great. There is no *compelling* reason to change this,
other than to satisfy a few people that think it should be different.


I cannot agree. The reason you give is not compelling.


On the contrary, doing things the established way is perhaps THE most
compelling reason. After all, we're changing to . for objects to be
like Java and other languages, right? EVERY other language (including
Perl 5) starts with $1 (or \1).


Neither is the more
important reason, that it regularises the numbers when using an
array lookup to find matches, $1 being $/[1], IIRC.


If you could provide a real-world example where this helps, I'd
appreciate it. Again, I'm being sincere. I have never run into this
issue personally, so I'm trying to understand the benefit.

-Nate


$1 change issues [was Re: syntax for accessing multiple versions of a module]

2005-10-20 Thread Nate Wiger

Luke Palmer wrote:


Okay, I may still be missing your point, so let me try to summarize
just to be sure we're on the same page:  You say that the thing that
is going to hinder migration to Perl 6 is the fact that it's different
from Perl 5.


Intentionally trite oversimplification. My problem is that it's
different in some ways which are not truly useful, and that cause
unnecessary relearning/rewriting/incompatibilities.


Our target audience is only somewhat from a Perl 5 background.  People
from Java, from Python, from C, and even just starting to program will
be learning Perl 6, and they would rather have all the language be
zero-based, rather than most of it being zero-based except for $1, $2,
etc. (you were complaining about special exceptions if I recall).


Every regex engine in every language uses $1 or \1. This includes Java,
JavaScript, C, PHP, Python, awk, sed, the GNU regex libs, etc. Somehow
other languages seem ok with this, because it's a widely-used convention.

And you don't have to answer, but have you actually programmed in Java 
or Python? You seem to be speaking for alot of programmers.



The reason I'm dismissing you as a complainer is because of your
broad field of attack.  You say that the method syntax is starting to
make [your] head spin. Well, what about it is making your head spin?


The method: infix:+ stuff makes no sense to me, but I don't want to
dwell on it.


The fact that we use . instead of - (like every other language on
the planet)?


You're using my argument for me - thanks. See above.


If you want something to change, you should suggest a change.  If you
think that Perl 6 is changing too much in general, and that we should
go back and make it more like Perl 5, you probably won't get your
wish. 


That's not my wish; just that it's time to take another look at the
list of changes to see where the real-world benefit is.


[1] Which will be, what, eight hours for a Perl 5 programmer?  Have
you ever spent a month trying to learn, oh, say, Haskell?  Because
people do that, too.


There are more components to this that just the learning time for one
person. There are project teams, sustaining engineering for existing
projects, etc. And that's not even counting management tape. Real-world,
profitable computing is a big, ugly, nasty beast.

If Perl 6 is going to be successful, this means it must change the
fewest key things with the most benefits. This may mean some things that
aren't quite perfect still don't get changed. (It also means lots of
new stuff can still be added - I'm just talking change.)

For example, NIS+ was released as a follow-up to NIS. It was supposed to 
solve all the issues (mostly security) from NIS. But it was made too 
complicated, and incompatible with NIS. People were supposed to re-learn 
NIS and convert all their maps to NIS+. They didn't.


Just food for thought... maybe I'm wrong...

-Nate


Re: syntax for accessing multiple versions of a module

2005-10-19 Thread Nate Wiger

Stevan Little wrote:

Nicholas,

This is addressed in S11, here is a link:

  http://search.cpan.org/~ingy/Perl6-Bible/lib/Perl6/Bible/S11.pod

To summarize, the syntax to load the modules is:

  use Dog-1.2.1;

While the syntax to create a specific version of a module is:

  my Dog-1.3.4-cpan:JRANDOM $spot .= new(woof);


I'd really like to see a more extensible syntax for this. So:

   use Dog 1.2.1;   # ala Perl5

And then to extend:

   use Dog { version = 1.2.1, cpanid = 'JRANDOM' };

This would allow arbitrary specifications, ie:

   use Dog { interface = 0.2,
 version = ['=', 1.2.1],
 company = 'Sun Microsystems'
   };

I addresses the class creation syntax partially in the initial  version 
of the Metamodel prototype, which was built in p5. I  basically just 
aliased the package with the long name (%{Dog-1.3.4- cpan:JRANDOM::} = 
%{Dog::}). However this does no good for loading  of modules.


Building off the above:

   %{Dog}{1.2.1}{JRANDOM}

Or some such, with the longest-matching object winning.

-Nate


Re: syntax for accessing multiple versions of a module

2005-10-19 Thread Nate Wiger

Larry Wall wrote:

Well, we thought about opening it up like that, but we really kinda
need to establish what is an official part of the long name for
uniqueness purposes, and try to avoid too much visual clutter in
standard usage.


Going with that... I would think that the official part is really just 
the module name. Are there lots of problems with CPAN collisions between 
different authors? No. People just choose a slightly different name if 
their preferred one is taken.


It seems the biggest problem is requiring *only* a specific version, or 
range of versions, or = a version. I know this is addressed already.


Not trying to rant (really), but one thing that is starting to bother me 
about Perl 6 is that there's lots of changes that require special syntax 
for one specific instance. It's making it really really difficult to 
remember or generalize, two things that I thought we were trying to improve.


-Nate


Re: syntax for accessing multiple versions of a module

2005-10-19 Thread Nate Wiger

Larry Wall wrote:

This is one of those accomodations to the real world, like everyone
agreeing on a standard URI format.  We're really trying to keep
these module names close to what you'd see as the name of, say,
the corresponding .rpm file.  These modules have to have names that
work outside of Perl as well as inside, and {...} isn't going to fly
in general.


My concern is that we're solving problems that don't really exist in
real-world Perl usage. Are there really two competing authors of DBI?
Or, for any product, do two people really try to market SuperWidget?
No, one person just changes to SuperGadget. And with URI's, one person
gets amazon.com. Sorry, name taken.

I think we're actually *encouraging* problems by allowing long, clashing
names. Pretty soon all DBI modules will have to start with

   use DBI:TIMB;

Because JEFFSTER decided to upload his DBI (Derivative Binary Index)
module.

I think it will have the opposite effect of what we're trying to avoid.

: Not trying to rant (really), but one thing that is starting to bother me 
: about Perl 6 is that there's lots of changes that require special syntax 
: for one specific instance.  It's making it really really difficult to 
: remember or generalize, two things that I thought we were trying to improve.


Well, you're painting with kind of a broad brush here.  If you can
point to other areas where we could usefully generalize without
getting too abstract for newbies, I'd be delighted to hear them.


The method syntax is starting to make my head spin, for one.

Many things, as a longtime Perl 4/5 programmer and CPAN goon, are
problematic because we're reusing established operators for completely
different ideas. From a design standpoint, I feel it's going to hamper
adoption of the language. People don't have the time (or interest) to
re-learn that much language, when Perl 5 works fantastic for 95% of
the cases.

-Nate