Re: r31755 -[S05] specifiy that .parse can invoke other subrules than TOP by name

2010-07-19 Thread Stéphane Payrard
Note that I sent a patch to that effect to p6c Jun 2  in a mail titled
support of parsing from a non TOP rule
that has not been applied. It still works. Attached below. Testable by :

use Test;  grammar A { token hi { hi } };  ok   A.parse( 'hi',
:rulehi) eq 'hi',  Grammar.parse: :rulesomerule

On Sun, Jul 18, 2010 at 10:40 PM,  pugs-comm...@feather.perl6.nl wrote:
 Author: moritz
 Date: 2010-07-18 22:40:18 +0200 (Sun, 18 Jul 2010)
 New Revision: 31755

 Modified:
   docs/Perl6/Spec/S05-regex.pod
 Log:
 [S05] specifiy that .parse can invoke other subrules than TOP by name

 Modified: docs/Perl6/Spec/S05-regex.pod
 ===
 --- docs/Perl6/Spec/S05-regex.pod       2010-07-18 15:13:40 UTC (rev 31754)
 +++ docs/Perl6/Spec/S05-regex.pod       2010-07-18 20:40:18 UTC (rev 31755)
 @@ -3943,7 +3943,10 @@
  All grammar objects are derived from CCursor, so every grammar object's
  value embodies the current state of the current match.  This new grammar
  object is then passed as the invocant to the CTOP method (regex, token,
 -or rule) of CMyGrammar.  Grammar objects are considered immutable, so
 +or rule) of CMyGrammar. The default rule name to call can be overridden 
 with
 +the C:rule named argument of the Cparse method.
 +
 +Grammar objects are considered immutable, so
  every match returns a different match state, and multiple match states may
  exist simultaneously.  Each such match state is considered a hypothesis on
  how the pattern will eventually match.  A backtrackable choice in pattern





-- 
cognominal stef


parrot-parse_with_rule.2010-06-02.patch
Description: Binary data


optional rules cluttering parse trees

2010-04-27 Thread Stéphane Payrard
When doing an analyse of a sample parse tree, I note that it is
cluttered by the reduction of optional subrules
to  generate a zero length parse subtree. That is, rules with a '?'
quantifier matching zero time.
Suppressing such matching rules from the parse tree would make it
easier to read.
Additionnally, the actions associated with such a quantified rule
matching once would not necessitate a trailing [0].

  my $twigil := $twigil ?? ~$twigil[0] !! '';

 would read

  my $twigil := $twigil ?? ~$twigil !! '';


To substantiate my claim of the omnipresence of arrays of length 0 for
optional subrules,
I analyse the parse tree generated by the following program...

 sub a ( |$c ($a, $b)) { say $c }
 a(1,2);
 my $a;
 say $a+4*3

..using this one liner

 perl -ne '/\(\w+)\.*size:(\d+)/ and ++$a[$2] and !$2  $r{$1}++ ;
END { $,=, ; print $i++ .  : $_\n for @a; print $_ : $r{$_}\n
for sort keys %r }'

..with these results

0 : 49
1 : 9
2 : 1
3 :
4 : 1
arglist : 3
colonpair : 6
default_value : 3
morename : 6
post_constraint : 2
semilist : 1
signature : 1
statement_mod_cond : 5
statement_mod_loop : 5
trait : 5
twigil : 6
type_constraint : 3
typename : 3

It means that most arrays, 49 of them, in the parse tree are of zero
length.  When counting rules generating these arrays, we see that most
of them are used in the Perl 6 grammar with a '?' quantifier.

  perl -ne '/\(\w+)\/ and $i++; END { print $i }' prg.parsed
  162

Counting 162 reductions, that means that more than one fourth of them
are spurious.

When analyzing the rules that have generated 0-length arrays, we
easily understand they are not specific
to the sample program. For example, in normal programs, most
statements have indeed no optional modifiers and many variables don't
have twigils.




-- 
cognominal stef


Re: How to define a new value type?

