Introduction

This guide assumes that the reader is familiar with the basics of distributed application programming: RPCs, RMIs, IDLs, and the various distributed computing standards such as CORBA and ONC RPC. Readers who are unfamiliar with distributed computing should review these terms before proceeding through this manual.

1.1 What is Flick?

Flick is a flexible and optimizing compiler for interface definition languages (idls). The name "Flick" is an acronym for "Flexible idl Compiler Kit." Like a traditional idl compiler, Flick can read a high-level specification describing an interface to a software component or module, and from that, produce special functions called stubs that implement the interface in the C or C++ programming language. The stubs implement remote procedure call (rpc) or remote method invocation (rmi) semantics and allow separate client and server processes to communicate through what appear to be ordinary, local procedure calls or method invocations.

Unlike traditional idl compilers, however, Flick is implemented as a set of programs, each handling a single phase of compilation. These separate programs allow Flick to support features beyond the capabilities of ordinary idl compilers:

Flick is being developed as part of the Flux Operating Systems Project at the University of Utah. However, Flick is intended to be an open "kit" that others will extend and adapt for their own projects.

1.2 Organization of this Document

Part I of this manual, which you are reading now, introduces Flick. Chapter 2 contains an overview of Flick's components, a catalog of the directories in the Flick source tree, and a summary of the coding style used in the Flick sources.

Part II of this manual describes the data structures that Flick uses at different stages of idl compilation. These data structures are the intermediate "languages" used by different parts of Flick and include:

Understanding these intermediate languages -- and the associated libraries for using them -- is critical to understanding Flick overall.

In Part III, this manual describes the inner workings of Flick's front ends (Chapter 10), presentation generators (Chapter 11), and back ends (Chapter 12). The chapters in this part of the manual describe the individual implementations of each compiler stage, as well as the libraries that are common to each stage. The guide concludes with a summary of the runtime libraries that provide support to the code generated by Flick's various back ends (Chapter 13).

In summary, this document is intended to be a programmer's guide to the inner workings of Flick: the overall architecture, the intermediate data structures, and the individual Flick compiler programs and libraries. This "road map" can only take you so far, however, and it is not a substitute for actually reading and working through the Flick source code. Flick is complex but not obscure -- don't be afraid to read the code!