Hadley,
Anda pasti bisa menulis kode C ++ yang mirip dengan kode C.
Saya mengerti apa yang Anda katakan tentang C ++ lebih rumit daripada C. Ini adalah jika Anda ingin menguasai semuanya: objek, templat, STL, pemrograman meta templat, dll ... kebanyakan orang tidak membutuhkan hal-hal ini dan hanya dapat mengandalkan orang lain untuk itu. Penerapan Rcpp sangat rumit, tetapi hanya karena Anda tidak tahu cara kerja lemari es Anda, itu tidak berarti Anda tidak dapat membuka pintu dan mengambil susu segar ...
Dari banyak kontribusi Anda ke R, yang mengejutkan saya adalah Anda menganggap R agak membosankan (manipulasi data, grafik, manipulasi string, dll ...). Bersiaplah untuk lebih banyak kejutan dengan API C internal R. Ini sangat membosankan.
Dari waktu ke waktu, saya membaca manual R-exts atau R-ints. Ini membantu. Tetapi sebagian besar waktu, ketika saya benar-benar ingin mencari tahu tentang sesuatu, saya pergi ke sumber R, dan juga di sumber paket yang ditulis oleh misalnya Simon (biasanya ada banyak hal yang harus dipelajari di sana).
Rcpp dirancang untuk menghilangkan aspek-aspek API yang membosankan ini.
Anda dapat menilai sendiri apa yang menurut Anda lebih rumit, tidak jelas, dll ... berdasarkan beberapa contoh. Fungsi ini membuat vektor karakter menggunakan 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);
}
Menggunakan Rcpp, Anda dapat menulis fungsi yang sama dengan:
SEXP foobar(){
return Rcpp::CharacterVector::create( "foo", "bar" ) ;
}
atau:
SEXP foobar(){
Rcpp::CharacterVector res(2) ;
res[0] = "foo" ;
res[1] = "bar" ;
return res ;
}
Seperti yang dikatakan Dirk, ada contoh lain pada beberapa sketsa. Kami juga biasanya mengarahkan orang ke pengujian unit kami karena masing-masing menguji bagian yang sangat spesifik dari kode dan cukup jelas.
Saya jelas bias di sini, tetapi saya akan merekomendasikan untuk mengenal Rcpp daripada mempelajari C API dari R, dan kemudian datang ke milis jika ada sesuatu yang tidak jelas atau tampaknya tidak dapat dilakukan dengan Rcpp.
Bagaimanapun, akhir dari promosi dagang.
Saya kira itu semua tergantung pada jenis kode yang ingin Anda tulis pada akhirnya.
Romain