2008-09-16 Thread Stéphane Payrard
On Tue, Sep 16, 2008 at 6:11 AM, Patrick R. Michaud [EMAIL PROTECTED] wrote:
 On Mon, Sep 15, 2008 at 10:09:41PM -0500, John M. Dlugosz wrote:
 Darren Duncan darren-at-darrenduncan.net |Perl 6| wrote:
 So, how does one get an object to pretend to be a value type for
 purposes of assignment?

 I have been under the impression that value types are supposed to
 define immutable objects, or at least objects that pretend to be
 immutable; any operators on them would produce new objects rather than
 mutating existing ones.
 [...]

 I agree.  A value type is immutable, where the identity is keyed to
 the value.  Making a value type that can mutate can cause confusion.

 I'm now thinking that the normal = you write should always give
 reference assignment semantics.  In the case of value types, assuming
 they are indeed immutable, it does not matter whether they have value or
 reference assignment semantics, since the same value will give the same
 identity, regardless of memory (or in-register) representation.
 [...]

 I think I can accept this reasoning for now, although it has some
 strong implications for managing array elements and binding operations
 (especially given Parrot's model of them).  But we'll come up with
 something, and thanks.

 Pm


I don't understand how = differs with that semantic from :=
I would expect that = would make a copy (clone?) of the object.
For a mutable object, I don't know if that copy should be immediate or deffered
by a mechanism of copy on write. Probably that behavior could depend on a
trait of the class that implements to be copied object.

-- 
cognominal stef


yada yada yada in regex

2008-06-08 Thread Stéphane Payrard
what is the equivalent convention for yadayadayada in regex. Cuz  ...
is alread meaningful in regex.  Should I use ... or {...} ?
Should the first be predefined?

I want something that is a placeholder that parses but fails if
someone pastes it. In other words the equivalent of
a sub yada yada yada


-- 
cognominal stef


Re: type sigils redux, and new unary ^ operator

2005-11-23 Thread Stéphane Payrard
Larry Wall a écrit :
| On Wed, Nov 23, 2005 at 07:10:39PM +0100, Juerd wrote:
| : Ruud H.G. van Tol skribis 2005-11-23 19:03 (+0100):
| :   Doesn't ^5 encourage [EMAIL PROTECTED] too much?
| :  Can you explain when that creates a problem?
| : 
| : It's not about problems in execution, it's about expression.
| : 
| : [EMAIL PROTECTED] returns the *number of elements*, not the index of the 
last
| : element plus one. It should not be used for index math.
| : 
| : There are cases where we should write @foo.last + 1, even though the
| : result will in almost all cases be the same as [EMAIL PROTECTED], and there 
are
| : cases where we should write @foo - 1, even though the result will be the
| : same as that of @foo.last.
| : 
| : That almost all arrays range from 0..i is no reason to write bad code.
| : 
| :  Maybe someone doing
| :for ([EMAIL PROTECTED])-$i { say @foo[$i] }
| : 
| : That should be ^(@foo.last + 1), or not using ^ at all. I'd prefer the
| : latter.
| 
| I don't think that's a big problem.  Formal arrays are allowed to view
| all incoming array parameters as 0-based even if created elsewhere as
| non-0-based arrays.  Forcing everyone to use the same circumlocutions
| because someone somewhere *might* use a non-0-based view of their
| arrays is just falling back into one of those magical action at a
| distance traps, I think.  A non-0-based view is fine in a particular
| lexical scope, but it shouldn't leak out.
| 
| Which means you can use [EMAIL PROTECTED] and know it's right in your lexical
| scope.

What about array with holes as supported by Parrot?
Does .elems return the number of elements with or without
the holes?
Does iterating over the array iterates over the holes as well?
That would sound inefficient to do that over a mostly empty array.

Related question, Is there a way to get a list of iterators
that iterate only over the non-holey parts of an array?



--
  cognominal stef

| 
| Larry
| 


Re: What's the latest on Iterators?

2005-11-12 Thread Stéphane Payrard
Larry Wall a écrit :
| On Fri, Nov 11, 2005 at 08:42:44AM -0500, Joe Gottman wrote:
| : Do functions like map and grep, which in Perl5 return lists, return
| : Iterators in Perl6?
| 
| A list may contain iterators.  Lists don't eagerly flatten in Perl 6.
| 
| : Can an Iterator be passed to a function (like map and grep again)
| : that requires a list as an input?
| 
| Certainly.  You can pass as many iterators as you like.  The range object
| is your prototypical iterator, and you can say:
| 
| @results = grep {...} 0..9, 20..29, 40..49;
| 
| The list that grep is returning can also function as an iterator, so
| @results isn't necessarily all there after the statement executes.
| 

How can Perl6 can consistently cope with side effects if it is not
specified when evaluation is lazy or strict? Is there a trait to say
that a function (here the grepping predicat) does not have
side-effect or is also really functional (so as to permit various
optimizations)?

Ate they  pragma to say, from here every function that will be defined will 
by default functional or every parameter evaluation will be lazy:

  use fun;
  use lazy;

   sub foo {$a } { ...  } # functional and lazy

   sub notfunctional($a) isnot fun {...)  # can we unset a default attribute?

  no fun;  # use strict has another meaning btw.
  ...
  use fun, lazy; # also can we do use bundling?

More generally I am worried of the mix of lazy and strict behavior in
the presence of all sorts of side effects that would happen in a random
order depending of the parameter evaluation order.

btw, for strict functions, is the left to right evaluation of
parameters guaranteed?

| 
| Larry
| 

--
cognominal stef


Re: Mr. Clean vs. Perl 6

2005-06-30 Thread Stéphane Payrard
On Thu, Jun 30, 2005 at 06:17:14AM -, David Formosa (aka ? the Platypus) 
wrote:
 On Thu, 30 Jun 2005 05:17:56 +0300, Yuval Kogman
 [EMAIL PROTECTED] wrote: 
 [...]
 
  I gave Perl 6 to Mr. Clean, and he said that if type inferrence was
  formalized, and used always, except that it's usually used for
  performance, and with a lexical pragma can be used to enforce types.
  I like facist programming when it can help me, so I would like to
  see something like his proposal.
  
  no autocoerce;;
  my $y =3D 'blah';
  my Int $x =3D $y; # compile time type error
  
  This scheme is not perfect.. Maybe someone has an idea?
 
 I would prefur this to be written.
 
 use strict types;
 

I suspect there will be many ways to do types stricture/inference in
Perl6.  I expect that type modules will influence PIL generation so
that people will have to choose the structures they want at a given
place:

  use Types::some-type-sheme

or even

  use Types::Functional::some-sub-type-sheme

If such a typing mode gives us an haskell with some Perl6  concrete syntax
we eventually could port the whole Haskell environment as Perl6.
docs/notes/recursive_polymorphism_and_type_inference is a start in
that direction.

The best we can hope is that PIL generarion will eventually be written
in Perl6. I hope Perl6 will eventually become more expressive than Haskell for
handling type problems.  So Perl6 could become the playground of type
theory searchers.

I have a dream...  At any given place, be able to choose between the
power of functional programming or the convenience of imperative
programming. both  while keeping Perl6 nice syntax.

-- 
  cognominal stef


trait and properties thru getter/setters

2005-05-13 Thread Stéphane Payrard
There is syntax to define trait and properties
but is there an API?

  my $b = eval '$a but true'; # setting a true property
  # API to do it without an eval?

A trait setter probably does not make sense but for the
implementer because it should not be set at run time.

Incidentally, in a interactive environment it would be cool
to access the documentation of variables and functions using
properties. Say doc and udoc respectively for the full and
one line version.


-- 
  cognominal stef


Re: trait and properties thru getter/setters

2005-05-13 Thread Stéphane Payrard
On Fri, May 13, 2005 at 06:37:50PM +, [EMAIL PROTECTED] wrote:
 
 
  There is syntax to define trait and properties
  but is there an API?
  
my $b = eval '$a but true'; # setting a true property
# API to do it without an eval?
 I don't understand why you think you need the eval here?

My question is more generic than my example.
I may not know at compile time what is the value/trait name and its
value.

  
  A trait setter probably does not make sense but for the
  implementer because it should not be set at run time.
  
  Incidentally, in a interactive environment it would be cool
  to access the documentation of variables and functions using
  properties. Say doc and udoc respectively for the full and
  one line version.
  
 
 --
 Mark Biggar
-- 
  cognominal stef



Re: trait and properties thru getter/setters

2005-05-13 Thread Stéphane Payrard
On Fri, May 13, 2005 at 12:31:09PM -0700, Larry Wall wrote:
 On Fri, May 13, 2005 at 12:26:22PM -0700, Brent 'Dax' Royal-Gordon wrote:
 : Well, the value's pretty easy--just pass in a variable:
 : 
 : my $b = $a is foo($bar);
 
 As we currently have it, that is not legal syntax.  is may only
 be applied to declarations.  You must use does or but to mixin
 things at run-time (where this includes the compiler's run-time
 bits).

And what about the getter part of my question? :)

 
 Larry
 

-- 
  cognominal stef


Re: Blocks, continuations and eval()

2005-04-22 Thread Stéphane Payrard
Hi,

I am making a presentation about Perl6 this week end.  My point will
be: the next generation of applicative languages will be scripting
languages because they have come of age. 

Alternatives don't cut it anymore. Indeed C and C++ are memory
allocation nightmare; Java and C# don't have read-eval loop, a
necessary condition for rapid learning and development.  Functional
languages like haskell or ocaml are very powerful but needs massive
wetware reconfiguration to get used to the syntax and semantic.

So I will make do a presentation of Perl6 and Parrot features to make
my point about upcoming scripting languages.

