- Documentation needs a higher-level strategy
- Func: Expose reflection library for dynamic structure analysis
- Func: Enable
let
vars at global scope - Use DIBuilder to add line-level debugging information
- Data structures
- string (as slices)
- vectors
- hash map
- set
- binary tree
- avl tree / red-black tree
- Ergo: Enable linking to variadic functions (like printf)
- Rename
typeid
function toctor_id
or something similar. - Libs: Integrate JSON parsing and mess around with manipulating some existing JSON files
- Compat: Automatically configure default POSIX/C/System "int" size on compiler startup
- Perf: Implement native structures as non-pointer values
- Perf: Escape analysis to avoid heap-allocation.
- Perf: Explore using a conservative collector
- Perf: Implement an inline directive to mark functions for inline expansion during optimization
- Dev: Rework debug logging to filter based on taglevels, rather than just one global level (to enable debugging particular parts more specifically)
- Pattern-matching
- ctor matching
- int matching
- tuple matching
- string matching
- Play: Rewrite expect.py in Ace
- decide on
with
(Python) /using
(dispose
) (C#) / 'defer' (Golang) style syntax for deterministic destruction - or ref-counting - Implement generic in-place sort for vectors
- Ergo: Ability to import symbols from modules by name (symbol injection)
- Add safety checks on casting (as)
- Exercise: implement parser combinators in Ace
- Implement closures with capture by value
- Implement backtracking in unification of product types
- Consider marking null-terminated strings differently for FFI purposes (ended up doing this as part of "safe-unboxing" for easier FFI.
- Implement slice array indexing rg[s:end], etc...
- Implement vector slicing for strings and arrays
- Optimize
scope_t
'sget_nominal_env
andget_total_env
to be cached - Maintenance: Change all
status_t
parts of compiler to use exceptions - Check for duplicate bound function instantiations deeper within function instantiation
- Change := to be let by default
- (un)signed integers
- write a C integer promotion compatibility test as part of test framework
- integers as a type with parameterized number of bits and whether to use sign-extend or zero-extend
- promotions upon binary operators
- prevent overloading integer operations unless one side is not an integer
- deal with casting integers
- implement
let
declarations - change
str
to usewchar_t
as its underlying physical character type- use C99's
mbstowcs
andwcstombs
to convert back and forth - propagate usage of utf8 for
char
- use C99's
- 'for' syntax - based on
tests/test_list_iter.ace
pattern - Ternary operator
- Logical and/or (build with ternary operator)
- Type refinements for ternary / conditional expressions
- Implement vector literal checking and code gen
- Design/Implement tags functionality (for integration with ctags and LSP)