about summary refs log tree commit diff stats
path: root/readme.md
diff options
context:
space:
mode:
Diffstat (limited to 'readme.md')
-rw-r--r--readme.md49
1 files changed, 49 insertions, 0 deletions
diff --git a/readme.md b/readme.md
new file mode 100644
index 0000000..f0a4ff6
--- /dev/null
+++ b/readme.md
@@ -0,0 +1,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?