I have a few questions inspired by my recently acquired  knowledge
about functional languages. Perl6 being the ultimate syncretist
language, I wonder if some functional features will make it
into Perl6. I know we already got currying.

A very nice feature of Haskell and *ml is the possibility to define
complex datastructures types and the control flow that manipulate
these structures: constructors and pattern matching.  With these
languages, in a very deep sense, control flow is pattern matching. Can
we expect Perl6 to propose something similar?

If yes, could be the matching part folded into the rule syntax?  Rules
are about identifying structures in parsed strings and acting
accordingly.  Partern matching is about identify typed structures and
acting accordingly. There is a similarity there.  Also we may want to
match both at the structural level and at the string level.  Or is
this asking too much of rules, that have already swallowed both lexing
and parsing.

The notion of data type become very useful in Perl6 for people who
want it.  In fact, Perl6 is a mix of dynamic and static types
(bindings).  I think type theory handles type inference in this kind
of langage with something called dependant type.  Though I have to go
thru ATTaPl to get it.

Perl, like many scripting language is very lax and, when needed,
converts implicitely values within expressions.  This is nice, but I
think that makes type inference impossible.  Type inference is good
because it allows to generate very efficient/strict code with very
little type annotations.

Can we expect in a distance feature a pragmatic mode convention to
control automatic type conversions if any and the type inference
scheme chosen when/if implemented?


-- 
  cognominal stef


Re: Blocks, continuations and eval()

2005-04-22 Thread Stéphane Payrard
On Fri, Apr 22, 2005 at 08:13:58PM +0200, Stéphane Payrard wrote:
 On Fri, Apr 22, 2005 at 09:32:55AM -0700, Larry Wall wrote:
 
 Thank you for your detailled answer. I still don't get what you mean 
 by   [] pattern matching arguments. 
 Do you mean smart pattern matching on composite values? 
 
  
  A lot of features are making it into Perl 6 that have historically been
  associated with functional programming.  Off the top of my head:
  ...
  [] pattern matching arguments

Thx to people on #perl6, I got it.  It is a form of pattern matching
on arguments. It is described in S06 in under the headers Unpacking
hash parameters, Unpacking array parameters.
  

 sub quicksort ([$pivot, [EMAIL PROTECTED], ?$reverse, ?$inplace) {
...
}

So if we mix that with typing, we will end with full fledged unification?

-- 
  cognominal stef


scoping functions as list operators?

2005-02-24 Thread Stéphane Payrard

Giving scoping functions the status of list operators
would allow to drop parentheses when not used in conjunction
with initializer so one could write:

  my $a, $b, $c;

instead of

  my ($a, $b, $c);

Most people use scoping functions as the top most function of the
corresponding statement AST so that should not bite unsuspecting
people.  Probably many more people that don't use stricture are
currently caught by the current convention that obliges to parenthesize
when multiple variables are declared.  In a sense, so many people have
been bitten by surprising precedence, that they cargo-cult parentheses
as the list operator.

In my detestation of gratuitous parenthesses, I would additionally
propose a low precedence assignement operator if I could find a good
sign for it.

my $a, $b, $c := 1..3 ;  # too bad := is already taken.
# set? I don't think so.
my $a, $b, $c   set  1..3 ;  # alphabetic like and, or, xor? 
  # and what precedence relative to them?


-- 
  stef





Re: scoping functions as list operators?

2005-02-24 Thread Stéphane Payrard
On Fri, Feb 25, 2005 at 03:56:06AM +0100, Stéphane Payrard wrote:
 
 Giving scoping functions the status of list operators
 would allow to drop parentheses when not used in conjunction
 with initializer so one could write:
 
   my $a, $b, $c;
 
 instead of
 
   my ($a, $b, $c);

Too bad that in English there is no plural for my.
In French it would work fine

  mon $a;   # French for Cmy, singular

# Cmes as a list operator
  mes $a, $b, $c;  # French for Cmy, plural

--
  stef


Re: How are types related to classes and roles?

2005-02-24 Thread Stéphane Payrard
On Thu, Feb 24, 2005 at 09:42:30AM -0800, Larry Wall wrote:

 
 Anyway, I don't profess to have thought deeply about type inferencing.
 But I do know that I don't want to turn Perl 6 into ML just yet...
 
 Larry
 

Speaking of ML, it appears to me that Perl6 rules are a mechanism that
can act very much like ML variant pattern matching. What I fail to see
in Perl6 is the equivalent of ML variant constructors.
Perhaps, you don't want to turn Perl 6 into ML just yet. :)
But if it comes for almost free...


--
 stef


Re: scoping functions as list operators?

2005-02-24 Thread Stéphane Payrard
On Thu, Feb 24, 2005 at 11:09:24PM -0500, Uri Guttman wrote:
  SP == Stéphane Payrard [EMAIL PROTECTED] writes:
 
   SP On Fri, Feb 25, 2005 at 03:56:06AM +0100, Stéphane Payrard wrote:

Giving scoping functions the status of list operators
would allow to drop parentheses when not used in conjunction
with initializer so one could write:

my $a, $b, $c;

instead of

my ($a, $b, $c);
 
   SP Too bad that in English there is no plural for my.
   SP In French it would work fine
 
   SP   mon $a;   # French for Cmy, singular
 
   SP # Cmes as a list operator
   SP   mes $a, $b, $c;  # French for Cmy, plural
 
 well, our is a form of a plural my but it is not a plural of the things
 that are mine/ours but rather the group owning it (which is the
 namespace). 
 
 so we can try: all, mine, these, those, them
 and the brooklynese variants: dese, dose, dem. :)
 southern variant: y'all or yall.
 maybe yall is expanded as yall mine!
 
 yall $a, $b, $c = 1 .. 3 ;
 
 larry?
 
 uri
 
 PS if this gets in, i will stop being so bigoted against southern accents! :)
 
 -- 

 

You have got to find a plural form for all the kind of scopes
supported by Perl. Ant that gets us half-way because of the =
assignement operator precedence which is wrong in your example.

--
 stef




slight discrepancy between S2 and S7

2004-12-06 Thread Stéphane Payrard
S2:

my $foo = 42;
say %MY::$foo;# prints 42

S6:

 Perl5ish subroutine declarations
 ...
 sub say { print qq{@_\n}; }   # args appear in @_


Because Cprint has no final newline, I would expect Csay will have
one.  Final newline or not. What is your say?


--
 stef


Re: Arglist I/O [Was: Angle quotes and pointy brackets]

2004-12-04 Thread Stéphane Payrard
On Fri, Dec 03, 2004 at 06:38:42PM -0800, Larry Wall wrote:
 On Fri, Dec 03, 2004 at 06:43:05PM +, Herbert Snorrason wrote:
 : This whole issue kind of makes me go 'ugh'. One of the things I like
 : best about Perl is the amazing simplicity of the  input construct.
 
 Hmm.
 
 while () {...}
 for .lines {...}
 
 Looks like a wash to me.
 

