ndarray icon indicating copy to clipboard operation
ndarray copied to clipboard

Taking advantage of New Rust Features

Open bluss opened this issue 6 years ago • 5 comments

Ideas and tracking to take advantage of “new” features in Rust

All features to be used because of what gain they give us, not to score points. Formulate goal & gain before implementing - and write it up the pull request :slightly_smiling_face:.

  • [ ] std::alloc
  • [x] use/namespaced macros - #517
  • [ ] std::arch and target_feature I'd prefer significant work in this area to take place in a separate crate, that we depend on. Something that gathers low level "loops" in one place. Like this, but revived and remade
  • [ ] NonZero for nonzero integers
  • [x] NonNull for pointers #434
  • [ ] repr(transparent)
  • [x] needs_drop
  • [x] pub(crate) - This can be used for reorganization of a quite old crate structure
  • [ ] const fn (1.31)
  • [x] Inclusive ranges
  • [x] Rustdoc item links
  • [x] 2018 edition path rules #567
  • [ ] Run cargo fmt on repository and add format checking to CI (now that rustfmt is stable).
  • [x] Possible use of no_std + alloc. (1.36) #708
  • [x] MaybeUninit (1.36) #685
  • [ ] Annotations in docs to indicate when items are enabled by features. This requires the unstable doc_cfg feature, so we should probably enable this only on docs.rs. To do so, we can add this to the crate:
#![cfg_attr(docsrs, feature(doc_cfg))]

and then on each item enabled by a specific feature, we add this:

#[cfg_attr(docsrs, doc(cfg(feature = "thefeature")))]

(For an example, see async_compression.)

  • [ ] Const generics #961

Future features (not relevant yet, because they don't exist in stable Rust)

  • Variadic generics
  • Generic associated types
  • Custom DST
  • Specialization
  • Allocator trait
  • Iterator::try_fold (Try is unstable) #706
  • trait aliases

This is a tracking issue, please edit it.

bluss avatar Nov 22 '18 17:11 bluss

It seems 2019 is indeed going to be the year of specialisation, const generics and GAT: https://github.com/rust-lang/rfcs/pull/2657 :rocket: :rocket:

LukeMathWalker avatar Mar 07 '19 17:03 LukeMathWalker

Hey mates, this looks like something that new person like me can help. Do you see any thing that is easy to get start with?

phungleson avatar Mar 16 '19 04:03 phungleson

Any thoughts on @phungleson 's question? CC @jturner314

Also the Run cargo fmt can be marked complete

max-sixty avatar Jun 21 '19 19:06 max-sixty

Some suggestions:

  • Running cargo fix --edition-idioms and cleaning up the results.
  • Updating doc links to use rustdoc item links. (See RFC 1946, although not all of the RFC is implemented.)
  • Using NonZero (#647).
  • Changing ArrayBase.ptr to NonNull. This would be a pretty extensive change that would touch lots of areas of the code base, but I think the changes would be relatively straightforward.
  • Seeing if it would be possible to replace the dependency on std with core and alloc.

jturner314 avatar Jul 21 '19 21:07 jturner314

looks like GATs are going to be part of stable next week

skewballfox avatar Oct 30 '22 18:10 skewballfox