Greetings,

I am pleased to announce that version 0.138.0 of the specification of the Muldis
D language, for object-relational databases, has been released on CPAN.

  http://search.cpan.org/dist/Muldis-D/

This release features a rewrite of the PTMD_STD operator precedence table, where
it now has 10 levels instead of 7.  The table is reproduced in this email for
your convenience.

The late-July email thread "RFC: operator precedence table" presented several
earlier versions of this table.  The released one is essentially the same as the
last presented one except that I consolidated 9 levels into the 2 "Generic
Infix" and "Logical Infix".

While this table could still use some work in order to conform better to users'
expectations, such as splitting said 2 levels up again, it is still a huge step
forward from the state of release 0.137.0, and it should be easy to learn.  I
also note that there is some precedent, such as that Postgres puts the majority
of its generic operators into the same precedence level, I think.

    Level            | Assoc | Examples
    -----------------+-------+---------------------------------------------
    Terms            | N/A   | Inf True Order:Same Down 42 3.14 -5/7 3*2^8
                     |       | F;'27E04' 'eek' foo "x" #`comment!`#
                     |       | {43,9,5} [1,2,3] {'Carrots'=>42} {11..20}
                     |       | $:{...} %:{...} @:{...} nlx.lib.MyType
                     |       | (1+2) myfunc(...) <Int> nlx.data.quux .age
    -----------------+-------+---------------------------------------------
    Postfix          | N/A   | func().attr p.{...} r{...} x.[...] y[...]
                     |       | ++ -- i! log-e
    -----------------+-------+---------------------------------------------
    Generic Prefix   | N/A   | || # #+ % @ e**
    Generic Infix    | left  | assuming
                     |       | ^ exp ** log
                     |       | * / div mod intersect join times divideby
                     |       | where !where matching !matching compose
                     |       | intersect+
                     |       | + - |-| ~ ~# union exclude minus
                     |       | union+ union++ minus+ round
                     |       | as asserting min max //
    -----------------+-------+---------------------------------------------
    Comparison       | left  | <=> = != < > <= >= isa !isa like !like
                     |       | inside !inside holds !holds in !in has !has
                     |       | {<=} {!<=} {>=} {!>=} {<} {!<} {>} {!>}
                     |       | {<=}+ {!<=}+ {>=}+ {!>=}+ {<}+ {!<}+ {>}+ {!>}+
    -----------------+-------+---------------------------------------------
    Logical Prefix   | N/A   | not ! ¬
    Logical Infix    | left  | and ∧ [<=>]
                     |       | or ∨ xor ⊻ ↮
                     |       | imp → nimp ↛ if ← nif ↚ nand ⊼ ↑ nor ⊽ ↓
                     |       | xnor ↔
    -----------------+-------+---------------------------------------------
    Shorting Infix   | right | ??!! if-else-expr given-when-def-expr
    Binding Infix    | right | ::=
    -----------------+-------+---------------------------------------------
    Assignment       | non   | := :=++ :=-- :=foo

I am actually satisfied with this arrangement, and so will put off any attempts
to split levels until after I've made some other language changes, such as those
concerning parameter aliases or meta-operators.

Good day. -- Darren Duncan

_______________________________________________
muldis-db-users mailing list
muldis-db-users@mm.darrenduncan.net
http://mm.darrenduncan.net/mailman/listinfo/muldis-db-users

Reply via email to