* Added parameter `array-strictness', default #t
* Added `array-default-strict!' and `array-default-strict', which act
like the functions without "default" in the name when
`array-strictness' is #t; otherwise they do nothing
* Lots of small changes to existing array functions, mostly to ensure
computations are done using nonstrict arrays, but return values are
strict when `array-strictness' is #t
* Added strictness tests
* Added tests to ensure untyped code can use `math/array'
* Rewrote `array-map' exported to untyped code using untyped Racket
* Rearranged a lot of `math/array' documentation
original array strict instead of returning a new strict array.
(Finally!) The hard part is keeping the Array type covariant. The
solution is to keep the store in the closure of the array's
procedure instead of in the Array struct itself.
Replaced pointwise operators with macros that expand to applications of `array-map'; allows more precise return types and reduces compilation time
Changed literal array syntax to use #() to delimit rows instead of [] (still suggest using square parens, though)
Minor refactoring
Fixed a macro so that the only problem with "array-tests.rkt" now is that typed/rackunit is b0rked
in the original GitHub fork:
https://github.com/ntoronto/racket
Some things about this are known to be broken (most egregious is that the
array tests DO NOT RUN because of a problem in typed/rackunit), about half
has no coverage in the tests, and half has no documentation. Fixes and
docs are coming. This is committed now to allow others to find errors and
inconsistency in the things that appear to be working, and to give the
author a (rather incomplete) sense of closure.