|
| 1 | +<!-- Instead of rewriting our own feature checklist from scratch, we make a derivative of the |
| 2 | +[Verus checklist](https://github.com/verus-lang/verus/blob/main/source/docs/guide/src/features.md) |
| 3 | +which is available for use under [MIT](https://github.com/verus-lang/verus/blob/main/LICENSE) |
| 4 | +license. |
| 5 | +--> |
| 6 | + |
| 7 | +**Last Updated: 2025-04-10** |
| 8 | + |
| 9 | +## Items |
| 10 | +|Feature|Status| |
| 11 | +|-------|------| |
| 12 | +|Functions, methods, associated functions|Supported| |
| 13 | +|Associated constants|Not supported| |
| 14 | +|Structs|Partially supported| |
| 15 | +|Enums|Partially supported| |
| 16 | +|Const functions|Not supported| |
| 17 | +|Async functions|Not supported| |
| 18 | +|Macros|N/A (MIR)| |
| 19 | +|Type aliases|Not supported| |
| 20 | +|Const items|Not supported| |
| 21 | +|Static items|Not supported| |
| 22 | + |
| 23 | +## Struct/enum definitions |
| 24 | +|Feature|Status| |
| 25 | +|-------|------| |
| 26 | +|Type parameters|Not supported| |
| 27 | +|Where clauses|Not supported| |
| 28 | +|Lifetime parameters|Not supported| |
| 29 | +|Const generics|Not supported| |
| 30 | +|Custom discriminants| Supported| |
| 31 | +|Public / private fields|N/A (MIR)| |
| 32 | + |
| 33 | +## Expressions and Statements |
| 34 | +|Feature|Status| |
| 35 | +|-------|------| |
| 36 | +|Variables, assignment, mutable variables|Supported| |
| 37 | +|`if`, `else`|Supported| |
| 38 | +|Patterns, `match`, `if let`, match guards|Supported| |
| 39 | +|Block expressions|Supported| |
| 40 | +|Items|Supported| |
| 41 | +|`loop`, `while`|Supported| |
| 42 | +|`for`|Not supported (`Range` not supported)| |
| 43 | +|`?`|Supported| |
| 44 | +|Async blocks|Not supported| |
| 45 | +|`await`|Not supported| |
| 46 | +|Unsafe blocks|Supported| |
| 47 | +|`&`|Supported| |
| 48 | +|`&mut`, place expressions|Supported| |
| 49 | +|`==`, `!=`|Supported| |
| 50 | +|Type cast (`as`)|Partially supported| |
| 51 | +|Compound assigments (`+=`, etc.)|Supported| |
| 52 | +|Array expressions|Not supported| |
| 53 | +|Range expressions|Not supported| |
| 54 | +|Index expressions|Not supported (Arrays not supported)| |
| 55 | +|Tuple expressions|Supported| |
| 56 | +|Struct/enum constructors|Not supported| |
| 57 | +|Field access|Supported| |
| 58 | +|Function and method calls|Supported| |
| 59 | +|Closures|Supported| |
| 60 | +|Labels, break, continue|Supported| |
| 61 | +|Return statements|Supported| |
| 62 | + |
| 63 | +## Integer arithmetic |
| 64 | +|Feature|Status| |
| 65 | +|-------|------| |
| 66 | +|Arithmetic for unsigned|Supported| |
| 67 | +|Arithmetic for signed (`+`, `-`, `*`, `/`, `%`)|Supported| |
| 68 | +|Bitwise operations (`&`, `\|`, `!`, `>>`, `<<`)|Supported| |
| 69 | +|Arch-dependent types (`usize`, `isize`)|Not supported (fixed width) | |
| 70 | + |
| 71 | +## Types and standard library functionality |
| 72 | +|Feature|Status| |
| 73 | +|-------|------| |
| 74 | +|Integer types|Supported| |
| 75 | +|`bool`|Supported| |
| 76 | +|Strings|Not supported| |
| 77 | +|`Vec`|Not supported| |
| 78 | +|`Option` / `Result`|Supported| |
| 79 | +|Floating point|Not supported| |
| 80 | +|Slices|Not supported| |
| 81 | +|Arrays|Not supported| |
| 82 | +|Pointers|Not supported| |
| 83 | +|References (`&`)|Supported| |
| 84 | +|Mutable references (`&mut`)|Supported| |
| 85 | +|Never type (`!`)|Not supported| |
| 86 | +|Function pointer types|Not supported| |
| 87 | +|Closure types|Supported| |
| 88 | +|Trait objects (`dyn`)|Not supported| |
| 89 | +|`impl` types|Not supported| |
| 90 | +|`Cell`, `RefCell`|Not supported| |
| 91 | +|Iterators|Not supported| |
| 92 | +|`HashMap`|Not supported| |
| 93 | +|Smart pointers (`Box`, `Rc`, `Arc`)|Not supported| |
| 94 | +|`Pin`|Not supported| |
| 95 | +|Hardware intrinsics|Not supported| |
| 96 | +|Printing, I/O|Not supported| |
| 97 | +|Panic-unwinding|Not supported| |
| 98 | + |
| 99 | +## Traits |
| 100 | +|Feature|Status| |
| 101 | +|-------|------| |
| 102 | +|User-defined traits|Supported| |
| 103 | +|Default implementations|Supported| |
| 104 | +|Trait bounds on trait declarations|Supported| |
| 105 | +|Traits with type arguments|Supported| |
| 106 | +|Associated types|Supported| |
| 107 | +|Generic associated types|Supported| |
| 108 | +|Higher-ranked trait bounds|Supported| |
| 109 | +|`Clone`|Supported| |
| 110 | +|Marker traits (`Copy`)|Supported| |
| 111 | +|Marker traits (`Send`, `Sync`)|Not supported| |
| 112 | +|Standard traits (`Hash`, `Debug`)|Not supported| |
| 113 | +|User-defined destructors (`Drop`)|Not supported| |
| 114 | +|`Sized` (`size_of`, `align_of`)|Not supported| |
| 115 | +|`Deref`, `DerefMut`|Not supported| |
| 116 | + |
| 117 | +## Multi-threading |
| 118 | +|Feature|Status| |
| 119 | +|-------|------| |
| 120 | +|`Mutex`, `RwLock` (from standard library)|Not supported |
| 121 | +|Verified lock implementations|Not supported |
| 122 | +|Atomics|Not supported| |
| 123 | +|`spawn` and `join`|Not supported| |
| 124 | +|Interior mutability|Not supported| |
| 125 | + |
| 126 | +## Unsafe |
| 127 | +|Feature|Status| |
| 128 | +|-------|------| |
| 129 | +|Raw pointers|Not supported| |
| 130 | +|Transmute|Not supported| |
| 131 | +|Unions|Not supported| |
| 132 | +|`UnsafeCell`|Not supported| |
| 133 | + |
| 134 | +## Crates and code organization |
| 135 | +|Feature|Status| |
| 136 | +|-------|------| |
| 137 | +|Multi-crate projects|Partially supported| |
| 138 | +|Verified crate + unverified crates|Not supported| |
| 139 | +|Modules|Supported| |
| 140 | +|rustdoc|Not supported| |
0 commit comments