README for the Dule compiler

$Id: README,v 1.15 2005/07/26 22:40:48 mikon Exp $

1. Copyright

The Dule language definition, documentation and web-pages are
Copyright (C) 2003, 2004, 2005 Mikolaj Konarski
http://zls.mimuw.edu.pl/~mikon/home.english.html
mikon@mimuw.edu.pl

The Dule compiler is 
Copyright (C) 2003, 2004, 2005 Patryk Czarnik, Andrzej Gasienica-Samek, 
Mikolaj Konarski, Piotr Roszkowski and Stasiek Skowron.

2. License

The Dule compiler is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.

The Dule compiler is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with the Dule compiler inside file Dule-LICENSE; 
if not, write to the Free Software Foundation, Inc., 
59 Temple Place, Suite 330, Boston, MA  02111-1307  USA

3. Requirements

You need version >= 3.06 of Objective Caml compiler suite
  http://caml.inria.fr/
available, among others, in .deb format
  http://packages.debian.org/testing/devel/ocaml.html

4. Installation

In directory "code" run "make" to compile 
and "make test" to verify the compilation.

On slow machine uncomment "OCAMLFLAGS := -noassert" in Makefile
before compilation. This speeds up tests considerably.
By default the compilation is set to generate native code.
Byte compilation takes roughly the same time
and memory, while the resulting executable runs 3 times slower.

To highlight Dule (and OCaml) syntax in Emacs 
install caml-mode (Debian package ocaml does this for you)
then do
  ln -s dule/.dule-font.el $HOME
and put
  (load "~/.dule-font")
into your .emacs file.

5. Conventions for value naming in the code

- c and also d, e, a, b stand for categories (FCat.cat)
- c when appropriate is used for sources of functors and e for targets
- f and also g, h range over functors (FFunct.funct,
  as well as types (BCore.typ, parser.mly)
- f is rather used for domains of transformations and h for codomains
- t and also u stand for transformations (FTrans.trans)
  and for values (BCore.valu, parser.mly)
- numerical and other postfixes and all sensible deviations are allowed
- l is a prefix for ilists, so lc : FCat.cat IList.t, lt : FTrans.trans IList.t
- i, j, k stand for labels (Index.t)
- s for strings
- er for error messages
- var_num for variable numbers
- l_stamp for ilist stamps
- v for values inside indexed lists in general
- r for rest of lists in folds and pattern-matching
- s and also r is used for IDule.sign, r rather for domains s for codomains
- m stands for modules (IDule.dule, BDule.dule)
- p and q stand for specifications (BDule.spec)

6. Other conventions for the coding style

- most of those listed in "Caml programming guidelines" 
    http://caml.inria.fr/FAQ/pgl-eng.html
- in particular: The page is 80 columns wide. 
