12345678910111213141516171819202122232425262728293031323334353637383940414243 |
- Design Of lib/System
- ====================
- The software in this directory is designed to completely shield LLVM from any
- and all operating system specific functionality. It is not intended to be a
- complete operating system wrapper (such as ACE), but only to provide the
- functionality necessary to support LLVM.
- The software located here, of necessity, has very specific and stringent design
- rules. Violation of these rules means that cracks in the shield could form and
- the primary goal of the library is defeated. By consistently using this library,
- LLVM becomes more easily ported to new platforms since the only thing requiring
- porting is this library.
- Complete documentation for the library can be found in the file:
- llvm/docs/SystemLibrary.html
- or at this URL:
- http://llvm.org/docs/SystemLibrary.html
- While we recommend that you read the more detailed documentation, for the
- impatient, here's a high level summary of the library's requirements.
- 1. No system header files are to be exposed through the interface.
- 2. Std C++ and Std C header files are okay to be exposed through the interface.
- 3. No exposed system-specific functions.
- 4. No exposed system-specific data.
- 5. Data in lib/System classes must use only simple C++ intrinsic types.
- 6. Errors are handled by returning "true" and setting an optional std::string
- 7. Library must not throw any exceptions, period.
- 8. Interface functions must not have throw() specifications.
- 9. No duplicate function impementations are permitted within an operating
- system class.
- To accomplish these requirements, the library has numerous design criteria that
- must be satisfied. Here's a high level summary of the library's design criteria:
- 1. No unused functionality (only what LLVM needs)
- 2. High-Level Interfaces
- 3. Use Opaque Classes
- 4. Common Implementations
- 5. Multiple Implementations
- 6. Minimize Memory Allocation
- 7. No Virtual Methods
|