parent
							
								
									7ba13a415a
								
							
						
					
					
						commit
						a4fb851f3d
					
				
							
								
								
									
										34
									
								
								doc/docs.md
								
								
								
								
							
							
						
						
									
										34
									
								
								doc/docs.md
								
								
								
								
							|  | @ -124,6 +124,7 @@ For more details and troubleshooting, please visit the [vab GitHub repository](h | |||
|     * [v fmt](#v-fmt) | ||||
|     * [Profiling](#profiling) | ||||
| * [Advanced Topics](#advanced-topics) | ||||
|     * [Dumping expressions at runtime](#dumping-expressions-at-runtime) | ||||
|     * [Memory-unsafe code](#memory-unsafe-code) | ||||
|     * [Structs with reference fields](#structs-with-reference-fields) | ||||
|     * [sizeof and __offsetof](#sizeof-and-__offsetof) | ||||
|  | @ -3284,6 +3285,39 @@ fn main() { | |||
| 
 | ||||
| # Advanced Topics | ||||
| 
 | ||||
| ## Dumping expressions at runtime | ||||
| You can dump/trace the value of any V expression using `dump(expr)`. | ||||
| For example, save this code sample as `factorial.v`, then run it with | ||||
| `v run factorial.v`: | ||||
| ```v | ||||
| fn factorial(n u32) u32 { | ||||
| 	if dump(n <= 1) { | ||||
| 		return dump(1) | ||||
| 	} | ||||
| 	return dump(n * factorial(n - 1)) | ||||
| } | ||||
| 
 | ||||
| fn main() { | ||||
| 	println(factorial(5)) | ||||
| } | ||||
| ``` | ||||
| You will get: | ||||
| ``` | ||||
| [factorial.v:2] n <= 1: false | ||||
| [factorial.v:2] n <= 1: false | ||||
| [factorial.v:2] n <= 1: false | ||||
| [factorial.v:2] n <= 1: false | ||||
| [factorial.v:2] n <= 1: true | ||||
| [factorial.v:3] 1: 1 | ||||
| [factorial.v:5] n * factorial(n - 1): 2 | ||||
| [factorial.v:5] n * factorial(n - 1): 6 | ||||
| [factorial.v:5] n * factorial(n - 1): 24 | ||||
| [factorial.v:5] n * factorial(n - 1): 120 | ||||
| 120 | ||||
| ``` | ||||
| Note that `dump(expr)` will trace both the source location,  | ||||
| the expression itself, and the expression value. | ||||
| 
 | ||||
| ## Memory-unsafe code | ||||
| 
 | ||||
| Sometimes for efficiency you may want to write low-level code that can potentially | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue