On Sat, Feb 12, 2005 at 03:16:20PM +0800, Autrijus Tang wrote: > the toplevel sequencing only handles "IO of ..." types, so the junction > above will not print anything. Instead it may raise a warning of "using a > Junction in a void context", or something equally ominous.
Thinking about it, that warnings should be "Using a Junction in Action
context". The "Action" name is better because "IO" is already used for
handles. I'll try to list some notable deviations here:
* A new type, "Action", that represents actions that must be
sequenced in order and may have side effects.
* The default context for toplevel program is now "Action of List"
(or "Action of Any"). Each semicolon-separated statement in it
are evaluated in that context as well.
* Change the destructive assignment ("=") operator, so the lvalue
context (say "Scalar") may match a corresponding rvalue context
(i.e. "Action of Scalar"):
multi sub print ([EMAIL PROTECTED]) returns Action of Bool { ... }
$a = print(3); # $a.isa(Bool) -- launch the action
$b := print(3); # $b.isa(Action of Bool) -- not launched
* Similarily, containers of Action objects won't launch them:
# This prints nothing
@b := [print(1), print(2), print(3)];
* However, destructive assignment under "List of Action" context
launches them in a sequence:
# This prints 123
@b = [print(1), print(2), print(3)];
I reckon that this treatment is fairly drastic. However, if one writes
perl6 program under the perl5-like imperative subset (i.e. always use
destructive assignment), then all user-defined functions will be
evaluated under the Action context by default, so syntactic differences
may still be minimized.
As I'm not planning to implement it until I finish the OO parts, I'd
appreciate feedbacks on this idea.
Thanks,
/Autrijus/
pgpS6AVnfoW3C.pgp
Description: PGP signature
