mirror of
https://github.com/ProgramSnail/lang_modes_check.git
synced 2025-12-10 02:58:43 +00:00
26 lines
748 B
Markdown
26 lines
748 B
Markdown
|
|
# Check of modes correctness
|
||
|
|
|
||
|
|
## Info
|
||
|
|
|
||
|
|
https://blog.janestreet.com/oxidizing-ocaml-locality/
|
||
|
|
https://blog.janestreet.com/oxidizing-ocaml-ownership/
|
||
|
|
|
||
|
|
- **locality:** *global* (default) or *local* (value should not be passed out of context, can be allocated on stach)
|
||
|
|
|
||
|
|
- **uniqueness:** *shared* (default), *unique* (used only once, consumed), *exclusive* (used only once in the same time)
|
||
|
|
|
||
|
|
- **linearity:** *many* (default), *once* (result value can be used by caller only once), *separated* (result value can be used by caller only once in the same time)
|
||
|
|
|
||
|
|
## Done
|
||
|
|
|
||
|
|
- *unique* check +
|
||
|
|
- *exclusive* check
|
||
|
|
- *local* check
|
||
|
|
- *once* check
|
||
|
|
- *separated* check
|
||
|
|
- type check (optional)
|
||
|
|
|
||
|
|
## Examples
|
||
|
|
|
||
|
|
- *unique:* let f (unique x) = x * x in f;; -> error
|