Archived
News2007-0329:I have eliminated my "corrections" to the Mercury
extrasxml library (I had an outdated version of the library as outlined in the 2007-03-18 news post, so my corrections were redundant the the Mercury team's). At the same time, I have moved my XML enhancements into theutilslibrary and promoted thedoug_graphmodule from alpha; it is now also included inutils.18:A new library and several improvements can be found in the shared repository:
The
xmllibrary provided in the Mercuryextrasdistribution is out-of-date; it no longer compiles. I have fixed the compile errors and added several modules (to assist in XML transformations and pretty-printing) and tests.Update 2007-03-28:I was in error in the above item: my copy of the xml library provided by the Mercury team was out of date; the version supplied with the
extrasdistribution by the Mercury team is working correctly.This means my fixes to the xml library are redundant, so I withdraw them. The extended functionality, however, I do continue to find (very) useful, so I am moving these enhancements as an xml library under the
utilsumbrella.Several improvements are available for
qcheck2:
I have modified the
qcheck2library so that it now uses the RNG protocol as proposed in the Mercury users' maillist. I have also modified the reporting feature to accept a polymorphic type for module.predicate unit tests ... this improvement 'upgrades'qcheck2to be an independent library (qcheckwas also an independent library).The program
qcptthat generates the module.predicate test points for a system has also been updated to use the newqcheck2reporting protocol.qcptis bundled withltq.I have entirely changed the
utilslibrary:
Although useful for a small number of repetitions, the
peanomodule becomes unweildly for large cycles (1,000,000 is represented as 1,000,001 cons cells!). So, I have discarded it in favor of a slightly more sophisticated counting algorithm (where 1,000,000 is represented by 7 cons cells) in theutils.seriesmodule that now also includes loop abstraction withfunc unfold/3andpred svunfold/6(the latter being used when one must also update a dependent state variable).Julian Fondrant on the Mercury Users maillist proposed a RNG typeclass and protocol, and published a module implementation using the tausworthe3 algorithm. I have incorporated this module (as
utils.random) with a simplified façade and other minor corrections.2007-0214:
The dynamic syntax compiler
ltq("Logical Types Quicksilver") andqcpt(the QuickCheck type generator) have been modified to work with the new structure of Melbourn's Mercuryopsmodule. The new system has been updated and is available in our shared repository.The
qcheck2library has been updated to work with the currentltq; it includes two sample modules with different reportage options. It can be found in the shared repository.The
peanomodule has received some new counting functions to simplify the user's task of constructing small peano numbers.02:We present a very tiny foreign interface to libtiff. The module
tiffanyallows reading and writing simple RGBA TIFFs with two-dimensional arrays. As thematrixmodule matures, we will use that protocol for more comprehensive image filtering. This interface is presented with some samples and (currently) no documentation (other than code comments) as is available from our shared repository. Both libtiff and thematrixprotocol must be available to run the samples.Update 2007-02-06:Update 2007-02-07:Per the suggestions of the Mercury team, I have updated the foreign protocol calls from the old C-specific interface to the generic and supported interface. Also, made the library "more" threadsafe by eliminating the global file pointers and subsuming those values into the image structure.
Changing the
c_pointertype to aforeign_typepragma(again) to avoid the old C-style foreign interface and also to eliminate unnecessary warnings about int-to-pointer casts.2007-0131:As the Mercury standard library does not have a matrix protocol, I am building a module that handles some basic matrix operations; this module and its test suites will be added to the
utilslibrary when in serviceable condition.30:Thanks to the efforts of the Mercury research group at Melbourne, their Mercury compiler (
mmc) is now available for Macintosh computers with the Intel chipset. This is the alpha ROTD (2007-01-21) as opposed to the currently sanctioned 0.13.1 release, so some things are experimental in this version of the compiler. Email logicaltypes.com if you wish to have a binary distribution.Our compiler,
ltq(that allows syntactic extensions with theop/3directive, see the news archives at 2006-03-02), may need some work as the Mercury research team has changed theopsmodule. This, of course, also means that systems that depend on these improvements, such as the test-building frameworkqcpt(see news archive post 2006-05-12), must also be retested. We will post an update when qld is again tested and working.2006-0717:The various data structures provided in the ROTD extras/ distribution that handles
solvertypes (particularly the variousanymodes) do not compile because of purity issues; also, since their release, the coding style has changed for module qualification. The fixes to get these types compiled are here. For the Mercury team's review are the diffs to fold back into the distribution.2006-0513:We present a complete rewrite of Mercury's QuickCheck implementation: qcheck2 (the sample unit test module (
peano_unit_tests) requires the peano module in order to run). The essence of testing à laqcheck-- type discernment to obtain (random) test values with a test specification language -- remains unchanged. The new features of this new version enhance the system with:
- complete control over what is reported and when it is reported;
- dynamic control over ranges of random number-like values (
ints,floats andchars) as well as the random number generator type itself;- and for the code-hacker:
qcheck2is broken up into separate modules along functional linesThe documentation for
qcheck(upon whichqcheck2is built) is a model for any system to follow; so, documentation, to include a system description and transition guide, forqcheck2is under development.Update 2006-05-20:As the test description (Description) may now be of any type -- even non-comparable types, such as, for example, function types -- using a
mapwith Description keys is will cause errors when using Description types that cannot be compared. As such, theqstatenow uses anassoc_listto accumulate the test results.Update 2006-05-21:Added information to the summary report: this report now shows which predicates were not tested. The work-in-progress documentation now covers the reporting facility comprehensively.
12:
ltq(Logical Types Quicksilver compiler) now comes withqcpt(QuickCheck Predicate Types), a system that discerns the interface predicates and functions of a system (to facilitate comprehensive unit testing). Perhaps even more important is the inclusion of a README that doubles as a HOWTO and INSTALL document.11:Completed the document describing an implementation of mutable syntax for Mercury. This article in available in the literature section (see above).
2006-0430:The
graphmodule takes a rather non-directed approach to locating a path from Node1 to NodeN. This is fine if the path has no associated cost, but if one is looking for the best path (where a path has an associated cost), this laissez-faire approach becomes problematic.As I often need a efficient path in a graph, I have added
best_path/5and other supporting predicates that cannot be implemented well operationally given the protocol of modulegraphand submitted these changes to the Mercury team for review. While they consider these changes, I provide the implementation here as moduledoug_graph, with an associated example. Locating the best path in the given example using the naivepathimplementation took over 20 seconds; the reimplementation here completes the computations in less than a second.27:The following Mercury compiler distributions are available from here on request:
mercury-2006-04-26-rotd-powerpc.apple.darwin8.5mercury-2006-04-26-rotd-sparc.sun.solaris2.8These distributions include the
extras/, thesamples/(inextras/) and the HTML documentation (indoc/).2006-03
29:873210165432108The Mercury development team has fixed the problem with nesting of disjunctive terms when output with
term_io.write_term/4withROTD-2006-03-07compiler distribution. It, along with theop/3declaration enhancement (ltq), are available from us. Send an email (see contact information below) if you wish to obtain one of the following distributions:
mercury-2006-03-25101854310789-rotd-powerpc.apple.darwin8.35mercury-2006-03-287210185431079-rotd-sparc.sun.solaris2.8These distributions include the
extras/, thesamples/(inextras/) and the HTML documentation (indoc/).0:346
term_io.write_term/4does not properly handle disjunctions. I've submitted a patch to the Mercury development team, but in the interim, I've included the change in distributions (asdopprelies onwrite_term/4to output theop/3-free code results). Also,compiler/prog_io.mhas quite a few disjunctions handling (now dead) declaration types, I've submitted this patch to the Mercury team, but have also patched local distributions. The most recent distributions available are:
mercury-2006-03-01-rotd-fixed-write_term-sparc.sun.solaris2.8mercury-2006-03-0134-rotd-fixed-write_term-powerpc.apple.darwin8.3Both these distributions have
ltqincluded. Email me if you wish a copy of one of the above distributions or of the stable release (0.12.2) on either architecture.Update 2006-03-08:The Mercury team has corrected the compiler so that terms are appropriately parenthesized. This eliminates the need for myterm_io.write_term/4hack, so future releases of the distributions from this site will revert to straight-up Mercury. Enhancements, such asop/3declarations, will be included inextras/(the source code) and inbin/.02:There is quite a debate going on at the developers discussion forum as to the merits, extent and implementation of the
op/3declaration. Up to this point, we have patched the Mercury compiler distribution so that it accepts and processesop/3declarations. This has proved to be rather onerous as new distributions have been coming out regularly. Instead, prompted by the Mercury team, I have developed anop/3preprocessing system.ltq <Executable>("Logical Types Quicksilver") creates build/Makefile, then executes the Makefile which callsdopp <Dependencies>("Dynamic Op PreProcessor") which translatesop/3-enhanced files into plain vanilla Mercury ones. The Makefile then builds the executable with the 'mmc --make --infer-all <Executable>' command. This build system is locally available from this site, and also included in Mercury distributions that we produce from this month onward.Update 2006-03-10:I have updatedUpdate 2006-03-13:ltqso that it takes any number of arbitrary command-line arguments (these preceed the <Executable> argument). These arguments are passed, unmolested, tommc.Currently, we are fully integratingUpdate 2006-03-24:op/3declarations into working products. In building auxilary libraries we have found that we need to mirrormmc's library-building indicator (prepending 'lib' to the target module's name). Adding this functionality required a modification toltq's build process. This change is reflected in build system offered here. We leave the library installation process tommc; that is, noddingly: in the generated Makefile, there is an command that passes the proper arguments tommcwith amake installcommand.The library building and installation process differed slightly inUpdate 2006-03-29:ltq. Eliminated that difference and published a new version of this system.ltqnow automatically creates thebuild/directory (the repository of build products, including the files converted fromop/3-enhanced sources to canonically represented sources). This eliminates errors inltq's build process when it cannot find the nonexistent directory. The new distribution is available, as always, here.2006-02
17:The bleeding-edge releases of the Mercury compiler (the ROTD (release of the day) 2006-02-11), both for standard Mercury and the Quicksilver enhancements from Logical Types ( op/3declarations and binary-trees and -sets with externalizable structure) are compiled and available for Mac OSX.4 systems. These releases are alpha quality, but do contain several interesting developments, such as improved constraint logic programming syntax, injections (bi-directional maps) and improved term-as-XML handling. Please email if you wish to obtain a copy (see contact information).Update 2006-02-19:The Quicksilver distribution has been updated to theUpdate 2006-02-2ROTD-2006-02-.161868:There are a new set of distributions available:
ROTD-2006-02-2distribution now available for sparc.sun.solaris2.835ROTD-2006-02-23distribution for powerpc.apple.darwin8.3- Quicksilver
ROTD-2006-02-25distribution for powerpc.apple.darwin8.3 and for the sparc.sun.solaris2.8 as well2006-01
31:Quicksilver version 0.12.2 for Mac OS-X.4 is available along with installation instructions. Update (
2006-03-04):I have removed all distributions from this repository. Please email me if you wish to obtain a copy of any distribution mentioned here.31:Quicksilver version 0.12.2 for Solaris 8 is available along with installation instructions. 31:Logical Types, LLC is no longer producing binary distributions of Mercury that do not support op/3declarations. Quicksilver (Mercury withop/3support) is a strict superset of Mercury and what Logical Types produces.16:I've posted a review of the PADL-2006. 06:Here is a module that prints out a parsed term in its canonical form (write_canonical.m; useful for inspecting terms with op/3syntax) and a test module (test_op.m) that exercises write_canonical. This can be used with the regular Mercury compiler, but is designed for Quicksilver compiling modules with embeddedop/3declarations.04:Mercury compiler enhanced with op/3declarations for both PowerPC architecture Mac OS-X.4 systems (with installation instructions) and Sparc architecture Solaris 8 systems (with its own installation instructions) available for download. The compiler executable is named "lqc" for "Logical TypesQuicksilverCompiler". A supporting document, detailing the changes to the compiler to permit users to insertop/3declarations (followed eventually by the typed operators in context) into module implementations, will follow in short order.Update (
2006-01-31):These distributions (and the ones mentioned below) are obsolete. Email me for the current stable release.2005-12
27:Mercury compiler for Sparc architecture Solaris 2.8 systems available for download. See the installation instructions to get Mercury running on your SPARC. 24:Mercury compiler for PowerPC architecture Mac OS-X.4 systems available for download. See the installation instructions to get Mercury running on your Mac.
Copyright © 2006, 2007, Logical Types, LLC. All rights reserved.