I'm re-working my "Periodic Table of the Operators" chart to be up-to- date. I did the first major pass based on S03-operators. However, the last few days I've been plowing through STD.pm and have discovered that there some differences. Since STD.pm is considered more up to date, I'll be changing the chart to match that. However, I thought it would be useful to share the detailed list of differences I found. Besides, there are some embedded questions in there, I'd love to have answered.

Thanks,
        - Mark


STD.pm:             r24855 | lwall | 2009-01-10
S03-operators.pod   r24895 | lwall | 2009-01-13

== Associativity ==

Prefix and postfix precedence levels have no associativity in STD, but are left (mostly) or right in S03. Levels affected are:
    %methodcall
    %autoincrement
    %symbolic_unary
    %named_unary
    %loose_unary
    %list_prefix

Some levels have left associativity in STD, but are list in S03. Levels affected:
    %concatenation
    %tight_and
    %tight_or
    %loose_and
    %loose_or
Oddly, sym<^^> ( --> Tight_or) is forced to :assoc<list> in STD.
?? Even though for most of these operators there is no computational difference between left and list assoc, list seems more "in the spirit" to me. I plan on leaving them listed as 'list' assoc in the chart unless there is a reason to make them left.

Conditional level is right in STD, and left in S03.


== Added ==

STD has a new Methodcall operator construction:
    token privop ( --> Methodcall) {
        '!' <methodop>
    }
?? What is this?

STD has postfix:sym<i>.  I understand this is the imaginary operator.

STD has infix:sym<.=>. I understand this to be the method call assigning form when there is space after the operator.
?? Is this right?

STD has <==, ==>, <<==, and ==>> as true operators. S03 groups them as terminators.

STD has sym<;> as both an infix operator ( --> Sequencer), and as a terminator. ?? Which is it? Since I think most people think of it as a statement terminator, I plan on leaving it off the chart.


== Removed ==

STD is missing sym<\\> at Symbolic_unary level.
?? Did capture cease to be an operator?

STD is missing sym<mod> at Multiplicative level.
?? I'm assuming this is just an oversight.


== Misc ==

The ff and fff family are at %nonchaining precedence in STD, but at %conditional precedence in S03.

STD has infix:sym<andthen> and infix:sym<orelse> each declared as tokens twice. I'm assuming this is just some accidental duplication.

At Loose_unary, STD has <colonpair> which seems more general than the operator adverbs discussed in S03 at Loose unary precedence.

The infix:sym<:> invocant marker is at Comma precedence in STD, but List prefix in S03. It is also left assoc. in STD, but right in S03.

The sigils used as operators at List_prefix in STD include sym<&>. It isn't listed in S03. ?? Should it be included as an operator, or is it senseless as an operator?

S03 lists the a number of named listops:
    all one any none die warn fail item list slice hash
These aren't coded expressly in STD, presumably as they are all handled by the generic named listop code. ?? Is there any reason to call them out in a list of operators as S03 does? Or is it just that these named listops happen to be the same as existing symbolic ones and are worth pointing out.

The named listops seem to be handled in STD by
    token term:identifier ( --> Term )
But this is at Term precendence, not List_prefix.
?? Did these move?

The ! metaop in STD requires that the op be either chaining or have an associativity (any) and be :bool. But %chaining is the only set of operators that has :bool... ?? Is this just "belt and suspenders" checking, or can that meta op apply to more?



----
Mark Lentczner
http://www.ozonehouse.com/mark/
m...@glyphic.com



Reply via email to