Revision history for Apache Clownfish

0.5.0  2016-03-04

  New features:

    * [CLOWNFISH-2] - Create iterator for Hash
    * [CLOWNFISH-19] - Go (golang) bindings for CFC
    * [CLOWNFISH-23] - Markdown for documentation
    * [CLOWNFISH-26] - Markdown for standalone documentation files
    * [CLOWNFISH-28] - Proof-of-concept Go bindings
    * [CLOWNFISH-46] - Travis CI with multiple host languages
    * [CLOWNFISH-64] - Autogenerate subroutine code samples in Perl POD
    * [CLOWNFISH-66] - Python-specific CFC
    * [CLOWNFISH-71] - Autogenerate HTML documentation for C API
    * [CLOWNFISH-72] - Document Clownfish internals like header file language
    * [CLOWNFISH-75] - Add Clownfish page to lucy.apache.org

  Bugfixes:

    * [CLOWNFISH-3] - Charmonizer bombs out trying to set warnings as errors
                      with Strawberry Perl
    * [CLOWNFISH-9] - Make most Clownfish core types final
    * [CLOWNFISH-24] - Error handling in C bindings is not thread-safe
    * [CLOWNFISH-33] - Duplicate hash entries
    * [CLOWNFISH-37] - Order of refcount manipulation when overwriting
    * [CLOWNFISH-45] - Dynamically subclassing a final class should fail
    * [CLOWNFISH-47] - Tighten up final method code gen and optimization
    * [CLOWNFISH-62] - Crash when passing Perl variable as decremented arg
    * [CLOWNFISH-63] - Don't export private methods via Go
    * [CLOWNFISH-69] - Clownfish::CFC missing from CPAN prereqs

  Improvements:

    * [CLOWNFISH-7] - String-only keys for Hash
    * [CLOWNFISH-11] - Rework ByteBuf
    * [CLOWNFISH-15] - Method OFFSET vars should be uint32_t instead of
                       size_t
    * [CLOWNFISH-27] - Use functions rather than methods for refcounting
    * [CLOWNFISH-29] - Use PERL_NO_GET_CONTEXT
    * [CLOWNFISH-30] - Eliminate autogenerated "callbacks.h"
    * [CLOWNFISH-34] - String-only keys for LFReg
    * [CLOWNFISH-35] - Use size_t for Array and Hash indices
    * [CLOWNFISH-39] - Public Vector API
    * [CLOWNFISH-40] - LockFreeRegistry should be private
    * [CLOWNFISH-42] - Move NumberUtils to Lucy
    * [CLOWNFISH-49] - Remove Obj_Mimic, Obj_To_[FI]64, Obj_To_Bool
    * [CLOWNFISH-50] - Convert some Obj methods to inert functions
    * [CLOWNFISH-51] - Go glue should convert clownfish.String to Go string
    * [CLOWNFISH-52] - Implement To_Host methods for core types
    * [CLOWNFISH-53] - Support MSVC in C mode
    * [CLOWNFISH-56] - Map Clownfish composite types to Go host types
    * [CLOWNFISH-57] - Map clownfish.Obj to Go empty interface
    * [CLOWNFISH-58] - Refine Hash API
    * [CLOWNFISH-59] - Refine Go bindings
    * [CLOWNFISH-61] - Run core tests under Go bindings
    * [CLOWNFISH-65] - Refresh intro docs
    * [CLOWNFISH-70] - Export major version from Perl bindings
    * [CLOWNFISH-79] - Improve generated Perl bindings

0.4.4 2016-01-26

  Bugfixes:

    * [CLOWNFISH-3] - Charmonizer bombs out trying to set warnings as
                      errors with Strawberry Perl
    * [CLOWNFISH-69] - Clownfish::CFC missing from CPAN prereqs

0.4.3 2016-01-09

  Bugfixes:

    * [CLOWNFISH-33] - Duplicate hash entries

  Improvements:

    * Fix build and test suite under Strawberry Perl.
    * Improve installation scripts for C library.

0.4.2 2014-12-16

  Bugfixes:

    * [CLOWNFISH-18] - Determine Clownfish include dirs at build time

0.4.1 2014-09-25

  Bugfixes:

    * [CLOWNFISH-4] - Account for compiler names with invalid leading
                      whitespace
    * [CLOWNFISH-5] - Add stub Clownfish/CFC/Model/Version.pm
    * [CLOWNFISH-6] - Update issue tracker in dist metadata
    * [CLOWNFISH-8] - CPAN smokers fail to build Lucy
    * [CLOWNFISH-16] - Support arguments in $Config{cc}
    * [CLOWNFISH-17] - Bump Devel::PPPort dependency to version 3.14

0.4.0  2014-08-19

  Initial independent release after separation from Apache Lucy.

