docs: expand the explanation for the `[unsafe]` fn tag
							parent
							
								
									6048d0e974
								
							
						
					
					
						commit
						4c7b6ce2fd
					
				
							
								
								
									
										20
									
								
								doc/docs.md
								
								
								
								
							
							
						
						
									
										20
									
								
								doc/docs.md
								
								
								
								
							|  | @ -4043,12 +4043,28 @@ fn bar() { | ||||||
| 	foo() // will not be called if `-d debug` is not passed | 	foo() // will not be called if `-d debug` is not passed | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // Calls to this function must be in unsafe{} blocks | // Calls to following function must be in unsafe{} blocks. | ||||||
|  | // Note that the code in the body of `risky_business()` will still be | ||||||
|  | // checked, unless you also wrap it in `unsafe {}` blocks. | ||||||
|  | // This is usefull, when you want to have an `[unsafe]` function that | ||||||
|  | // has checks before/after a certain unsafe operation, that will still | ||||||
|  | // benefit from V's safety features. | ||||||
| [unsafe] | [unsafe] | ||||||
| fn risky_business() { | fn risky_business() { | ||||||
|  | 	// code that will be checked, perhaps checking pre conditions | ||||||
|  | 	unsafe { | ||||||
|  | 		// code that *will not be* checked, like pointer arithmetic, | ||||||
|  | 		// accessing union fields, calling other `[unsafe]` fns, etc... | ||||||
|  | 		// Usually, it is a good idea to try minimizing code wrapped | ||||||
|  | 		// in unsafe{} as much as possible. | ||||||
|  | 		// See also [Memory-unsafe code](#memory-unsafe-code) | ||||||
|  | 	} | ||||||
|  | 	// code that will be checked, perhaps checking post conditions and/or | ||||||
|  | 	// keeping invariants | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // V's autofree engine will not take care of memory management in this function | // V's autofree engine will not take care of memory management in this function. | ||||||
|  | // You will have the responsibility to free memory manually yourself in it. | ||||||
| [manualfree] | [manualfree] | ||||||
| fn custom_allocations() { | fn custom_allocations() { | ||||||
| } | } | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue