Interpreter
Interpreter copied to clipboard
The interpreter for Rhovas, a programming language for API design and enforcement.
Expression statements currently discard the return value. For functions that return Results, this can result in errors (exceptions) being unintentionally dropped. The likelihood of this is increased due to automatic...
From 668cb47, the order generics are bound when interacting with Dynamic during function resolution changes the result. On further inspection, this is likely caused by Dynamic subtype checks failing to...
Following 04b3b94, runtime types should now force type erasure. This prevents many of the evaluators runtime checks from being meaningful, most notably with Struct properties (since existence is tied to...
Currently, structs use structural subtyping which considers any struct to be a subtype so long as the required fields are present. This is insufficient for handling optional/unknown fields, which is...
Statements-as-expressions allows some statements (like `if`/`match`) to be used as expressions that return a value. This could easily be done by simply converting these to expressions and using `Statement.Expression`, however...
Union and intersection types are helpful utilities for composing types. Unions are particularly helpful for addressing simple variations in allowed arguments as well as better type inference. Intersections are less...
The current codebase is almost entirely undocumented, mainly relying on test cases to clarify expected behavior. This slows down both new features and refactors since they often affect these unstated...
The patterns of a structural match should ensure that they are not already covered by previous cases and that the patterns are exhaustive. This is not an easy problem (hence...