44 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
			
		
		
	
	
			44 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
| 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
 |