Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Revision plans for v4.0 #4

Open
5 of 10 tasks
akabe opened this issue Apr 19, 2016 · 0 comments
Open
5 of 10 tasks

Revision plans for v4.0 #4

akabe opened this issue Apr 19, 2016 · 0 comments

Comments

@akabe
Copy link
Owner

akabe commented Apr 19, 2016

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

Backward incompatible changes

  • 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.
  • 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.

  • Removing extra dynamic checks.
    • BLAS/LAPACK functions will be slightly faster.
    • -noassert option will be supported by the configure script.
  • 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
  • More utility functions: cons, hd, tl, etc.
  • More LAPACK functions: laswp, lapmt, gtsv
  • Sized array module.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant