Preface

When, in 1986, I first read Donald Knuth's technical report on Web[Knuth83]
[1], and tried Web out, I was simultaneously excited by Knuth's idea of literate programming, and disappointed by his implementation of it. I was excited because I could sense the potential for the literate style to transform the state of mind of the programmer, but was disappointed by Web's rigidity and lack of practicality, which seemed to betray this potential. The Web I used was Pascal-specific, TEX-specific, and applied too many constraints to the programming process. In particular, it insisted on taking control of the program text, mangling the code in the Pascal output files, and imposing its own rather rigid ideas about indenting in the TEX output. All this, combined with the complexity of the tool, led me to come to perceive Web as problem rather than solution.

Despite all this, I was well and truly hooked on the idea of literate programming. The inevitable result was that I designed and implemented my own version of Web — FunnelWeb!

FunnelWeb is not the most sophisticated literate programming tool available, but it is an extremely practical tool, striving for simplicity and portability in all areas. Not only is FunnelWeb language-independent, and to some extent typesetter independent, but its implementation also stresses portability, being written in C, and currently operating on four major platforms (Sun, Vax, PC, Mac). FunnelWeb allows the programmer total control over the output file, making it suitable for use with all sorts of format-sensitive languages. It also allows control over its own source code, which has been released under a GNU license. FunnelWeb is quite solid, having to pass a regression testing suite of over 200 tests before being released. Finally, FunnelWeb is well documented by this manual which provides a tutorial, advanced hints, and a language definition.

I would like to dedicate FunnelWeb and this manual to Donald Knuth and his literate programming tool Web. Although this manual is somewhat critical of some aspects of Web, this criticism is really a product of differing design goals. Knuth designed a paradigm (literate programming) and a tool (Web) aimed at the highest pitch of program presentation and typesetting. FunnelWeb aims lower, relaxing constraints, and making compromises in order to achieve simplicity, flexibility, and portability. The result is a practical tool which I hope will attract more people to the literate style.


Ross N. Williams
Adelaide, Australia
May 1992