Skip to content

Request: design description #1

Closed
@grothesque

Description

@grothesque

Thanks for sharing this very interesting library! I've been trying to understand its inner workings, but this is difficult since some central aspect seem both very clever (in a positive sense), and are not documented at all. I think that adding a "DESIGN.md" file (even a small one) may greatly increase the usefulness of this project to other people (be it possible contributors or members of the wider numeric Rust community).

For example, would you mind to describe how Span works? I note that it is a zero-sized struct, and only &Span are passed around. But what do these actually point to? And what is the role of RawSpan?

Or let's take Expr / Expression. I first thought that it's a view with a somewhat badly chosen name, but it seems to be much more than that. Are types that implement the trait Expression "expression templates" in C++ speak?

What is the relation of Expr and Span and why are both needed? You write that spans are like Rust slices, but slices are fat pointers, while spans seem to be just pointers that point to... something (that is owned by whom?).

It would be also interesting to have a brief discussion of the design aspects of C++'s mdspan/mdarray that you took over, and those that you didn't/couldn't and the reasons for that.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions