Release History

# Versions 0.1 to 0.2 #

Initial release and changes to fix some problems turned up by CPAN
smoker tests.

# Version 0.03 #

Major overhaul, resulting in massive improvements in speed and memory
usage.

Some notable changes:

* changes to calling conventions for resolve()
* removed "empty check block" code
* removed "duplicate check block" code
* improved fisher-yates shuffle (uses strings internally for speed)
* improved semantics for expansion of message/aux blocks
* extended test scripts updated to account for changed API
* new smoker.pl script for finding bugs
* some extended tests can now take a seed value (repeatable outputs)
* changed to github as main work repository
* experiments with "premature" edge deletion (backed out)
* various code cleanups (more readable)
* implement counts of unsolved nodes (big speedup)
* use separate up, down edges internalls (more speed gains)
* various in-lining (for speed)
* new "auxiliary rule" can solve more nodes than old algorithm
* improved data structures (hashes replaced by lists in many places)
* "lazy" expansion rule to avoid need to toggle entries in hashes
* remove code for generating graphvis graphs
* fix various bugs, typos
* when adding check blocks, don't make edges to already-solved nodes
* including Makefile.PL in distribution (generated by Module::Build)
* new and updated documentation (README.md, HISTORY, LICENSE, etc.)
* more/better DEBUG/ASSERT code (turn on/off via use constant)
* refactoring to improve readability
* allow (unsafe) fallback to rand() for machines without /dev/urandom

# Version 0.04 #

Two changes make this release incompatible with the previous one:

* RNG uses little-endian byte order (since that's more common)
* Abandoned Fisher-Yates shuffle in favour of Bob Floyd's algorithm

This release also implements a 'Bones' object, which stands for
"Bundle of Node Elements." This is compatible with the previous
implementation in algorithmic terms, but it has meant that there are
some API changes (resolve now returns Bones instead of block numbers).

The primary purpose of using the new Bone structure has been to
improve the efficiency of the C code I'm developing in parallel, but
it also gives me a convenient place to document the internals of how
the OC algorithm works. And it lets me make some bad puns.

This release should have much better performance than the previous one
on regular PCs and the like, but I wasn't able to get as much of an
improvement on the Raspberry Pi, which is where I'd eventually want to
run the code.

Another reason for this release is to provide an update before I start
adding demo programs under the "OCD::" namespace on CPAN. "OCD" stands
for "Online Code Demos".

The C code mentioned is not yet part of the Perl release, but it may
be downloaded from the git repository:

 https://github.com/declanmalone/gnetraid.git

Integrating the C code as a Perl/XS module will be forthcoming in a
later release.
