| 
				
				
				
				 | 
			
			 | 
			
			@ -1,8 +1,12 @@ | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			# `ink` | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			> *Any information here is subject to change and may already not be inaccurate anymore* | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			> *Here be dragons, you may have dug too deep* | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			`ink` is a minimalistic interpreted programming language, tentatively implemented exclusively in C89. It features  | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			coroutines and can currently only manipulate integers. Part of the code may not be compliant with C89 and I will try to  | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			fix that in time. | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			coroutines and can currently manipulate integers and arrays of integers, which can be interpreted as strings of Unicode | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			codepoints. Part of the code may not be compliant with C89 and I will try to fix that in time. | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			It is fully self-contained and doesn't rely on a working standard library beyond the following: | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
	
		
			
				| 
				
					
						
					
				
				
					
						
					
				
				
				 | 
			
			 | 
			
			@ -31,6 +35,26 @@ It is possible to segregate unsafe allocations (allocations that should be hidde | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			- Functions have a count limit 128 labels (see `ink_parse`) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			- Only non-main functions can use labels | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			## Roadmap | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			- Greater homoiconicity | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    - Can get a list of the words | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    - Can get words as arrays | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    - Can execute arrays as words | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    - Can manually create or modify | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    - Can read a routine program stack | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    - Can read a routine instruction counter stack | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    - Can read a routine stack | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    - Can set a routine status | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			- Word redefinition (with a flag) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			- 9front port | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    - 9front shell | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			- Shell able to run external program and parse IO from other programs | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			- Shell can import files (requires waiting for a routine in a routine) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			- Waiting for another routine | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			- Executing other routines | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			- Move shell words to base implementation *iff* they do not have any external dependency (e.g.: `version`)  | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			## Examples | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			### Hello World | 
			
		
		
	
	
		
			
				| 
				
					
						
					
				
				
				
				 | 
			
			 | 
			
			
 |