mirror of
https://github.com/carp-lang/Carp.git
synced 2024-10-11 04:27:55 +03:00
4.9 KiB
4.9 KiB
- Milestones
- Unsorted Todo:s
- Critical Bugs
- Big Language Features
- Tests to write
- Smaller Language Features ("niceties")
- 0.4
- 1.0
- Returning refs in functions should be possible to prove safe in some cases, if origin or ref is stored during memory management pass. Requires lifetimes or similar.
- Array.copy should just do a memcopy for primitive/plain types. Select most concrete version of 'copy'?
- A way of telling Carp if an external type is primitive (and thus freely copy:able) or not and must be borrowed.
- Macros for generating 'read' functions to read objects back into memory from string representation.
- Kind-checking for types (make sure the type variables match, etc).
- Allow unification of generic struct '(t a)' with concrete struct, i.e. (Array Int).
- Enable errors when instantiating deps. Requires that the deps function for templates should return an Either.
- Macro System
- Tooling
- 0.4
- The error reporting in Eval is a mess, must make it possible to return errors with correct location for all kinds of errors.
- Errors in macros should present the code location of both the macro and of the code that uses of it.
- Flycheck hangs and eats all resources sometimes. One ugly solution would be to have a timer that kills the process after a certain time when running with –check
- 1.0
- Show "call stack" when getting an error during concretization.
- Make the flags sent to the compiler be saved into different groups depending on actual compiler.
- Project templates.
- Somehow make it possible to enter ":t foo" at the REPL (can't be done now because each atom is evaluated separately)
- Preserve whitespace to allow saving forms back to disk.
- Refactorings at the REPL. Rename, extract function, add/remove parameter?
- Emacs-mode: Make foreach and deftype indent correctly.
- Emacs-mode: Make foreach, and*, not*, etc. into keywords (highlight them).
- A way to assert compiler errors in tests.
- 0.4
- Code generation
- Libraries
- Documentation
- Ugliness
- Language Design Considerations
- How to handle heap allocated values? Box type with reference count?
- Fixed-size stack allocated arrays would be useful (also as members of structs)
- Macros in modules must be qualified right now, is that a good long-term solution or should there be a 'use' for dynamic code?
- Allow use of 'the' as a wrapper when defining a variable or function, i.e. (the (Fn [Int] Int) (defn [x] x))?
- Being able to use 'the' in function parameter declarations, i.e. (defn f [(the Int x)] x) to enforce a type?
- Distinguish immutable/mutable refs?
- Reintroduce the p-string patch but with support for embedded string literals?
- Rename deftype to defstruct?
- Syntax for pointer type, perhaps "^"?
- Defining a function like 'add-ref' (see the numeric modules), refering to '
' does not resolve to '' inside the module, which gives the function an overly generic type.
- Notes
Milestones
0.3 - Hopefully done "soon", fixing the most pressing issues.
0.4 - A nice minimal version of the language. Should be possible to use for somewhat realistic projects.
1.0 - The completed version of the language with all planned features and extra nice ergonomics.
Unsorted Todo:s
Critical Bugs
0.3
Memory management inside 'and' & 'or' seems to be wrong.
References must keep track of their origin and prevent usage of them if the origin has been given away.
Currently it's possible to set a ref so it points to a value in a more short-lived scope, leads to 'stack-use-after-scope' error in clang-sanitizer.