Hadley,
Zdecydowanie możesz napisać kod C ++, który jest podobny do kodu C.
Rozumiem, co mówisz, że C ++ jest bardziej skomplikowany niż C.To jest, jeśli chcesz opanować wszystko: obiekty, szablony, STL, metaprogramowanie szablonów itp. ... większość ludzi nie potrzebuje tych rzeczy i może po prostu polegać na innych do tego. Wdrożenie Rcpp jest bardzo skomplikowane, ale to, że nie wiesz, jak działa Twoja lodówka, nie oznacza, że nie możesz otworzyć drzwi i chwycić świeżego mleka ...
Z wielu twoich wkładów w R, uderza mnie to, że uważasz R za nieco nudne (manipulacja danymi, grafika, manipulowanie ciągami, itp ...). Przygotuj się na wiele innych niespodzianek dzięki wewnętrznemu C API R. Jest to bardzo żmudne.
Od czasu do czasu czytam instrukcje R-exts lub R-ints. To pomaga. Ale w większości przypadków, gdy naprawdę chcę się czegoś dowiedzieć, sięgam do źródeł R, a także do źródeł pakietów napisanych np. Przez Simona (zwykle jest tam wiele do nauczenia się).
Rcpp ma na celu wyeliminowanie tych żmudnych aspektów interfejsu API.
Możesz samodzielnie ocenić, co uważasz za bardziej skomplikowane, zaciemnione itp ... na podstawie kilku przykładów. Ta funkcja tworzy wektor znaków za pomocą C API:
SEXP foobar(){
SEXP ab;
PROTECT(ab = allocVector(STRSXP, 2));
SET_STRING_ELT( ab, 0, mkChar("foo") );
SET_STRING_ELT( ab, 1, mkChar("bar") );
UNPROTECT(1);
}
Używając Rcpp, możesz napisać tę samą funkcję, co:
SEXP foobar(){
return Rcpp::CharacterVector::create( "foo", "bar" ) ;
}
lub:
SEXP foobar(){
Rcpp::CharacterVector res(2) ;
res[0] = "foo" ;
res[1] = "bar" ;
return res ;
}
Jak powiedział Dirk, na kilku winietach są inne przykłady. Zwykle kierujemy również ludzi do naszych testów jednostkowych, ponieważ każdy z nich testuje bardzo określoną część kodu i nie wymaga wyjaśnień.
Jestem tutaj oczywiście stronniczy, ale poleciłbym zapoznać się z Rcpp zamiast uczyć się C API R, a następnie przejść do listy mailingowej, jeśli coś jest niejasne lub wydaje się nie do wykonania z Rcpp.
W każdym razie koniec prezentacji.
Myślę, że wszystko zależy od tego, jaki kod chcesz ostatecznie napisać.
Romain