SciRust Design Guide

SciRust Design Guide

This document is a set of notes about the design of SciRust. SciRust is a work in progress or rather it has just started its life. The design ideas will evolve over time based on my own evolving ideas and feedback from people using it.

SciRust is a scientific computing library. It is written in Rust programming language.

The library is hosted on GitHub. API documentation is available from here. It may not be up to date.
It is also hosted at rust-ci. You can see the last build status from this page.

Introduction

Scientific computing is typically done in interactive environments. Good examples are MATLAB, Python, Mathematica, GNU Octave, R, and Julia. These platforms are pretty good for rapid prototyping. But they are a bit cumbersome for production deployment in high performance computing applications. A natural fall back is to C/C++ and FORTRAN. C/C++ world provides a number of useful libraries. Some of them are: Eigen, Armadillo, OpenCV, GNU Scienific Library, etc.. Also, LAPACK has interfaces both for FORTRAN and C++. Then there are Intel libraries like Intel IPP and MKL, which have C++ bindings.

Rust is a systems programming language. Rust solves several issues in traditional systems programming languages like C/C++. These issues include: memory management, resource management, ownership semantics, move semantic, threads without races. Design of Rust has evolved a lot over last few years. The language is now complete and pretty impressive. The time is ripe for development of good libraries in Rust. In particular, a good scientific computing library in pure Rust is certainly the need of the hour. SciRust aims to fill that gap.