This repository has been archived by the owner on Nov 11, 2018. It is now read-only.
forked from RcppCore/Rcpp
-
Notifications
You must be signed in to change notification settings - Fork 0
/
TODO
133 lines (78 loc) · 3.93 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
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
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
o DataFrame::create(Named("a")=b, Named("b")=b) fails with
NumericVectors
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 logical indexing, ie NumericVector( LogicalVector )
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 crossprod
o Vector * Matrix, Matrix * Matrix
o operator%
o operator/ needs to handle the case of division by 0
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 use of 'inline' keyword on exported functions
o Allow sourceCpp to build an entire directory
o Consider allowing local includes in sourceCpp (but compilation cache
must pay mind to any local includes)
o Support persistence of sourceCpp created functions across sessions
(either via long-lived temp dir or via environment persistence)
o Additional high-level mechanism for specifying additional build
configuration (perhaps cxxflags and libs attributes)
o Verify whether sourceCpp still needs to check for spaces in the path
of source file names on Windows
o Consider adding -Wall and -Wpedantic for sourceCpp builds
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