I am pleased to announce the release of Muldis::DB version 0.0.0 for
Perl 5 on CPAN. You can see it now, with nicely HTMLized
This is the first formal release of Muldis::DB, which began
development last year (under the temporary name of "QDRDBMS") as a
rewrite of my previously released but never functional "Rosetta"
Muldis::DB is implemented as a library or open-ended framework for
use by larger frameworks or applications, and is a DBMS resource to
them. This project comes in twin Perl 5 and Perl 6 versions which
are feature identical; the former is for use in today's systems, and
the latter is for longer term use; if there is a case for doing so,
some parts may be moved to other languages later such as C.
The equivalent Perl 6 version of Muldis::DB to the CPAN release is
bundled with the "Pugs" ( http://www.pugscode.org/ ) implementation
of Perl 6, and its release to CPAN follows Pugs' schedule.
Meanwhile, you can see it in the ext/Muldis-DB/ sub-directory of
Pugs' version control.
With both initial versions, Muldis::DB has zero external dependencies
but for Perl/Pugs itself and what is bundled with it; this should
If you want to read all the Muldis::DB documentation that exists now,
I recommend doing so in this order:
2. (opt) http://search.cpan.org/src/DUNCAND/Muldis-DB-0.0.0/Changes
4. (opt) http://search.cpan.org/dist/Muldis-DB/lib/Muldis/DB/Copying.pod
7. (opt) http://search.cpan.org/dist/Muldis-DB/lib/Muldis/DB/Validator.pm
10. (opt) http://search.cpan.org/src/DUNCAND/Muldis-DB-0.0.0/TODO
11. (opt) anything else
The "README" file above includes the urls of the public version
control systems that host the development of Muldis::DB. The Perl 5
version is hosted in a public GIT repository hosted by Sam "Mugwump"
Vilain, for which I am thankful. The Perl 6 version is hosted in the
same public Subversion repository as Pugs.
Muldis::DB defines and implements a computationally complete
programming language with integrated relational database
functionality. It is an open-ended framework with a separate
programmatic API and pluggable implementing engines, one of which is
bundled with the core so it works out of the box. The framework is
intentionally similar to the DBI framework in organization.
Muldis::DB implements a D language (named "Muldis D") as defined by
Hugh Darwen and Chris Date, and presents a superior interface for
working with the relational model of data, contrasted with SQL.
Anyone familiar with SQL or the relational model, or just programming
in general, should find it easy to learn.
One general strength of Muldis D (truly relational) over SQL
(quasi-relational) is that there is next to no object-relational
impedence mismatch since the true relational model can natively
represent user-defined complex data type structures, constraints, and
operators; there is no need for "object-relational mappers", except
for their role in tighter host language integration.
Another general strength of Muldis D is that any arbitrary business
rules can be cleanly expressed as constraints on a database, so it is
easier to trust a database to ensure its data state or transitions
are always conformant to business rules, without hoisting such
integrity matters to the application, where it is a lot more
difficult to do it reliably.
Since a D language can represent anything, a SQL database and/or SQL
features can also be emulated over one, which helps with legacy
migration; similarly, as much as is possible, existing SQL engines
can be used to implement Muldis DB over top of, in which case Muldis
DB acts as a SQL generator to access pre-existing databases in new
Conceptually speaking, Muldis::DB is either a replacement for DBI, or
a replacement for any SQL DBMS itself, depending on how you use it;
out of the box it replaces both, but plug-in bridges can be made that
bridge to either.
Taking the Perl 6 development process as a model, Muldis D has an
authoritative human-readable design document (the Language.pod file),
which is analagous to the Perl 6 Synopsis documents, and one or more
separate conforming implementations (the other files). It is very
feasible that Muldis D could have multiple implementations, over any
languages, besides the 2 (Perl 5 and Perl 6) that exist now.
More information is in the Muldis::DB documentation.
I would probably like to say that Muldis::DB would be a panacea to
all your database ills, but instead I see it more like Muldis::DB
should provide a more solid skeleton on which to build the solutions
to all your database ills than are any other solutions. I will
contribute to the solutions as best I can.
Several public email-based forums for Muldis::DB now exist (with
public archives), all of which you can reach via
http://mm.DarrenDuncan.net/mailman/listinfo (note that Mailman's
monthly password reminder email is turned off). There are currently
3, for 'announce', 'devel', 'users', modelled after the main lists
I invite you to join one or more of these lists (if you haven't
already), to better facilitate discussion, support, and group
As of this version-zero release, Muldis-DB is officially in pre-alpha
development status. A lot of documentation and functionality is
present, but a lot isn't. What is mostly done is the higher level
documentation plus an alpha-quality but fundamentally stable public
API implementation. What is mostly undone is the reference engine
implementation, the test suite, and documentation of the API details.
What is already present should be sufficient to begin study of
Muldis-DB such that it can actually be put to use within the next few
weeks or months as Muldis-DB is fleshed out. Also, it should be
possible now to start writing code that uses or extends it.
To conclude, I would be very greatful for any and all kinds of
assistence with the Muldis::DB framework that you can provide, which
includes building or sponsoring features and extensions.
Probably the very first kind of help that I could use the most is
with writing cookbook-type examples of using Muldis::DB and/or FAQ
documents. This both helps people learn how to use it in an
effective manner, and also helps flesh out deficiencies in
Muldis::DB. Both the "how do I define this kind of database" variety
and "how do I express this SQL in Muldis D" variety are helpful.
These examples would be released as a Muldis::DB::Cookbook
I also welcome general feedback, constructive criticism, suggestions,
corrections, and questions.
Note that I prefer any responses to happen on-list, or that you sign
up to and post to a muldis-db list (only list subscribers may post),
so that that and any replies can be for the group's benefit, and to
save me from repeating the same answers ad nauseum. Unless the
response is not suitable for public discourse, in which case, sure,
go private email; ditto if you're not sure about appropriateness.
Thank you in advance.
-- Darren Duncan