add library implementation note
This commit is contained in:
		
							parent
							
								
									43dccb30a4
								
							
						
					
					
						commit
						c7f4d6e791
					
				|  | @ -0,0 +1,15 @@ | |||
| # 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. | ||||
		Loading…
	
		Reference in New Issue
	
	 Yuichi Nishiwaki
						Yuichi Nishiwaki