Greetings, I am pleased to announce that version 0.137.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/ Between this release and release 0.136.0 (not separately announced), there have been the following main improvements since release 0.135.0: 0. In general, these releases feature a cleanup/consolidation of the operators for testing the membership of values in collections, or of tuples in relations, and a simplification of the basic order-comparison ops. They also feature improvements to the handling of comments and whitespace, and the addition of bag function syntaxes. 1. Updated each of the 11 basic order-comparison functions "is_[before|after][|_or_same]", "min", "max", "minmax", "Interval.[has|value_is]_[|not_]member" to remove its optional "func" parameter; so now each of the 11 just has 2 or N mandatory inputs, and the declared type of those is now "Ordered" rather than "Universal". These 11 functions now unconditionally wrap the virtual "sys.std.Core.Ordered.order" function rather than wrapping an order-determination function given as an argument (or said virtual by default). This change results in a simplification for 99% of likely use cases; for the remaining 1% which the 11 funcs have dropped support for, users can write their own equivalents of the 11 easily enough. Also updated the concrete grammar and examples of the infix special syntax of the above 11 functions to reflect their just being plain dyadic or commutative infix ops without optional parts now, and likewise consolidated their definitions. 2. Renamed all 10 variants of all 4 dyadic infix operators for testing the membership of a generic tuple in a generic relation. With the 4 Unicode variants, replaced any "r" with "@"; with the 6 ASCII variants, renamed any "*in-r" to "*inside" and any "r-*has" to "*holds". For examples, "Relation.has_member" is now spelled "holds" or "@∋" rather than "r-has" or "r∋", and "tuple_is_member" is "inside" or "∈@", not "in-r" or "∈r". 3. In Types.pod, added new mixin type "Collective" that is intended to be explicitly composed by other types that are effectively simple homogeneous collections of values, and something more specific than relations in general. Also updated the 5 types "Set", "Array", "Bag", "[S|M]PInterval" to compose "Collective". 4. Added new initially empty file lib/Muldis/D/Core/Collective.pod, with an initial complement of 4 new virtual functions "[has|value_is]_[|not_]member". Then in each of [Set.pod, Bag.pod, Interval.pod], updated the 4 same-named functions so that they explicitly implement the same-named new virtuals. In Interval.pod, added 4 more functions, MPInterval analogies to the existing 4 SPInterval ones. In Array.pod, added 2 related functions. And so now each of the 4 new virtual functions is implemented by 5 type-specific functions. 5. In PTMD_STD.pod et al, for each of the 4 functions "[has|value_is]_[|not_]member", merged the triples of set|bag|interval-specific spellings of its dyadic infix syntax into a single spelling that works for all 3 types; the dyadic infix syntax will now invoke the 4 virtual funcs rather than their 12 implementers. For example, we used to have "in-s","in-b","in-i" and now we have "in"; or, we used to have "s∌","b∌","i∌" and now we have "∌". 6. Renamed the prefix operator for set/array/relation cardinality to "#" from "r#". 7. Added function invocation alternate syntax expressions for 13 "Bag" functions. For the 12 of these that have the same unqualified names as "Relation" (Set) funcs, the former use the latter's alternate syntax but with a "+" suffix. These 12 are "cardinality" (#+), "union" (∪+), "intersection" (∩+), "diff" (∖+) and the 8 sub/superset operators. The 13th Bag func is "union_sum" (∪++). The existing ops aren't overloaded because Bag isa subtype of Relation. 8. In PTMD_STD.pod, updated the semantics of parsing string literals having literal non-SPACE whitespace chars so that they are more flexible or DWIMmy. Previously, non-SPACE whitespace was disallowed from appearing literally in strings except as a "splitter" token, where it was delimited by a backslash pair which told the parser to ignore/strip said whitespace. Now, any characters are allowed literally in strings and all non-SPACE whitespace is automatically either ignored/stripped or substituted for SPACEs by the parser. To actually select such whitespace as part of the string, it now has to be encoded as an escape sequence such as "\n". And so, now it is easier to write block-size strings or comments as one no longer needs some kind of delim per each line, not even a backslash/splitter. Now non-SPACE whitespace plus adjoining runs of spaces are now replaced with a single space, or if escaped ws precedes said literal ws, then the ws+space runs are just stripped instead. The new behaviour should make the selected string values invariant with both the code's linebreak chars and with the code's indenting style, while saving useful formatting. 9. In PTMD_STD.pod, reformatted non-value-comment literals so that they are now delimited by both backticks and number signs, the former nested in the latter, rather than just number signs; for example " #`This is a non-value comment.`# "; the as-value-comment literals have not changed; for example " `This is an as-value comment.` ". The first consequence of this is that the standalone number sign can now be more easily freed up to be used for things other than comments, including by itself as an operator. The second consequence of this is that all comments are now delimited by backticks, rather than some just by backticks and others just by num signs. Also more comments changes. 10. In PTMD_STD.pod, updated the grammar to explicitly include support for embedding non-value comments anywhere that whitespace may appear that is outside of a scalar value lit; the "<ws>" token now includes them. Previously, the non-value comments were defined but not actually invoked anywhere by the main grammar. Details subject to be refined. 11. In PTMD_STD.pod, updated all the simple monadic prefix operators that are symbolic (all but 'not') so that whitespace between each operator and its argument is now optional. So, for examples, you can now say "!is_foo" or "#people" or "%relvar" and not have to be "# people"/etc. This change is a stopgap measure and later a more generic solution should be found for making whitespace optional around operators. And so, this release addresses the last of the most glaring TODO items, which is consolidating the syntax for testing the membership of values in collections, or of tuples in relations. Prior to this fix was a situation almost as awkward as needing separate math op syntax for integers and rationals. And so, I have now defined and used all of the system-defined mixin types that I anticipated for the short term: Ordered, Ordinal, Numeric, Stringy, Attributive, Collective, Instant, Duration. Good day. -- Darren Duncan _______________________________________________ muldis-db-users mailing list muldis-db-users@mm.darrenduncan.net http://mm.darrenduncan.net/mailman/listinfo/muldis-db-users