Make it a function
[xonotic/gmqcc.git] / TODO
1 GMQCC is quite feature complete.  But that doesn't address the fact that
2 it can be improved.  This is a list of things that we'd like to support
3 in the distant future.  When the time comes, we can just select a topic
4 from here and open a ticket for it on the issue tracker.  But for the
5 meantime, this is sort of a cultivating flat file database.
6
7 Optimizations:
8     The following are optimizations that can be implemented after the
9     transformation into static-single assignment (SSA).
10
11         Global Value Numbering:
12             Eliminate redundancy by constructing a value graph of the source
13             then determining which values are computed by equivalent expressions.
14             Similar to Common Subexpression Elimination (CSE), however expressions
15             are determined via underlying equivalence, opposed to lexically identical
16             expressions (CSE).
17
18     The following are optimizations that can be implemented before the
19     transformation into a binary (code generator).
20
21         Code factoring:
22             The process of finding sequences of code that are identical,
23             or can be parameterized or reordered to be identical.
24             Which can be replaced with calls to a shared subroutine. To
25             reduce duplicated code. (Size optimization)
26
27 Language Features:
28     The following are language features that we'd like to see implemented in the
29     future.
30
31     AST Macros:
32         Macros with sanity.  Not textual substiution.
33
34     Classes:
35         Like C++, but minus the stupidity:
36             - No type operator overloads
37             - Keep operator overloading for basic operators though.
38             - No inheritance
39             - No virtuals / pure virtuals
40             - Essentially "C structs but with operators" :)
41
42     Overloaded Functions:
43         Ability to make individual functions with the same name, but take
44         different amount of arguments or type of arguments.
45
46     Default Argument Substiution:
47         Ability to specify default values for arguments in functions.
48         void foo(string bar, string baz="default");
49         Supplying just one argument will expand the second argument to
50         become "default", otherwise if two arguments are specified then
51         the "default" string is overrode with what ever the user passes.
52
53     Namespaces:
54         There is already a ticket open on this. They'd work just like C++
55         identically even.
56
57 Testsuite:
58     The following are things we'd like to see added to the testsuite
59     in the distant future:
60
61     Interface:
62         Ability to select individual tests, or set parameters manually
63         opposed to using the static task-template files. (A method to
64         override them rather).