This is a neat win, keyboards favorise alphabetic characters that are
less excentred. Moreover, in some non qwerty layout, to make place for
diacritic characters, some non alphabetic characters are less
accessible,  shift or alt-gr is necessary to type them.

Having being used to qwerty keyboards, on a french keyboard, I switch
from azerty to qwerty to program in C or Perl because of their heavy
ratio nonalpha/alpha. But most programmers use their native keyboard
layout.

--
 stef





Re: This week's summary

2004-07-26 Thread Stéphane Payrard
On Mon, Jul 26, 2004 at 10:29:15AM -0700, Brent 'Dax' Royal-Gordon wrote:
 The Perl 6 Summarizer wrote:
   The infinite thread
 Pushing onto lazy lists continued to exercise the p6l crowd (or at
 least, a subset of it). Larry said that if someone wanted to hack
 surreal numbers into Perl 6.1 then that would be cool.
 
 Care to explain what those are, O great math teacher?

Disclaimer, I am no math theacher. :)
This is a very interesting class of number that can be used to
modelize games. It has designed by the _other_ Conway, the one of
game of life fame. The expression surreal number was coined by
Knuth.

For more info, the wikipedia is your friend: 
http://en.wikipedia.org/wiki/Surreal_number

For the full story, read the book Numbers and Games. I have
ordered it a few days ago so I can't comment on it.


 Brent Dax Royal-Gordon [EMAIL PROTECTED]

-- 
 stef 


Re: more than one modifier

2004-06-25 Thread Stéphane Payrard
On Fri, Jun 25, 2004 at 03:38:51PM +0200, [EMAIL PROTECTED] wrote:
 
 
Hello,
 
  I have a wish for Perl6. I think it would be nice to have the possibility
  for more than one modifier after a simple statement.
 
   For example:
 
print $a+$b if $a if $b for 1..3;
 
 
   Gerd Pokorra



There are two kind of modifiers, loop modifiers and simple test
modifiers. 

It is unpossible to stack loop modifiers without adding
conventions denoting the iterators. One could use as many
underscores as the depth of the iterator. Countins underscore
would not be a problem knowing that a depth of more than three is
probably pathologic. Note that this convention could go as well
for embedded normal loop without contextualizers.


  print $_ $__for 'a'.. 'b' for  1..2

would print

  1a 1b 2a 2b


Consecutive test modifiers can be replaced by a Cor or a
Cand, or better by a C|| or C because the alphabetic
version looks too much like a modifier.

But too much stacking of modifiers is probably not a good idea.
My own take would be to support at most two modifiers of
different kind per statement That is at most one loop modifier
and at most one simple test modifier per statement.

But, in previous mails, Larry ruled for at most one modifier.


-- 
 stef


Re: Periodic Table of the Operators

2004-05-27 Thread Stéphane Payrard
Le Thu, May 27, 2004 at 12:34:32AM +0200, le valeureux mongueur Gabriel Ebner a dit:
 Hello,
 
 Mark Lentczner wrote:
  http://www.ozonehouse.com/mark/blog/code/PeriodicTable.html
 
 What's periodic about it?

We hope it will be periodically updated. :)

 Otherwise, _nice_ table.

indee.d

 
 Gabriel.

--
 stef


idiom for filling a counting hash

2004-05-18 Thread Stéphane Payrard
I use over and over this idiom in perl5:

   $a{$_}++ for @a;

This is nice and perlish but it gets easily pretty boring
when dealing with many list/arrays and counting hashes.

I thought overloading the += operator

   %a += @a;

Probably that operator should be smart enough to be fed with
a mixed list of array and hashes as well:

  %a += ( @a, %h);  #  would mean %a += ( @a, keys %h)

I am not to sure how one can use hyperators, well I meant the
hyped hyperoperators, to juggle with lists and counting hashes.
One may want to feed multiple arrays to a single hash or one
array to multiple hashes. To add some salt to the problem
Multiple can translate to an array of :

   my @ary_of_h of Hash; @ary_of_h += @a;

Having real types in Perl6 will allow to slice, dice, splice data
in many nice ways. Damian can even spice that with junctions.
Fear. Fear.



--
  stef


Re: C style conditional statements

2004-05-12 Thread Stéphane Payrard
Le Wed, May 12, 2004 at 02:00:42AM +0200, le valeureux mongueur Pedro Larroy a dit:
 Hi
 
 Is there any chance that in perl6 there will be the possibility to write
 if/else statements without {}s with the condition at the beginning?
 
 Like 
 
 if (condition)
   statement;
 
 In order not to break traditional C culture. Is there any technical
 reason why it wasn't done in perl5? 

In Perl5, variable declaration are an executable statement. Also the
scope of a variable starts from its declaration and ends at the
end of the immediately enclosing block. Things would get
problematic if the branches of an if/else were not scoped.
What would be the meaning of :

if (condition)
   my $foo = 'bar';
else
   print $foo;

Now about  the syntax, it is not clear if the statement before
the 'else' can/must be semicolon terminated.

A similar example of stange meshing of scope and flow of control in
perl5 is:

   my $foo = $bar if $buz;

I can't even remember what it supposed to do when it is in a loop
where $bar and $buz change. And I would bet that the exact
semantic is not even documented in most books.

--
 stef


 
 Regards.
 
 -- 
 Pedro Larroy Tovar | Linux  Network consultant |  piotr%member.fsf.org 
 
 Software patents are a threat to innovation in Europe please check: 
   http://www.eurolinux.org/ 


Re: semantic and implementation of pairs

2004-04-13 Thread Stéphane Payrard
I have confused assignement and initialisation in my previous
mail. Because they are two different operations, there is no
problem they have different semantics. A6 described both
operations. It described pairs as arguments used to initialize
parameters and pairs in assignement.

--
  stef


semantic and implementation of pairs

2004-04-10 Thread Stéphane Payrard
My understanding of the semantic of pairs as in A6:
   A pair in a given scalar context should return its first element
   coerced to match the said context.

This seems to be a prerequisite to use pairs as function arguments.

Example with the boolean context:

   bool $b =  a = 10;  #  $b == 1

But what about CScalar, CRef and Cstring contexts?

I expect an object to return a reference to itself in Ref Context.
I have trouble to remember if assignation in Scalar context gives
a reference to the assigned object, or its size.
I expect that assigning a to string gets me a string that can
usually get evaluated to return a value equal to the the original
one.

In the three cases where I assume to have described the nornal
semantic, I don't get a behavior compatible with my
understanding of pairs used as arguments.

To solve that dilemma, can we just say that pairs used as arguments is
a special case.

Now let's talk about the implementation of perl pairs and lisp
pairs as a PMC, assuming pairs as arguments is a special case.

