The Project


This is; this website contains everything associated with the TenDRA Project.

TenDRA is a three clause BSD-licensed C and C++ compiler, with C++ STL support forthcoming. The original Crown copyright from DERA is still present and the further expansion of TenDRA is under the BSD license.

TenDRA uses the Architecture Neutral Distribution Format (ANDF) as its intermediate language. This intermediate language focuses on abstracting into a high level language instead of an assembler-like language as is common with most compilers (think RTL). This makes TenDRA powerful in code verification and checking.

Aside from the TenDRA compiler suite the TenDRA Project also features some other projects, all BSD-licensed. The TenDRA Suite Purpose Overview document tours the most significant of these.

Recent news

  • 2007-09-19: Added section detailing which platforms are targeted. This covers dialects of make and the like.

  • 2007-09-15: We've grown a few more developers! Of particular interest: Tobias has been working on supporting OpenBSD (especially to allow TenDRA to build using its native make), and Kevin developing more expressive features for Lexi.

  • 2007-07-30: Lexi 1.3 is now released. This is a backwards-compatible release intended for existing users only. This includes a freshly-written user guide which was reverse-engineered from the source code. The interfaces to Lexi are due to change dramatically in forthcoming versions.

  • 2007-07-09: Added Kevin Santugini's developers' guide for SID. This is our first developer-orientated document!

  • 2007-07-05: As a side-effect from work on a docbook-to-ConTeXt system I'm writing elsewhere, the manpages are now available as PDF.


The goals of the TenDRA project are:

  1. To continuously produce correct code,

    The most important part of a compiler is to have correct code being output.

  2. to ensure code correctness through various means,

    One of the ways to accomplish that TenDRA continuously outputs correct code it will be defined used a formal notation, such as ACL2 or Z Notation.

  3. to continuously improve the performance of the compiler and resulting code, unless it would jeopardise the points above.

    Having a fast compiler is very important, especially in large projects, however, speed should never sacrifice code correctness.