On Mon, Aug 29, 2005 at 15:12:44 +0200, TSa wrote: > HaloO, > > Yuval Kogman wrote: > >On Mon, Aug 29, 2005 at 13:12:37 +0200, TSa wrote: > >>Sorry, I believe everything is an operator---or actually operators > >>are Code subtypes with syntactic sugar. But some operators are usually > >>not dispatched because the type system manages to produce the same > >>effect as a real dispatch. But that is an implementation issue. > >>Conceptually I like to define the semantics of Perl6 in terms of type > >>and dispatch. > >I thought so too, but then i was informed that both assignment and > >method call dispatch are not operators. > > Not even conceptually? That means the wonderfully obvious and intuitive > strings '=' and ':=' are blocked for plain users unless they mess with > the grammar and re-compile the part of CPAN that is of interest to them > with this modified version? What a maintenance nightmare!
Yup =(
I would much rather = was something like this:
# := in terms of = is just assignment on the container
multi sub &*infix:<:=> ($lvalue is rw, $rvalue) {
variable($lvalue) = variable($rvalue);
}
# ::= is a macro, btw
# this is the generic assignment
multi sub &*infix:<=> ($lvalue is rw, $rvalue) {
variable($lvalue).setValue($rvalue) # for the variable()
# call see s12 right before "Submethods"
}
# this is nice for the various container types:
multi sub &*infix:<=> (@lvalue is rw, @rvalue) {
@lvalue.elems($rvalue.elems); # allocate right amount of
containers
for @lvalue Y @rvalue -> $l is rw, $r {
$l = $r;
}
}
# this is also nice for optimization... this example is a bit
# overly verbose, I guess but it demonstrates the point:
multi sub &*infix:<=> (Int $lvalue is rw, Int $rvalue) {
my int $value = $rvalue.unboxed_value; # notice that's 'int'
and not Int
$lvalue.replace_unboxed_value($value);
}
Maybe 'is rw' is enough for enforcing true lvalue context, but that
is just a context modifier, i guess.
As for method invoaction - i do like the special case. In effect the
.foo
part is parsed as a postfix operator.
It makes some sense to think of it as a macro:
<epxr>
\s*
\.<bareword>
(
\(
<expr>+
\)
)?
is converted into
apply(<expr>, <bareword>, <params>)
but this doesn't have any elegance, IMHO.
--
() Yuval Kogman <[EMAIL PROTECTED]> 0xEBD27418 perl hacker &
/\ kung foo master: /me kicks %s on the nose: neeyah!!!!!!!!!!!!!!!!!
pgpGU4I2wiBjC.pgp
Description: PGP signature