We need both the normal pair semantic and the one about arguments
as pairs. This mean that the argument as pair is implemented as
keyed PMC methods. I propose special methods to avoid that
overhead. They are the moral equivalent of the lisp car and cdr
in a language with context.

These methods would be:

  (get|set)_first_(integer|number|bool|pmc)
  (get|set)_second_(integer|number|bool|pmc)

Note that they can be used as optimization for array pmcs,

Now I run in a second problem that I have already touched on
perl6-internal. For storage optimization purposes, I want to
avoid as possible to use pmcs for pairs elements.

Say I set the key is an int (they can be in Perl6?), I want to avoid
to promote it to a PMC. But I must do it if one takes a reference
to that key. This happens if someone does a get_first_pmc()
or a get_second_pmc(). But sometimes one would just access a
pmc to clone it. This does not mean that a reference is really
taken and that there is no need to promote the element to a pmc.

So we need a clone_first() and a clone_second() to avoid
unecessary element promotion.

More generally, in pmcs that act as composite containers which
elements are not necessarily pmc, we need these cloning methods as well:

  PMC* clone_pmc_keyed(PMC* key)
  PMC* clone_pmc_keyed_int(INTVAL key)
  PMC* clone_pmc_keyed_str(STRING* key)

Comments?

--
 stef


Re: Traits: to renew OO inheritance in a hacker style discussion

2004-02-19 Thread Stéphane Payrard
On Thu, Feb 12, 2004 at 09:38:47AM -0800, Larry Wall wrote:
 Yes, that's a very good paper, which is why Perl 6 now has something
 called Roles, which are intended to degenerate either to Traits or
 Interfaces.  My take on it is that Roles' most important, er, role
 will be to abstract out the decision to compose or delegate.  But we'd
 like them to function as interfaces when the Role is abstract,
 and we'd like them to function as Traits when you don't happen to
 specify any state attributes.  But for hiding the delegation decision,
 you at least have to allow the amount of state that lets you remember
 the object you're delegating to.  Of course, the Traits paper didn't
 go into traits with state, though it did mention it as a future research
 topic.  We're just doing that future research for them.  :-)
 
 By the way, we distinguish Traits from traits (which are compile-time
 properties applied by is.  To apply a Role we use does.

In a sense, there is no such thing as state.

A read-only attribute is a role constituted of one getter method.
A write-only attribute is a role constituted of one setter
method. A read-write attribute is a role constituted of two
methods, one getter and one setter. A noread-nowrite attribute
could as well live in a parallel universe.

No attributes. It is turtles all the way down. :)

More seriously, the mere user of a class has no way to know if he
accesses a real attribute or a synthetic one. A synthetic
attribute being one that is calculated from real attributes or
whose modification affects other attributes. It may interesting
to provide syntax to declare the dependancies between attributes
even if there is no way to enforce them.

 
 Larry


splatting a reference

2003-12-13 Thread Stéphane Payrard
On Sat, Dec 13, 2003 at 12:12:59PM -0800, Larry Wall wrote:
 
 print $ref
 
 it doesn't do what you want, but
 
 print $ref.as(Array)
 
 might work a lot better, though of course
 
 print @$ref
 

What is supposed to do the splat operator in this context? My
understanding is that when an operator expects something and gets
a ref instead, the ref is dereferenced until the expected operand
is found. The interpretor barks otherwise.

So I expect 

  print *$ref

when $ref is ref to an array to be equivalent to

  print [EMAIL PROTECTED]

which in turn should behave like

  print @$ref

because Cprint splats its operands.

I don't pretend that Cprint *$ref is very readable, I just ask
what it does or if it is at all permitted.

--
  stef


Re: Vocabulary

2003-12-12 Thread Stéphane Payrard
 
 A role can also supply one or more attributes.
 
 : inheritance (and maybe some other stuff, too).  Used with Cdoes.

The smalltalk paper you mentionned which talked about roles (under
the name of traits) said that roles were stateless.

What are the consequences of using stateful roles?

A related question. Will getter and setter methods will have the
same name as the underlying accessed attributes?


--
 stef


enums and bitenums

2003-12-11 Thread Stéphane Payrard
Hi,

I don't remember anything about enums and bitenums in the
apocalypses. This is probably not very difficult to roll out
something using macros but I feel that should belong to the
standard language.


--
  stef


s/// in string context should return the string

2003-11-18 Thread Stéphane Payrard
 s/// in string context should return the string after substituion.
 It seems obvious to me but I mention it because I can't find it
 in the apocalypses.

--
  stef


Re: Next Apocalypse

2003-09-19 Thread Stéphane Payrard
On Thu, Sep 18, 2003 at 02:12:31PM -0700, chromatic wrote:
 On Thursday, September 18, 2003, at 12:33 PM, Gordon Henriksen wrote:
 
 Ah, shouldn't optimization be automatic? Much preferrable to provide
 opt-out optimizations instead of opt-in optimizations.
 
 No.  That's why I tend to opt-out of writing in C and opt-in to writing 
 Perl.
 
 Perl (all versions) and Parrot are built around the assumption that 
 just about anything can change at run-time. Optimizing the language for 
 the sake of optimization at the expense of programmer convenience 
 doesn't feel very Perlish to me.

With Perl6, few people will compile whole librairies but most
will load bytecode. At this late stage there is little place for
tunable optimization except JITting or it would defeat the
sharing of such code between different intances of Perl6. Nothing
will preclude to dynamically extend classes. I note that in Perl6
many optimizations were autoloading for deferring compilation of
material until it's really needed. With bytecode, it makes sense
(at least optimization-wise) that the programmer decides if his
classes will be sealed or some methods to be final because at the
user level it is too late to decide.

--
 stef


 
 -- c
 


Re: Perl and *ML

