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