% "chapters/intro.tex"
%	$Id: intro.tex,v 1.2 2005/05/08 20:50:41 fang Exp $

\chapter{Introduction}
\label{sec:intro}

The purpose of this document is to describe the intermediate file
format used by the \hackt.  
DISCLAIMER: This is a \emph{draft} of the proposed format.  
Before you panic, all the details for \emph{how} objects are
written-out and reconstructed are implemented through 
the \hackt's persistent object manager (POM) library.  
The POM provides a simple clean functional interface and masks
all the details.  
Some of those details (for the maintainers) are described in
the Persistence chapter of ``Fang's C++ Utility Belt'', a separate document.  

\hackt\ is designed to unify the information associated with a design
through a consistent interface.  
Every design flow has numerous tools to perform synthesis, analysis, 
and optimization.  
The information required and generated by each tool often overlaps
with information handled by other tools.  
With \hackt, we provide a mechanism for passing and storing arbitrary data 
between tool invocations.  

The first objective of establishing this format is to provide
derivative tools access to all information in the full design hierarchy, 
enabling manipulation of information in definitions and individual instances.  
A lesser objective of the file format is to minimize the amount
of stored data, i.e. eliminate redundantly redundant redundancy.  

To resolve:
For all structures described in this document, 
what debug information should be stored (source file, line, offset)?
This could potentially encumber the object file a lot...