2003-03-26 Thread Stéphane Payrard
On Wed, Mar 26, 2003 at 05:40:56PM +0100, Robin Berjon wrote:
 Dan Sugalski wrote:
 At 4:47 PM +0100 3/26/03, Robin Berjon wrote:
 Fast and efficient graphs of all sorts would be very useful. A way to 
 define a complex graph of interlinked arbitrary objects while being 
 reasonable on memory and good with GC would be a definitive big win, 
 especially if it can be lazy. Especially with nice ways to write 
 visitors and easy searches in the graph based on object properties 
 (but I could be asking for too much ;).
 
 Probably a bit much, yep. :) I'd be happy with simple graph 
 representation, annotation, and traversal. And for my purposes a DAG is 
 sufficient. Loops are terribly annoying to have to deal with.
 
 Efficient annotation and traversal would go a long way, but almost all 
 useful XML representations have loops unfortunately.
 
 DAGs wouldn't enough though, most XML tree representations aren't 
 really trees, they're very cyclic. Some automata can treat a stream of 
 events as a B-Tree being visited, but those are rather rare currently.
 
 I was under the impression XML was very much a tree, and didn't do 
 loops. Am I missing something here? (I don't, in general, do XML)

By loop you mean attributes declared by DTD as IDREFs and pointing to
element having the same value for the attribut ID? Like in the example
pasted from XML in a nutshell?

project project_id=p1
  goalDevelop Strategic Plan/goal
  team_member person=ss078-05-1120/
  team_member person=ss987-65-4320/
/project
project project_id=p2
  goalDeploy Linux/goal
  team_member person=ss078-05-1120/
  team_member person=ss9876-12-3456/
/project
employee social_security_label=ss078-05-1120
  nameFred Smith/name
  assignment project_id=p1/
  assignment project_id=p2/
/employee
employee social_security_label=ss987-65-4320
  nameJill Jones/name
  assignment project_id=p1/
/employee
employee social_security_label=ss9876-12-3456
  nameSydney Lee/name
  assignment project_id=p2/
/employee

In a way IDREF are similar to symlinks? they cannot create real loops
because they are not followed by default by traversal tool juste like
find does not follow symlinks by default.

--
  stef

 
 Your impression isn't wrong, it's just that in actual use one needs more 
 information. If you lose the cycles then you could as well just be working 
 on stream of parse events (which is typical in SAX), in which case an 
 in-memory representation is probably not useful. And that's just for basic 
 stuff, if you want to usefully represent ID/IDREFs, QName linking, internal 
 XLinks, etc you're basically pointing from random nodes to other random 
 nodes.
 
 Given what you describe plus loops we could take over and do Really Cool 
 Stuff :)
 
 -- 
 Robin Berjon [EMAIL PROTECTED]
 Research Engineer, Expwayhttp://expway.fr/
 7FC0 6F5F D864 EFB8 08CE  8E74 58E6 D5DB 4889 2488
 


Re: File operators don't dwim

2003-02-12 Thread Stéphane Payrard
On Wed, Feb 12, 2003 at 09:17:22AM +0100, Stéphane Payrard wrote:
 On Tue, Feb 11, 2003 at 11:42:27PM -0800, Brent Dax wrote:
  Stéphane Payrard:
  # I was so sure that, in case of success, the file operators 
  # would return the filename that I wrote the following code to 
  # print where are the perl interpretors in the PATH. But, in 
  # case of success, fileops returns 1 not the filename.
  # 
  # local $, = '\n;
  # sub mapgrep (@)  { my ($fun, @args)=@_;   map {  {$fun}($_) 
  # } grep {   {$fun}($_) } @args }
  # print (mapgrep {  -x  $_/perl  } split /:/, $ENV{PATH}), \n;
  # 
  # Is there a reason why file operators don't dwim?
  
  So you don't have problems with a file name that isn't true, like 0?
 
 Indeed.
 Probably my proposition would make more sense in perl6 where the
 fileop could return 0 but true in such a case.
 May be, it has already proposed and my thought was just a
 remembrance.  :)

Hem, it would be more correct to say '0' but true.  Also my
proposition does (probably) make sense only for fileops that
originally returned a boolean value. Not so sure with these 'but's
that permit to smuggle alternate values of alternate types on the
side.



 
 [snipped]
 
 --
  stef



Re: File operators don't dwim

2003-02-12 Thread Stéphane Payrard
On Tue, Feb 11, 2003 at 11:42:27PM -0800, Brent Dax wrote:
 Stéphane Payrard:
 # I was so sure that, in case of success, the file operators 
 # would return the filename that I wrote the following code to 
 # print where are the perl interpretors in the PATH. But, in 
 # case of success, fileops returns 1 not the filename.
 # 
 # local $, = '\n;
 # sub mapgrep (@)  { my ($fun, @args)=@_;   map {  {$fun}($_) 
 # } grep {   {$fun}($_) } @args }
 # print (mapgrep {  -x  $_/perl  } split /:/, $ENV{PATH}), \n;
 # 
 # Is there a reason why file operators don't dwim?
 
 So you don't have problems with a file name that isn't true, like 0?

Indeed.
Probably my proposition would make more sense in perl6 where the
fileop could return 0 but true in such a case.
May be, it has already proposed and my thought was just a
remembrance.  :)

[snipped]

--
 stef



Re: Arrays vs. Lists

2003-02-07 Thread Stéphane Payrard
On Fri, Feb 07, 2003 at 02:30:47PM -0500, Mark J. Reed wrote:
 On 2003-02-07 at 14:26:42, Mark J. Reed wrote:
  Not really, though.  A list can be an lvalue, provided it is a list
  of lvalues:

Note that to avoid the burden of writing an explicit slice, 'undef' is
considered as a lvalue in such a context. I see no reason for that
behavior to change in perl6:

($a, undef, $b) = (1, 2, 3);  # equivalent to ($a,$b) = (1, 3)

Note this is only true of undef. You can't stick any literal in its splace.

($a,1,$b) = qw(1,2,3)
Can't modify constant item in list assignment at (eval 
5)[/usr/lib/perl5/5.8.0/perl5db.pl:17] line 2, at EOF

--
 stef



newline as statement terminator

2003-02-03 Thread Stéphane Payrard
In the tradition of Perl concision, I would like newline to be a
statement terminator everywhere it can: that is when 
   a) the parser expects an operator 
 _and_ b)  we are not in the middle of a parenthesised expression.

Accessorily, it would also help people to switch back and forth
between language that use newline as statement terminator and perl6:
they will not be burn anymore when forgetting a semicolon.

Semicolons are still allowed everywhere as statement terminator
because empty statements are.

So, In the common case, oneliner atomic statements, the proposed rule
means: you can drop the ending semicolon.

BTW: Atomic statement are statement composed of one expression only.
For composite multiline statements, see About the b) rule below.

Multiline atomic statements just have to be broken at the right
place to avoid to break them:

 a +
 b

is equivalent to

 a + b

But

 a
 + b

are two statements.

Note that in Perl5, semicolon is not always required as statement
terminator.  At the end of a scope, being a closing brace, or the end
of a program, including an explicit eval or an implicit one (perldb
shell).

Note that, for Perl 6,  Larry has already opened the path in his fourth apocalypse:

 $x = do {
...
} + 1;
 

is different from

 
$x = do {
...
}
+ 1;

I just want to make a rule of what Larry made a special case.

About the b) rule.
--

The following code does not parse because of the newlines that are
interpreted as statement terminator.

  for 
  1..10
  { ... }

But

  for (
1.. 10
  ) {
  } 

is legit.

Smart parser may allow to avoid these otherwise spurious parentheses


.. and make

  for 
  1..10
  { ... }

a legit expression following the rule what could have a meaning should.


The b) rule may not even be necessary with enough  parsing state.
The parser could have the following exclusive states:
  1) expecting an operator
  2) expecting an operand (newline is statement terminator)
  The expected operand is an expression that is part of an atomic statement
  deemed as atomic.
  3) expecting  an operand (newline is ignored)
  The expected operand is an expression that is directly part of
  a composite statement. (as opposed as part of an atomic
  statement part of a composite one).

