login  home  contents  what's new  discussion  bug reports     help  links  subscribe  changes  refresh  edit

Edit detail for FriCAS Algebra revision 1 of 2

1 2
Editor: test1
Time: 2015/09/22 16:39:35 GMT+0
Note:

changed:
-
In FriCAS the word 'algebra' normally means collection of constructors
(categories, domains and packages) provided with FriCAS.  The source code
for algebra is contained in 'src/algebra' subdirectory of the FriCAS source
tree.  Below we use 'algebra' to mean just a single part (a single constructor
or a small collection of tightly coupled constructors).

Adding new algebra in FriCAS

  The process of adding new algebra to FriCAS is considerable different
from Axiom and OpenAxiom.  FriCAS no longer uses the old Lisp bootstrap
method. Instead the build proceeds directly from the SPAD source code
in several phases.  The dependencies between SPAD modules are no longer
so critical and build process should handle them automatically.

To add new algebra code you need:

1) Create a new file(s) and and it to the SPAD_SRCS variable in
   src/algebra/Makefile.in.  This step is not needed if you
   are adding code to an already existing file.

2) Add the constructor(s) (more precisely its abbreviation(s)) to apropriate SPADLIST variable
   in src/algebra/Makefile.in.  To assist parallel build abbreviations
   are divided between several variables, in lexicographic order.

3) If you are adding a category and it to the CATLIST variable in
   src/algebra/Makefile.in

4) If you are adding category with default implementation add it
   to the CATDOMS variable in src/algebra/Makefile.in

5) If you are adding a domain which should be subject to inlining optimization
   add it to DOMLIST variable in src/algebra/Makefile.in (to activate inlining
   you also need to add it to '|$optimizableConstructorNames|' in
   src/interp/setq.lisp

Rebuilding the algebra from scratch

Historically building algebra was a compilcated process.  FriCAS has
special support to simplify it.  Basic idea is that once declarations
of constructors and exported functions are known we can compile implementation
parts in any order.  FriCAS contains special function which performs
first part of algebra build collecting informations about constructors.
There is an extra complication because we want inlining optimization:
calls to simple function in a few core domains are replaced by
function bodies.  Fortunately all this is handled by the algbera
Makefile and to add new constructor it is enough to follow instructions above.

Note: FriCAS algebra is build from scratch during full build.  However
release tarball contains partially compiled machine independent files,
which saves build time, but means that actual Spad files are not used.
To force full rebuild one can remove 'pre-generated' directory from the
source tree, (re)configure and build.

In FriCAS? the word algebra normally means collection of constructors (categories, domains and packages) provided with FriCAS?. The source code for algebra is contained in src/algebra subdirectory of the FriCAS? source tree. Below we use algebra to mean just a single part (a single constructor or a small collection of tightly coupled constructors).

Adding new algebra in FriCAS?

The process of adding new algebra to FriCAS? is considerable different from Axiom and OpenAxiom?. FriCAS? no longer uses the old Lisp bootstrap method. Instead the build proceeds directly from the SPAD source code in several phases. The dependencies between SPAD modules are no longer so critical and build process should handle them automatically.

To add new algebra code you need:

1) Create a new file(s) and and it to the SPAD_SRCS variable in src/algebra/Makefile.in. This step is not needed if you are adding code to an already existing file.

2) Add the constructor(s) (more precisely its abbreviation(s)) to apropriate SPADLIST variable in src/algebra/Makefile.in. To assist parallel build abbreviations are divided between several variables, in lexicographic order.

3) If you are adding a category and it to the CATLIST variable in src/algebra/Makefile.in

4) If you are adding category with default implementation add it to the CATDOMS variable in src/algebra/Makefile.in

5) If you are adding a domain which should be subject to inlining optimization add it to DOMLIST variable in src/algebra/Makefile.in (to activate inlining you also need to add it to |$optimizableConstructorNames| in src/interp/setq.lisp

Rebuilding the algebra from scratch

Historically building algebra was a compilcated process. FriCAS? has special support to simplify it. Basic idea is that once declarations of constructors and exported functions are known we can compile implementation parts in any order. FriCAS? contains special function which performs first part of algebra build collecting informations about constructors. There is an extra complication because we want inlining optimization: calls to simple function in a few core domains are replaced by function bodies. Fortunately all this is handled by the algbera Makefile and to add new constructor it is enough to follow instructions above.

Note: FriCAS? algebra is build from scratch during full build. However release tarball contains partially compiled machine independent files, which saves build time, but means that actual Spad files are not used. To force full rebuild one can remove pre-generated directory from the source tree, (re)configure and build.