Skip to content

0.5.0

Compare
Choose a tag to compare
@aldanor aldanor released this 12 Mar 23:06
· 678 commits to master since this release

Added

  • Added support for HDF5 1.10.
  • Added Rust equivalents of HDF5 primitives: arrays, Unicode strings and ASCII
    strings – all of them available in both fixed-size/variable-length flavours
    (see hdf5-types crate for details).
  • Added H5Type trait that unifies the types that can be handled by the HDF5
    library. This trait is implemented by default for all scalar types, tuples,
    fixed-size arrays and all types in hdf5-types and can be used to create
    Datatype objects for known types.
  • Implemented #[derive(H5Type)] proc macro that allows for seamless mapping
    of user-defined structs and enums to their HDF5 counterparts.
  • Added high-level wrappers for file-creation H5P API (plist::FileCreate) and
    file-access H5P API (plist::FileAccess), covering almost the entirety of
    FCPL and FAPL property list functionality.
  • Various improvements and additions to PropertyList type.
  • Added support for file drivers: sec2/stdio/core/family/multi/split/log.
  • Added support for MPIO driver (requires H5_HAVE_PARALLEL HDF5 flag and the
    crate has to be built with "mpio" feature enabled).
  • Added support for direct VFD driver (requires H5_HAVE_DIRECT HDF5 flag).
  • Added some missing bindings to hdf5-sys: driver-related FAPL bindings in
    h5p and h5fd (including MPIO and direct VFD drivers), MPIO bindings in
    h5p, h5f and h5fd.
  • Added core reading/writing API in Container, with support for reading and
    writing scalars, 1-D/2-D/dynamic-dimensional arrays and raw slices. As a
    side effect, the main crate now depends on ndarray. Dataset now
    dereferences to Container.
  • Added basic support for reading and writing dataset slices.
  • When creating datasets, in-memory type layouts are normalized (converted to
    C representation).
  • Added packed option to DatasetBuilder for creating packed HDF5 layouts.
  • All object types now implement Clone (shallow copy, increases refcount).

Changed

  • Renamed hdf5-rs crate to hdf5.
  • Renamed libhdf5-sys crate to hdf5-sys (importable as hdf5_sys).
  • Renamed GitHub repository to aldanor/hdf5-rust.
  • Updated the bindings and tests to the latest HDF5 versions (1.10.4 / 1.8.21).
  • The build system has been reworked from the ground up:
    • hdf5-lib crate has been removed; all the build-time logic now resides in
      the build script of hdf5-sys.
    • The build script now looks for HDF5_DIR and HDF5_VERSION env vars.
    • pkg-config is now only launched on Linux.
    • macOS: the build script detects Homebrew installations (both 1.8 and 1.10).
    • Windows: we now scan the registry to detect official system-wide installs.
    • HDF5_DIR can be now pointed to a conda env for dynamic linking.
    • A few definitions from H5pubconf.h are now exposed as cfg definitions,
      like h5_have_parallel, h5_have_threadsafe and h5_have_direct (this
      requires locating the include folder and parsing the header at build time).
  • Various cleanups in hdf5-sys: implemented Default and Clone where
    applicable, moved a few types and methods to matching parent modules.
  • Major refactor: trait-based type hierarchy has been replaced with a
    Deref-based hierarchy instead (53eff4f). ID and FromID traits have been
    removed. Traits like Location, Object and a few others have been replaced
    with real types (wrappers around HDF5 handles, same as the concrete types
    like File). Subtypes then dereference into parent types, so the user can
    call methods of the parent type without having to import any traits into
    scope (for instance, File dereferences into Group, which dereferences
    into Location, which dereferences into Object).
  • Dataspaces and property lists can now be properly copied via .copy() method
    (instead of .clone() which now yields a shallow copy increasing refcount).

Fixed

  • hbool_t is now mapped to unsigned integer of proper size (either 1 byte or
    4 bytes), depending on how the HDF5 library was built and on which platform.
  • Added missing bindings for previous versions (mostly in h5p and h5fd).
  • Querying the HDF5 error stack is now thread-safe.
  • Error silencing (silence_errors()) is now thread-safe.
  • Fixed wrong bindings for H5AC_cache_config_t.

Removed

  • Removed hdf5-lib crate (merged it into hdf5-sys, see above).
  • Removed remutex crate, using locking primitives from parking_lot crate.
  • Container trait has been removed in favor of Group type.

Notes

  • The version number jump is due to renaming crates hdf5-rs and libhdf5-sys
    to hdf5 and hdf5-sys, respectively. Since there were already published
    crates with those names and the crates registry is meant to be immutable even
    if the crates are yanked, we had to bump the version so that it shadows all
    the older versions.