axiom-developer
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Axiom-developer] Re: Axiom wiki


From: root
Subject: Re: [Axiom-developer] Re: Axiom wiki
Date: Fri, 9 Jul 2004 21:50:47 -0400

Bob,

Axiom uses noweb (http://www.eecs.harvard.edu/~nr/noweb)
as its literate programming tool. Historically Knuth constructed
a program called "Web" for literate programming, to support the
coding of Tex, I believe. He wanted to integrate the explanation
with the code.

Web has two tools, "TANGLE" which takes a literate program and
produces source code and "WEAVE" which takes a literate program
and produces TeX output. Web worked only with Pascal code.

CWeb is the same idea using C.

noweb is the same idea but generalizes Web to be language independent.
noweb uses "NOWEAVE" to generate TeX output and "NOTANGLE" to extract
"chunks". (Chunks are just named blocks that get stuck in a hash table
when they are defined. They get expanded when the name is used).

Axiom was completely rewritten to use a literate programming style
that combines code and documentation in one document we call a pamphlet.
(noweb calls these .nw files). So there are no C, Lisp, Spad, Makefile,
tex, or any other files left. Everything is a pamphlet combining code
and documentation.

So the current process is:

noweave foo.pamphlet >foo.tex
latex foo.tex

notangle foo.pamphlet >foo.c
gcc foo.c

for each and every file that makes up Axiom. 

This means that every source file is also a document. These documents
are automatically generated and live under mnt/linux/doc in the
distribution. 

There are thousands of these documents.

So several interesting issues arise which Bill's work could address.

First, the system is documented by a book (src/doc/book.pamphlet).
Bill is working to put this book online. In particular, he is
automatically recreating the Axiom output which is a very wide
range of test cases. 

Second, chapter 9 of the book is a small selection of the 1100 domains.
All of these domains are documented (poorly) under mnt/linux/doc/algebra
which is where the latex output is placed. If chapter 9 was restructured
carefully we could have all of the domains documented.

Third, since there are several thousand files the need for some
sort of structuring mechanism (search, hierarchy, crosslinks) arises.
Browser technology gives all of this a common front end. And .dvi
files can contain hyperlink information (some of the \bibitem entries
are hyperlink format already). Bill and I, and others, have talked
about forming the lattice of the algebra code. Such a lattice would
make at least one good structuring mechanism for the mathematics.
Javadoc style navigation output is another possibility. Even simple
alphabetic order access to domain documentation would be useful.

Fourth, other systems, such as Mathematica have notebooks which contain
code to demonstrate how to use Mathematica in a new domain such as
control theory. I can see developing web pages to explain control
theory backed by Axiom code. Indeed, the example I'm pursuing at
the moment, learning about Clifford algebra, is a case in point.
(http://page.axiom-developer.org/zope/Plone/wiki/June32004).

Fifth, work is going on in another thread to develop another Axiom
book based on Littlewood's book. Assuming the copyright permission
is given we can release this on the wiki. This would be an experiment
in "open editing" a book related to the mathematics that is essential
to understanding Axiom. 

Sixth, Axiom generates graphics. With some help from Luanne, who
understands how to create Flash files, it should be possible to 
generate Flash graphics so that equations can "evolve in time".
That is, you could run a program to create Flash which shows 
how a function might evolves. This would be useful in many areas
(trivially you could automate a 3D wave function and watch it
undulate).

The range of ideas goes on but from these beginning examples you can
understand why the work Bill and you are doing is really a great
breakthru.

Tim






reply via email to

[Prev in Thread] Current Thread [Next in Thread]