Map
interface to internet.- Classes: properties, names for List and Map
- Structured concurrency: allow the declaration of new scopes, and to run a task in a new scope.
- A generator in a comprehension gives a lazy list/map.
- To optimize symbol references, evaluate as much as we can at compile time. Any expression with no free variables can be fully evaluated.
- Study vau and first-class environments (objects)
- Make code
readonly
. Start withFreeVars
. See https://github.com/immutable-js/immutable-js/
- Comprehensions:
loop [elem, …]
andloop {k = v; …}
. - 100% test coverage.
- Tail recursion elimination
self
- Streams, and use as interface to files.
- Code formatting: have blank lines between top-level multiline
let
s, and after the lastuse
in a series ofuse
s. - Structs: single-inheritance, data only.
- Unions = enums. (Only way to do union types.)
- Interfaces: methods only, can be intersected.
- Inter-working with C. Initial quick-and-dirty version: allow arbitrary C APIs to be declared (especially for POSIX; later add GLib introspection), and allow C bindings to be generated for Ark values that have C types, and any base Ark type.
- Type checking
- Extra
for
sugar where when an objectobj
is given as the iterator,obj.iter()
is automatically used. - Structs
- Enums
- Traits (use for built-in operators)
- Tuples
- Variadic functions?
- Slices (implement on lists and strings)
- Match statement
- String interpolation
- Long Unicode escapes
- Namespaces
- Macros: use for syntactic sugar to get e.g.
fn a () { }
, and for+=
- Module system. Mimic Rust: https://doc.rust-lang.org/rust-by-example/mod/split.html