about summary refs log tree commit diff stats
path: root/readme.md
blob: f0a4ff6ad43cd871e5b2d378af6956bcc3340015 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# azimuth

a new computer algebra system

## goals

our first goal for azimuth is that it should be able to compute
the antiderivative of an arbitrary function at least as fast as
[rubi](https://rulebasedintegration.org/).

ideally, we should be able to do this faster and maybe (?) produce better
antiderivatives because:

- we are writing our own software (not just using mathematica)
- we are using a different technique that we hope produces better
  antiderivatives (e-graphs)
  - this will hopefully allow us to aggressively parallelize the process
    where this provides performance benefits

## technical requirements

these are some rules we've outlined. they aren't intended to be general
software guidelines, they are strict because we feel they are achievable
given our scope.

- unnecessary serial computation is a bug
  - if it can be done in parallel it should be if the overhead does not
    outweigh the benefit
- unnecessary memory usage is a bug
- excessively slow computation is a bug
  - any instance of a computation slower than any peer is a bug
- unclear code is a bug
  - code should be readable by anyone familiar with the language and
    the domain
- bad abstractions are a bug
  - defined as:
    - having more requirements than necessary to enclose their interface
    - trying to hide away details that aren't all that well hidden or
      make sense to hide
    - not doing only one thing where this is a reasonable constraint
- unspecified pre/post-conditions or invariants are a bug
- undocumented code is a bug
- requiring more than `cargo build` to build in most circumstances is a bug
- crate dependencies other than `std`/`core`/`alloc` or code vetted in
  its entirety are a bug

## why

why not?