What I mean by deemed as atomic? 

When parsing a composite statement, we don't know from the start that
it is so.  The following statement:

  $a if $b

is deemed atomic until the parse deals with the 'if' token.

My proposition could then be expressed informally:

  Newline is interpred as statement terminator when it makes sense.

It does not when :
  A) in the middle of an expression when an operand is expected
  B) within a parenthesised expression
  C) and other cases that would also cause the parsing to return an error

Note: The b/ rule was an undeeded attempt to force C/ into B/.

--
 stef





Re: newline as statement terminator

2003-02-03 Thread Stéphane Payrard
 
 Multiline atomic statements just have to be broken at the right
 place to avoid to break them:

Sorry about my English. Let me reformulate.

When folding an atomic statement, it becomes two statements or its
meaning is unchanged depending if an operand is expected or not at the
position of the folding.


 
  a +
  b
 
 is equivalent to
 
  a + b
 
 But
 
  a
  + b
 
 are two statements.
 

--
 stef



Re: newline as statement terminator

2003-02-03 Thread Stéphane Payrard
On Mon, Feb 03, 2003 at 06:11:23PM -0700, Luke Palmer wrote:

[snip]
 
 See, this is the main, unPerlish thing you're doing.  You're enforcing
 particular styles upon people, something Perl is proud of *not* doing.
 
 Let's not forget the often occurence of:
 
 $fh = open 'foobar'
 or die Can't open foobar: $!;
 
 An implicit semicolon would cause it to croak there

No, that case would not cause the inclusion of an implicit semicolon.

I certainly should have discussed such cases. But I have covered them
in the blanket statement C) and other cases that would also cause the
parsing to return an error because I am confident that the parser can
handle them.

What I said:

  My proposition could then be expressed informally:

Newline is interpred as statement terminator when it makes sense.

  It does not when :
A) in the middle of an expression when an operand is expected
B) within a parenthesised expression
C) and other cases that would also cause the parsing to return an error

 
 Also, s/or/$(any if unless for while when ...)/
 
 It would be trivial with a grammar munge to implement this (heck, I
 did it with a source filter in Perl 5).  Surely CPAN6 (6PAN/CP6AN/??)
 will come out with one of these right off the bat, so you could do:
 
 use Grammar::ImplicitSemicolon;
 
 Or something like that, and be done with it.

I am certainly confident that in perl6, everyone will be able to bake
his own grammar. I am also confident that the grammar will be good
enough that we will not have to do it in the general case

 
 Luke

--
 stef



Re: newline as statement terminator

2003-02-03 Thread Stéphane Payrard
On Mon, Feb 03, 2003 at 08:19:29PM -0500, Miko O'Sullivan wrote:
 On Tue, 4 Feb 2003, [iso-8859-1] Stéphane Payrard wrote:
 
  In the tradition of Perl concision, I would like newline to be a
  statement terminator everywhere it can: that is when
 a) the parser expects an operator
   _and_ b)  we are not in the middle of a parenthesised expression.
 
 
 I don't mean to be abrupt here, especially seeing as how this list has
 been so patient with some of my ideas but... PLEASE NO.  The rules you
 suggest for keeping track of when a semicolon is required sound more
 confusing than the simple rule of end of statement, put semicolon.  

As Luke Palmer said, in perl6, semicolon is a statement separator not a
statement terminator. So there is no such simple rule in Perl but you
are free to imposit it on yourself. Perl allows it but it does not
requires it.

 I like to break up my long statements in all sorts of arbitrary places, and
 adding the worries of when a newline might be significant puts a knot in
 my stomach just thinking about it (literally).
 
 

I agree that be obliged to check the next line to see if the newline
is or is not a statement terminator is not the nicest thing.
On the other hand, if the programmer is correctly indenting the program
it should stand out that the next line is part of the courant statement.


 print ---  # must read the next line to
  #  figure out if new line is statement terminator or not
   if $condition;


Here indentation is a mere clue but has no syntactic meaning.


[snip]

--
 stef



Re: arrays, hashes unified indexing syntax impact on future variation s on other collection types

2003-01-30 Thread Stéphane Payrard
On Thu, Jan 30, 2003 at 09:11:10AM -0800, Damian Conway wrote:
 What was the reason again which Larry rejected unifying the syntax for 
 array
 and hash indexing?
 
 Because some things have both, and do different things with each.
 And because some built-in redundancy is useful for error checking,
 especially on complex nested data structures.
 
 
 As Piers said, we know whether $a is an array or hash reference when we do:
 
 print $a-{foo};
 
 No we don't. Especially if $a is $0 (i.e. the result of a pattern match).
 See Exegesis 5 for details.
 
 
 Someone correct me when I go astray...
 
 See above. ;-)
 
 
 Damian

I like very much that a reference can point to an object that has
scalar, array and hash natures at once. With the current (non unified
syntax), we can very elegantly munge any kind of attributed tree: XML,
parsing tree...

In the case of XML. if the node is a leaf, the referenced entity would
be a regular scalar.  Otherwise, it would be the multifacetted object
of type (say) TagNd; the scalar would be the tag name, the hash would contain the
key/attribute pairs, the array would contain the sons if any.

Example: suppose that $t is the root node of such a tree obtained by parsing:

  a b=c
de/d
f
  /a

print $t{a} ;# prints c
print $t[0][1];  # prints f

This tree (simplified) deparsing would be done like that:

sub deparseNd($n) {
  return $$n if ref($n) ne 'TagNd'; # returns text of leaf node 
  return  $$n ~
   (join '', map  { qq|$_=$n{$_} |  } keys %$n) ~
  ~
(join '', deparseNd $_ for @$n) ~ # should I protect for the
   #  possible autoinstanciation of 
   # of the sons array @$n (when no son?)
   /$$n
}

print deparseNd($t);


Does it make any sense?
Someone correct me where I go astray... :)
Probably there is a more elegant way to concatenate all the chunks.

BTW: Can I write for $t instead of for @$t, same for keys $t?
Will Perl6 smart enough to autodereference when needed?

--
 stef



Ordering is not what distinguish array from associative tables

2003-01-29 Thread Stéphane Payrard
On Wed, Jan 29, 2003 at 09:44:27AM -0500, Aaron Sherman wrote:
 
 Yes, I would expect that. In my opinion there is no difference between
 an array and a hash other than the underlying storage and the
 type-management of the key. I'm increasingly of the opinion that a)
 there should be no @ vs %, there should be no {} vs [], there should be
 a keys, values, defined, delete, exists, push, pop, shift, unshift for
 every container and foreach shouldn't give a damn.

I think that arrays and associative tables are very different entities
for two reasons:
  -type of keys. array keys are integers
  -cost of insertion and deletion operations: O(n) and
   lower for associative table ( O(1) if you don't care for key ordering,
   O(log(n)) if you care for ordering). 

