Carp/docs/Todo.org

94 lines
5.0 KiB
Org Mode
Raw Normal View History

2018-03-29 08:19:01 +03:00
* 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
*** References must keep track of their origin and prevent usage of them if the origin has been given away.
*** Can 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.
*** The error reporting in Eval is a mess, must make it possible to return errors with correct location for all kinds of errors.
* Big Language Features
** 0.4
*** Stack allocated Array with an explicit size.
*** Deps function for templates should return an Either to enable errors when instantiating deps.
***
** 1.0
*** Good hashmap implementation with support for "{}" syntax.
*** Tagged unions (also known as "sum types" or "enums")
*** Lambdas (anonymous functions) that compile on Windows and don't leak memory!
* Smaller Language Features ("niceties")
** 0.4
*** Type annotations should affect the type, not just check it.
2018-03-29 08:19:01 +03:00
*** Handle self-referencing members in structs (also for function types, i.e. "(deftype Foo [f (Fn [Foo] Foo)])")
*** Array.copy should just do a memcopy for primitive/plain types. Select most concrete version of 'copy'?
*** Errors in macros should present the code location of both the macro and of the code that uses of it.
*** Returning refs in functions should be possible to prove safe in some cases, if origin or ref is stored during memory management pass.
*** Defining a local variable messes up unqualified lookup of function with the same name, e.g. (let [words (words &s)] ...)
*** 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.
2018-06-01 17:40:14 +03:00
*** Can't define '=' in terms of '=' on generic members of type, see Pair.=
2018-03-29 08:19:01 +03:00
*** Array.init-empty-with-capacity function. What's a better name?
*** A way of telling Carp if an external type is primitive (and thus freely copy:able) or not and must be borrowed.
** 1.0
*** Macros for generating 'read' functions to read objects back into memory from string representation.
*** A way to assert compiler errors in tests
*** Rename type variables from t0, t1, t2 to a, b, c, etc.
*** 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).
* Macro System
** 1.0
*** Quasiquote
*** Splicing in macros
*** Pattern matching on arguments in macros?
*** Some lists and similar things generated by built in dynamic functions like 'cons' etc don't create proper Info for their XObjs?
* Tooling
** 0.4
*** Make the flags sent to the compiler be saved into different groups depending on actual compiler.
*** Show "call stack" when getting an error during concretization.
*** Allow echoing of infered type at the REPL (must be silenced when loading a file though)
*** Only reload files once, keep track of which ones have already been reloaded.
*** Prevent run if no exe has been successfully built.
*** Flycheck hangs and eats all resources sometimes.
2018-04-24 12:29:45 +03:00
*** Emacs-mode: Make foreach and deftype indent correctly.
*** Emacs-mode: Make foreach, and*, not*, etc. into keywords (highlight them).
2018-03-29 08:19:01 +03:00
** 1.0
*** 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?
*** --watch flag for recompiling when the files in the project change?
* Code generation
** [1.X] LLVM backend
** [?] Emit #LINE macros in the generated C code?
* Libraries
** Make Vector generic
** Threading
* Documentation
** Document all core functions
** Write a guide to how the compiler internals work
** Improve the Memory.md docs
* Ugliness
** Would be nice if Info from deftypes propagated to the templates for source location of their member functions.
* 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?
2018-04-24 12:29:45 +03:00
** Rename deftype to defstruct?
** Syntax for pointer type, perhaps "^"?
2018-03-29 08:19:01 +03:00
* Notes
2018-03-31 11:01:33 +03:00
** Travis
2018-03-29 08:19:01 +03:00
** Should depsForCopyFunc and depsForDeleteFunc really be needed in Array templates, they *should* instantiate automatically when used?