Skip to content

A curated list of Rust code and resources that do NOT exist yet, but would be beneficial to the Rust community.

License

Notifications You must be signed in to change notification settings

minstrel271/not-yet-awesome-rust

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

66 Commits
 
 
 
 
 
 
 
 

Repository files navigation

Not-Yet-Awesome Rust

A curated list of Rust code and resources that do NOT exist yet, but would be beneficial to the Rust community.

The purpose of this list is twofold:

  • Enumerate specific use cases and their problems domains that do not yet have a robust ecosystem in Rust.
    • The definition of "specific" and "robust" for this list is yet to be determined!
  • Encourage the Rust community to approach gaps in the Rust ecosystem by providing this list as a point of collaboration!

You can jump right into editing this file here. See the contributing guide for information on what you can do to help or if you have questions about this list!

Table of contents

Documentation

Stack Overflow

  • There are many older Rust questions on Stack Overflow that wouldn't work with today's Rust because of syntax that has changed since the release of 1.0, or that may have better solutions because of other Rust ecosystem developments.
    • See #4 for an SO query and a list of these known issues!

Character encodings

Data processing

  • DDS library wiki
  • HDF5 (see also Wikipedia and this Reddit post)
    • The following crates exist, but are missing some thing(s):
      • hdf5-rs has a lot of functionality, but is currently in design flux and has an issue reporting its status.
      • hdf5 seems capable of writing HDF5-encoded data, but not reading it.
  • A good stream processing pipeline with back pressure doesn't yet exist for an asynchronous data processing pipeline
    • RxRust is an older attempt to implement this according to the reactive streams model -- it currently seems closest to this use case.
    • tokio and futures may be interesting components to use when building this.
    • New features soon to come in Rust like impl Trait will probably make developing something like this easier to develop and use.
  • Bindings for pandoc
  • Bindings for git-annex

Data structures

  • A concurrent HashMap-like structure has not been fully developed yet.
    • concurrent-hashmap is still missing methods like iter_mut, entry, drain, and clear from the original HashMap interface.
    • evmap is a different design around eventual consistency, and so departs from the normal HashMap interface.

Dynamic programming analysis/instrumentation

  • Binary instrumentation tools like Intel Pin or DynamoRIO are useful for embedded applications. An ecosystem around them (which doesn't exist yet!) could include:
    • Bindings to the C APIs associated with existing applications (for instance, Intel Pin and DynamioRIO)
    • Libraries or applications implementing the features of the aforementioned in Rust

Embedded development

  • MINIX support is nonexistent!

Geometry

  • PCL equivalent - point clouds, essential 3D geometry functions
  • Voxel library, operations and representation of voxel data. There is a piston crate for rendering voxels but this isn't suitable for working on domains like medical data, more geared towards game development. To enable processing in scientific domains like medicine there needs to be processing functions such as being able to: convert to triangular mesh, thresholding, and morphology. This is because things like MRI data is expressed as voxels, thresholding can separate grey and white matter in the brain, morphology identifies shapes and structures inside the body etc.

Geospatial Information Systems

  • OGC standards - multiple crates for standards for encoding, sharing or manipulating geospatial data link. There's already a crate for GeoJSON but none of the others appear to have crates.
  • More complete GDAL wrapper (or pure rust alternative). rust-gdal is an incomplete wrapper so needs work.

Machine Learning

  • Machine learning toolkit like scikit-learn in Python (both rust-learn and rusty-machine are insufficient). Rust-learn only supports classification, rusty-machines misses support for sparse data and serialization. Both of them miss quite common unsupervised techniques (like PCA).
  • Deep learning toolkit with GPU support a good flexibility (think Tensorflow or Chainer in Python). Most of the current libraries are either simplistic (you cannot do seq2seq network in them for example), or miss GPU support.

Mathematics

  • Sparse matrix libraries (SPRS library needs some love, the basics are there but advanced linear algebra is missing)
  • Designing low latency DSP algorithms suitable for embedded use (common filters, analysis functions)
  • Library for nonlinear dynamical or chaotic systems (solvers, numeric methods etc.)
  • A pure Rust libm implementation. These are required to get math functions on #![no_std] platforms
    • The m crate has made some headway here, though it hasn't been maintained recently.

Native desktop application integrations

Microsoft Office

  • An interactive Visual Basic uses for scripting by using the COM interface, which I believe winapi supports.

Parsers/Emitters

  • Ability to parse Registry.pol files from Windows machines -- implemented by this guy!
  • Common office document formats are yet to have more mature solutions:
    • Excel/Calc spreadsheet deserialization seems available with calamine, but no serialization libraries seem available for them, let alone for the entire XML formats that the Office/OpenOffice suites themselves support.
    • Otherwise, OpenOffice and Microsoft Office
  • There is currently no library to convert between different office document formats.
  • The beancount data format has no parser or emitter libraries yet.
    • A builder interface for a higher-level emission API would also be nice.
  • There is no pure-Rust solution for QR decoding. The only other crate that handles QR decoding is the quirc crate, which uses C bindings.
  • The RData file format does not have a parser or emitter yet.
    • Currently, this formatted is implemented for the R language in the serialize.c module.
  • There are no SGML parsers or emitters on crates.io at all.
    • This is mostly a legacy markup language used for legacy type setting and supported in applications like APP (AKA 3B2).

Personal information management

  • Contacts via vCard have been implemented using vobject, but no "high-level interface" exists yet that uses it or an alternative.
  • iCalendar parsing has been implemented via several crates (i.e., vobject), but a higher-level API is missing.
  • Bindings to the Python implementation of beancount do not yet exist.

Rust Toolchain

  • A stable Rust interpreter does not yet exist, which would made code exploration easier.
    • miri seems to be a step in the right direction -- it just needs some love!
  • No debugging experience offers integration with rustdoc, which would
  • A rustdoc backend for generating zeal/ dash docsets is missing.

User Interfaces

  • A mature framework for Windows native UI has yet to be established.
    • native-windows-gui at one point claimed to be approaching feature-completion, but is now unmaintained.
  • Abstractions over native UIs for each platform have yet to be available in pure Rust.
  • A good reactive UI library complete with event-driven state management a la Redux does not yet exist.
    • carboxyl looks like it may be a good fundamental building block for this.

Web bindings

Google API

  • Generation of Google bindings using googleapis and gRPC would be more performant than using JSON web requests to the Google API, as with google-apis-rs service.
  • There is room for more idiomatic APIs for Google in general. google-apis-rs uses the Google Discovery service to expose the vast majority of Google Services, but they can be difficult to grok for beginners or someone unfamiliar with Google APIs in general.

XML

There is yet to be a library that handles all of these:

  • General purpose DOM tree
  • Proper encoding handling
  • DTD handling
    • including the disabling of features with security implications like entity expansion bombs
  • XML Schema validation
  • XPath
  • XQuery
  • XSLT 1.0/2.0/3.0
  • Option to preserve input style
  • Is fast

For more feature and performance comparisons for existing Rust XML crates, see choose-your-xml-rs.

About

A curated list of Rust code and resources that do NOT exist yet, but would be beneficial to the Rust community.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages