Classic literate programming has language specific tools (WEB for Pascal, CWEB for C++,
and FWEB for Fortran). The language independent approach sacrifices some pretty-printing
and indexing abilities for generality (noweb, FunnelWeb, and nuweb). Other approaches
recognize pseudo statements written as comments in the source code instead of relying on
a secondary WEB source file. These systems are used for interface documentation (JavaDoc,
doxygen, DOC++, autoduck, POD) or for literate programming (CLiP, cnoweb).
Literate Programming Tools
- The CWEB System of Structured
Documentation is a version of WEB for documenting C, C++, and Java programs. WEB was
adapted to C by Silvio Levy in 1987, and since then both Knuth and Levy have revised and
enhanced the system in many ways, notably to support C++ and ANSI C. Thus CWEB combines
TeX with today's most widely used professional programming languages.
- nuweb works with any programming
language and LaTeX.
- noweb is designed to meet the
needs of literate programmers while remaining as simple as possible. Its primary
advantages are simplicity, extensibility, and language-independence. Noweb uses 5 control
sequences to WEB's 27. The noweb manual is only 3 pages; an additional page explains how
to customize its LaTeX output. Noweb works "out of the box" with any programming
language, and supports TeX, latex, and HTML back ends. A back end to support full
hypertext or indexing takes about 250 lines; a simpler one can be written in 40 lines of
awk. The primary sacrifice relative to WEB is that code is seldom prettyprinted.
- FunnelWeb is a powerful
literate-programming macro preprocessor that enables you to weave programs and
documentation together. FunnelWeb is a production quality tool that was specifically
engineered for practical everyday use.
- Rambutan is a literate programming
system for Java, quite similar to CWEB and the original WEB system.
- FWEB is a WEB system of
structured documentation for multiple languages (FORTRAN).
- SGML and Literate
Programming Collection of references for literate programming techniques and style in
the context of descriptive markup languages, e.g., SGML, XML, DSSSL, HyTime, etc.
Numerous researchers have observed that the goals of information re-use and data
normalization embraced by both literate programming and SGML-based markup languages
provide the basis for using the two technologies together.
- xmLP is a literate programming tool
written in XSL-T. xmLP differs from traditional literate programming tools when it comes
to weaving. Traditionally, weaving involves both generating cross-reference information
and producing formatted output. However, tools like XSL-T make it unnecessary for an XML
literate programming tool to deal with display rendering. Hence the xmLP weaver is
intentionally minimalist, and does nothing except add cross-reference information to the
original literate document.
- OCAMAWEB is a CWEB like literate
programming tool. It is designed to target all languages and actually has a version
targeting the MATLAB language. OCAMAWEB is written in the OCAML programming language.
OCAMAWEB is actually intensively used at MIRIAD Technologies to produce technical
documentation for MATLAB codes.
- Thinking With Style
This article is itself a software book. You can compile this book into an executable
program. A ?What You See Is What You Get? (WSYWIG) editor (Word 2003) created the
software book. The book is stored as XML.
Literate Programming - Editors
- Leo is a new kind of
programmer's editor. Leo shows user-created relationships among any kind data: computer
programs, web sites, etc. Leo is an outlining editor for programmers. Leo can handle
any text-based programming language: Java, C, C++, Pascal, Fortran, Perl, Icon, Python,
Smalltalk, Cobol, whatever. Leo can also generate HTML and make, shell or batch files.
- VIM is an improved version of the editor "vi", one
of the standard text editors on UNIX systems. VIM adds many of the features that you
would expect in an editor: Unlimited undo, syntax coloring, split windows, visual
selection, graphical user interface (read: menus, mouse control, scrollbars, text
selection), and much much more. Syntax highlighting for CWEB source code is included.
Literate Programming - Supporting Tools
- MikTex TeX is a typesetting system
written by Donald Knuth, who says that it is "intended for the creation of beautiful
books and especially for books that contain a lot of mathematics".
- Acrobat Reader
View, navigate, and print PDF (portable document format) files.
- Cygwin tools are ports of the popular
GNU development tools for Windows 9x/ME/NT/2000. As a result, it is possible to easily
port many significant Unix programs without the need for extensive changes to the source
code. Even if the development tools are of little to no use to you, you may have interest
in the many standard Unix utilities provided with the package. They can be used both from
the bash shell (provided) or from the standard Windows command shell.
Lint - Static Checkers
- PC Lint will check your C/C++ source
code and find bugs, glitches, inconsistencies, non-portable constructs, redundant code,
and much more. It looks across multiple modules, and so, enjoys a perspective your compiler
does not have.
- Klocwork provides automated solutions that
analyze and understand C, C++, and Java code. Our solutions provide predictable and
measurable ROI by: preventing new defects from entering the build, detecting security
vulnerabilities and existing defects, providing powerful architectural analyses, and
delivering comprehensive development reporting.
- QA C++ Deep Flow Static Analyzer
Detects language implementation errors, inconsistencies, obsolescent features and
programming standard transgressions quickly and efficiently, avoiding delays at a later
and more expensive stage of the development cycle. QA·C++ combines many industry-standard
analysis metrics including cyclomatic complexity and estimated static program paths with
easy-to-understand, flexible reporting. Our Code Integrity Management System (CIMS) uses
QA C, QA C++, and special product configurations such as the Misra Compliancy Module.
- Parasoft C++Test is a unique coding standards
enforcement tool that uses patented Source Code Analysis technology to help developers
prevent errors and standardize C/C++ code automatically. CodeWizard spontaneously
enforces C/C++ coding standards, saving hours of labor-intensive analysis.
- CodeCheck is designed to solve all of your
portability, maintainability, complexity, reusability, quality assurance, style analysis,
library/class management, code review, software metric, standards adherence, and C++
corporate compliance problems.
Lint - Dynamic Checkers
provides clear, detailed analyses of programming errors, many of which are unique to C++.
It detects and diagnoses errors in static, stack and heap memory, and in memory and
resource leaks. BoundsChecker validates over 8,700 APIs and OLE Methods at run-time,
including the latest Windows APIs, ODBC, ActiveX, DirectX, COM, and Internet APIs.
- Intel Inspector
Find errors early?when they are less expensive to fix. Intel® Inspector is an easy-to-use memory
and threading error debugger for C, C++ and Fortran applications that run on Windows and Linux.
No special compilers or builds are required. Just use a normal debug or production build. Use the
graphical user interface or automate regression testing with the command line.