16 lines
		
	
	
		
			904 B
		
	
	
	
		
			Markdown
		
	
	
	
			
		
		
	
	
			16 lines
		
	
	
		
			904 B
		
	
	
	
		
			Markdown
		
	
	
	
| # How to implement `define-library`?
 | |
| 
 | |
| * define-library can be nested
 | |
| * expressions inside define-library are compiled and evaluated in order sequentially
 | |
| * import declarations inside define-library and on the top level are semantically the same
 | |
| * each define-library creates one syntactic-env
 | |
| * and the body is evaluated as if it's on the top level
 | |
| * so each `toplevel definitions`' results are registered to the global table
 | |
| * but their renamed symbols are known only to who imported the library.
 | |
| 
 | |
| ## export table
 | |
| 
 | |
| * import syntax destructively registers renamed symbols taken from export table of the specified library to syntactic env of the library
 | |
| * export syntax registers correspoindings of original and renamed symbols to export table of the current library
 | |
| * therefore, we need some kind of `forward declaration` support, because export syntax is usually placed at the beginning of source code.
 |