This is enough to warrant different syntaxes for arrays and hash.
This is one of the main things that attracted me to Perl, variable names ($a,
@a, %a) were a clear indication of behavior.

Perl6 should also support associative tables with ordered keys.
The default type of associative tables should be hashes.

# hash based associative table metonymically called  hash
my %assoctbl1; 

# tree based associative tables. 
properties should specify the tree algo used and possibly the ordering function.

my %assoctbl2 is redblack;
my %assoctbl3 is ordered( sortfun);

 
 But, that would be a different language, and Perl has hashes and arrays.
 So, the most we can do is make them not work too differently.
 

--
  stef



Re: right-to-left pipelines

2002-12-09 Thread Stéphane Payrard
On (09/12/02 06:00), Stéphane Payrard wrote:
 Date: Mon, 9 Dec 2002 06:00:40 +0100
 From: Stéphane Payrard [EMAIL PROTECTED]
 To: Damian Conway [EMAIL PROTECTED]
 Cc: [EMAIL PROTECTED] [EMAIL PROTECTED]
 Subject: right-to-left pipelines
 
 
 I would like perl6 to support left-to-right part/sort/grep pipelines.
 Left to right syntax is generally good because it facilitates the flow
 of reading.
 
 For these pipelines, the current right to left syntax is due to the emphasis
 on the operation over the data operated on, so the operator appears
 first. Nevertheless with a long pipeline, data is best factored out in a
 variable so having it first is not an impediment.
 
 Tentative syntax:
   ... is an left-associative operator that has the same precedence as .
 
   argexpr...listop indirop
 
 would be equivalent to
 
   listop indirop  argexpr


I am wrong about the precedence, the operator should just looser than
list operator and certainly looser than comma to avoid to use
parentheses around argexpr

(argexpr)...listop indirop #  parenthese necessary if ... too tight

 
 
 example:
 
 @data = [ very_long_data_expression ]
 (@foo, @bar) := @data...grep { $_  0 }...sort { $^b = $^a }...part [/foo/, /bar/];
 

To go left to right all the way, we could have:

  @data...grep { $_ 0   } ...sort...@result

Or even

  @data...grep { $_ 0   } [EMAIL PROTECTED]@result2 ... grep { % 2}... @result3;



--
  stef



Re: ( .... ) vs { .... }

2002-09-23 Thread Stéphane Payrard

On (22/09/02 10:37), Me wrote:
 From: Me [EMAIL PROTECTED]
 To: [EMAIL PROTECTED]
 Subject: (  ) vs {  }
 Date: Sun, 22 Sep 2002 10:37:59 -0500
 
 In several forms of courier, and some other text fonts
 I view code in, I find it hard to visually distinguish the
 pattern element:
 
 ( ... )
 
 from:
 
 { ... }
 
 What about replacing the former syntax with:
 
 ? ... 
 

If you can't distinguish braces and parentheses (or quotes and
backquotes in some other fonts), you are in deep trouble in many
languages including perl5 BTW. Languages should not bend themselves
(like with trigraph in C) for such particular cases.  We have a
paucity of characters to start with, so don't add more constraints.
Good enough fonts are availaible anyway.



 
 --
 ralph



Re: dLoo releases peer-to-peer programming language

2001-07-11 Thread stéphane Payrard


- Original Message -
From: Dan Sugalski [EMAIL PROTECTED]
To: Nathan Torkington [EMAIL PROTECTED]; [EMAIL PROTECTED]
Cc: [EMAIL PROTECTED]
Sent: Wednesday, July 11, 2001 6:59 PM
Subject: Re: dLoo releases peer-to-peer programming language


 At 10:16 AM 7/11/2001 -0600, Nathan Torkington wrote:
 nile writes, Today, dLoo released the complete architecture of an
 extensible peer-to-peer programming language.

 And I thought NFS was the security hole from hell...

 Unless there's a lot of very clever (research-level, Hi we're from IBM's
 Watson Labs, would you like a very highly-paid job level) stuff going on
 under the hood that is completely and totally glossed over in all the PR
 gook, this system is slightly less secure than putting your IP address and
 root password in big letters in a 30-second Superbowl commercial.

 (Though I may be wrong--it's possible I'm underestimating the danger)


We must  learn from java that initially failed to be sold  as the language
for embedded devices and was integrated
as a browser (and in a browser) as an afterthought with an incredible success.
But security was built-in from the start because
these embedded devices were intended to be connected possibly on an insecure network: 
Internet.
The lesson to be drawn is consistent with Dan sayings: it is  an excellent way to 
spread a product as a browser or better as a
plug-in  but the security model must be thought ab initio. Sun and Gosling have learnt 
that, among many other things,
with their unsuccessful and long-defunct  Network extensible Windows system: NeWS.
Absence of security model is  alsso probably the reason  why perl did not trhive
in this biotop (the browsers themselves , not the servers who feeded the browsers).
The module Safe is nice though but that is an afterthought . As a result it could not 
be made  totally secure.

--
  stef


 Dan

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





Re: dLoo releases peer-to-peer programming language

2001-07-11 Thread stéphane Payrard


- Original Message -
From: Cameron Laird [EMAIL PROTECTED]
To: [EMAIL PROTECTED]; [EMAIL PROTECTED]; [EMAIL PROTECTED]; 
[EMAIL PROTECTED]
Cc: [EMAIL PROTECTED]
Sent: Wednesday, July 11, 2001 8:43 PM
Subject: Re: dLoo releases peer-to-peer programming language


  From [EMAIL PROTECTED]  Wed Jul 
11 13:35:23 2001
  .
  .
  .
  The lesson to be drawn is consistent with Dan sayings: it is  an excellent way to 
spread a product as a browser or better as a
  plug-in  but the security model must be thought ab initio. Sun and Gosling have 
learnt that, among many other things,
  with their unsuccessful and long-defunct  Network extensible Windows system: NeWS.
  Absence of security model is  alsso probably the reason  why perl did not trhive
  in this biotop (the browsers themselves , not the servers who feeded the browsers).
  The module Safe is nice though but that is an afterthought . As a result it could 
not be made  totally secure.
  .
  .
  .
 Maybe.

 In '94-95, Perl was painful to embed; moreover, it lacked
 a popular way to construct dancing bears, which seemed
 to be at the heart of the first hundred thousand client-
 side Java demonstrations.

 At this point, I'm unconvinced that anything that happened
 during the Era of Browser Wars had to do with a sophisti-
 cated appreciation of security, by anyone, in any direction.

I agree that dancing bears was what made java a success in a
then dull browser world but its long-lasting success well beyond the
browser biotop is due in great part to its security model.
Pursuing my biologic metaphor spreading is necessary, but it is not enough.
A security model for a software entity  in the promiscuous Internet world is akin to 
an healthy immune system for a biological
organism.

--
  stef