Next: , Previous: Top, Up: Top


1 Introduction

Nana is a library that provides support for assertion checking and logging in a space and time efficient manner. The aim is to put common good practice1 into a library that can be reused rather than writing this stuff every time you begin a new project.

In addition assertion checking and logging code can be implemented using a debugger rather than as inline code with a large saving in code space.

Nana aims to solve the following problems:

  1. Avoid the two executables problem (one with asserts in and another without any).

    The code space and time costs of having assertion checking and detailed logging code in a program can be high. Normally people construct two versions of the program, one with checking code for testing and one without checking code for production use.

    With nana one version of the executable can be built for both testing and release since debugger based checking has negligible space and time impact.

  2. Configurable: the nana library is designed to be reconfigured by the user according to their needs. For example we can:
  3. Time and space efficient.

    For example the GNU ‘assert.h’ implementation uses 53 bytes for ‘assert(i>=0)’ on a i386. The nana version using the i386 ‘stp’ instruction on assert fail uses 10 bytes. If you're willing to accept the time penalty this can be reduced to 0 or 1 byte by using debugger based assertions.

  4. Support for formal methods.

The intended audience for Nana includes:


Footnotes

[1] Which is unfortunately quite uncommon in the authors experience.

[2] Precondition: a boolean expression which must be true if the operation is to succeed. For example the ‘sort(int *v, int n)’ might have have precondition that ‘v != NULL && n >= 0’.

[3] Postcondition: a boolean expression that must be true if the operation is correct (and the precondition was true on entry).