1. Base Reference Document
OpenAxiom is a descendent of the AXIOM computer algebra system as described by Richard Jenks and Robert Sutor in AXIOM: The Scientific Computation System. That book is the base reference document for OpenAxiom.
2. Changes From The Base Document
2.1. OpenAxiom-1.2.0
This release introduces the following changes from the base document2.1.1 Interpreter
-
The interpreter now evaluates the
typeOf
of a category asCategory
, when it previously reportedSubDomain Domain
which wasn't any real domain or category. The interpreter also evaluatestypeOf Domain
andtypeOf Category
asType
, an existing category. As a consequence, we have thatType
conceptually has typeType
. -
The deprecated system command
)with
was removed. -
Support for the unofficial, undocumented, operator
^=
(for not equal) has been discontinued. It was not documented in the Axiom Book, and was redundant with the documented notation~=
. This change affects both interpreted and compiled codes. - The interpreter now accepts instantiation of a domain or category constructor with a homogeneous variable length argument list, when the constructor is declared to accept a Tuple.
- It is now possible to restrict the type of a mapping-valued
expression, e.g.
_*$Float@((NonNegativeInteger,Float) -> Float)
now selects the multiplication operation default supplied by the categoryAbelianGroup
instead of producing an error. - The interpreter now avoids syntactic transformations that
have reaching semantics implications. For example,
previously, the expression
a ≥ b
was systematically transformed intonot(a < b)
irrespective of the types of the sub-expressionsa
andb
.
2.1.2. Compiler
- The compiler now accepts constant declarations in a more
direct style. For example, the following code is now accepted
MyUnit(T: Type): Public == Private where Public ==> with 1: T Private ==> add 1 == 0$T
Until OpenAxiom-1.2.0, the declaration for1
should have been written1: constant -> T
- Iterator variables and variables declared in a loop, or a reduction, or a collectt, are local to that loop. This change should not affect well written Spad codes.
-
The compiler now allows
f(x +-> 2*x,y)
without extra parenthesis around the anonymous function, where the function f is a function accepting a function as the first argument. This change was contributed by Juergen Weiss. - The Spad compiler used to accept constructs like
′e
wheree
is any s-expression as a way to inject a value in any datatype without type checking. That capability is discontinued and the quoting is now accepted only for literal symbols.
2.1.3. Algebra
The following types have been added to OpenAxiom-1.2.0-
MathML
: This package has been contributed by Arthur Ralfs and Alfredo Portes. -
System
: This package provides access to some runtime characteristics of the running OpenAxiom system. This package has been contributed by Gabriel Dos Reis. Signature
: This domain is the datatype for operation signatures as used by the interpreter and compiler.- The category
SetAggregate
used to export an operation for computing multiset-inclusion under the name of<
. The name of that operation is nowpart?
. The less-than operator is consistently reserved for the categoryOrderedSet
. - Addition of new categories:
OrderedSemiGroup
,JavaBytecode
,Byte
,ByteArray
Category
is now defined as a real domain, and acts conceptually as a type for categories. In particular, it is now possible to call regular functions with categories as regular runtime values.- Algebra databases are now built on the Windows platform.
2.2. Runtime System
Starting from OpenAxiom-1.2.0, new Lisp systems are supported: SBCL, and CLisp. This means that if GCL is not supported on your machine, but either of SBCL or CLisp is installed, then you can run OpenAxiom. OpenAxiom'sconfigure
script
will automatically detected that if you're building from source
code.
The Foreign Function Interface has been improved.