forked from jjallaire/Rcpp
-
Notifications
You must be signed in to change notification settings - Fork 0
/
TODO
117 lines (68 loc) · 3.42 KB
/
TODO
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
Current active misfeatures
o Rcpp.package.skeleton() does not work with supplied functions,
eg Rcpp.package.skeleton("foo", list=c("funA", "funB")) ends
in error.
o Sugar ops unit tests on +, -, ... need double, fail with int
Documentation
o Finish the quickref vignette
o Maybe a vignette about stats functions
o Add a vignette about the API
API
o Rcpp::Factor and Rcpp::Ordered
o Fast indexing and g++ 4.5.0 or later: open issue of why this compiler
gets upset when the previous version(s) coped just fine
o Vector::resize
Modules
o Class inheritance. Reflect C++ inheritance at the R level.
Syntactic sugar
o recycling : binary operators and math functions of 2 or more arguments
need to recycle their arguments.
o not sure rep should be lazy, i.e. rep( x, 4 ) fetches x[i] 4 times,
maybe we should use LazyVector like in outer to somehow cache the
result when it is judged expensive to calculate
o The current impl of "diff" might cause problems (e.g. with ifelse) due to
laziness, it is probably best to not make it lazy
o crossprod
o Vector * Matrix, Matrix * Matrix
o operator%
o operator/ needs to handle the case of division by 0
o min, max with specialization of the binary operators, so that we can do
things like this lazily:
min( x ) < 4
o matrix functions : apply
o for character vectors: nchar, grepl, sub, gsub
o Compound operators: ++,--,+=, -=, ...
o other statistical distribution functions :
multinom : this only has dmultinom which is handled in R, so maybe we can
skip it
signrank : has the weird call to .C( "signrank_free" ), need to understand that
wilcox : has the weird call to .C( "wilcox_free" ), need to understand that
tukey : only has p and q, no r or d
o other random generators:
rmultinom : tricky because it generates a matrix
rnbeta : the R version is implemented in R (not in C),
should we still have it in Rcpp in compile code ?
rnf : idem
rnt : idem
Attributes
o Allow externally specified build directory for sourceCpp (to support
caching across R sessions)
o Proactively detect types that can't be handled by as/wrap and print
a clearer error message
o Add unit tests
o Add random = false parameter to Rcpp::export once we support parsing
key/value pairs in attribute parameters
o Rcpp.package.skeleton should look for Rcpp::depends in cpp_files
and call inline plugins, etc. as necessary to create a package
that can build the cpp file(s). Note that packages exporting plugins
(e.g. Eigen, Armadillo) don't currently provide custom Makevars
so this won't quite work for those packages.
o Detect useDynLib .registration = TRUE and in that case emit .Call
wrappers as symbols rather than strings w/ PACKAGE =
o Solution for the problem of sharing/propagating typedefs to RcppExports
o Allow sourceCpp to build an entire directory
Testing
o all r* functions : rnorm, etc ...
o many dpq functions have not been tested yet
o new autogenerated sugar functions: cos, acosh, atan, cos, cosh, log,
log10, sqrt, sin, sinh, tan, tanh