slap icon indicating copy to clipboard operation
slap copied to clipboard

Revision plans for v4.0

Open akabe opened this issue 9 years ago • 0 comments

We plan to the following changes in the next major version up.

Backward incompatible changes

  • [x] Low-level internal representation of flags. (The flags are defined as polymorphic variant in ver 3 or below, but will be implemented as char because BLAS/LAPACK's flags are characters. Overhead of conversion from polymorphic variant into char will be removed.)
    • The type of parameters ?up (for symmetric or triangular matrices) is bool in ver 3, [< A | L | U ] Slap.Common.uplo` in ver 4.
    • The type of parameters ?diag (for unit or non-unit triangular matrices) is [ N | U ] in ver 3, Slap.Common.diag in ver 4.
    • The type of parameter uplo of lacpy is [ L | U ] option in ver 3, [< A | L | U ] Slap.Common.uplo` in ver 4.
  • [ ] Changing subtyping tricks by phantom types. (The current version uses a subtyping trick for flags, vectors, matrices described at our paper, but polymorphic variant can achieve subtyping more simply. We will adopt the latter.)
    • The types of flags in Slap.Common, and 'cnt_or_dsc parameters of vectors and matrices will be changed.
  • [x] Simplification of type parameters of Slap.Common.trans. ((('m, 'n, 'cnt_or_dsc) mat -> ('n, 'm, 'cnt_or_dsc) mat) trans is too long since it has extra type parameter 'cnt_or_dsc. (m * 'n -> 'n * 'm) trans is much simpler.)
    • The type of transpose flags in Slap.Common and parameters ~trans will be changed.
  • [ ] Deprecation of several functions.
    • Slap.Size.pred_dyn |-> Slap.Size.pred
    • Slap.Size.fold_left |-> Slap.Size.iter_acc
    • etc.

Backward compatible changes

Perhaps some changes will be contained in ver 4.1 or above.

  • [x] Removing extra dynamic checks.
    • BLAS/LAPACK functions will be slightly faster.
    • -noassert option will be supported by the configure script.
  • [x] Introduction of generative existential types by GADTs.
    • More lightweight syntax can be used.
  • [ ] Dynamic checks of equalility/inequality of type-level sizes.
    • E.g., if_eq : 'n Size.t -> 'm Size.t -> (('n, 'm) eq -> 'a) -> (unit -> 'a) -> 'a
  • [x] More utility functions: cons, hd, tl, etc.
  • [ ] More LAPACK functions: laswp, lapmt, gtsv
  • [ ] Sized array module.

akabe avatar Apr 19 '16 14:04 akabe