From: Ashar (ashar786khan_at_[hidden])
Date: 2020-03-19 17:34:52
> 1. using a different branch, improve code quality using c++20
> contracts and attributes for tensor, using (expects,ensure,assert)
> Hey Cem,
Are you sure to add contracts in uBLAS. Contracts was proposed for C++17
and did not made it up to C++20 and I have no idea when it will come to but
there are some implementation of contracts TS draft by some third party
compiler hackers who implement things, So I will have to compile the
compiler with contract support and then test it during development. I have
no problems doing it, I can see all the great places it will be used.
Will it be worth doing something that can't be directly used by other?
In addition to the above, I was thinking of also having complete compile
time tensor. c++20 has new and delete marked constexpr, so we can use
std::vector container which is now compile-time and modify current to have
a complete compile time tensor class. With examples and how to use it, this
will be easy, if I use Amit's static extents. This is I believe an
extension to the list of ideas you presented above.
I still need your view on if I should go ahead with the contracts? Concepts
are okay and So is constexpr thing! Also I believe eventually if I follow
up your list of ideas tensor<2, rank> can be matrix and tensor<1, rank> can
become a vector and in a long run it can replace the specially designed
matrix and vector of ublas. (backward compatibility could be provided
thought). We will have one expression template (YAP), C++17 or 20
everywhere, it will also make maintaining the library easy because
currently tensor is a separate things and matrix and vector of ublas are
This will also eventually give us many performance boost that David was
talking about from modern paradigms of C++.