Hadley,
Definitivamente, usted puede escribir código C++ que es similar al código C.
Entiendo lo que dices acerca de que C++ es más complicado que C. Esto es si quieres dominar todo: objetos, plantillas, STL, meta programación de plantillas, etc. La mayoría de la gente no necesita estas cosas y puede solo confía en otros para eso. La implementación de Rcpp es muy complicada, pero solo porque no sabes cómo funciona tu nevera, no significa que no puedas abrir la puerta y tomar leche fresca ...
De tus muchas contribuciones a R, ¿qué ataca? es que encuentras R algo tedioso (manipulación de datos, gráficos, manipulación de cadenas, etc.). Bueno, prepárate para muchas más sorpresas con el C API interno de R. Esto es muy tedioso.
De vez en cuando, leo los manuales R-exts o R-ints. Esto ayuda. Pero la mayoría de las veces, cuando realmente quiero saber algo, ingreso a la fuente R y también a la fuente de los paquetes escritos, por ejemplo, Simon (generalmente hay mucho que aprender allí).
Rcpp está diseñado para hacer que estos tediosos aspectos de API desaparezcan.
Puede juzgar por sí mismo lo que le parece más complicado, ofuscado, etc., basado en algunos ejemplos. Esta función crea un vector de caracteres mediante la API C:
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);
}
Usando RCPP, se puede escribir la misma función que:
SEXP foobar(){
return Rcpp::CharacterVector::create("foo", "bar") ;
}
o:
SEXP foobar(){
Rcpp::CharacterVector res(2) ;
res[0] = "foo" ;
res[1] = "bar" ;
return res ;
}
Como dijo Dirk, hay hay otros ejemplos en varias viñetas. También usualmente señalamos a las personas hacia nuestras pruebas unitarias porque cada una de ellas prueba una parte muy específica del código y se explican por sí mismas.
Obviamente, estoy predispuesto aquí, pero recomendaría familiarizarme con Rcpp en lugar de aprender C API de R, y luego llegar a la lista de correo si algo no está claro o no parece factible con Rcpp.
De todos modos, fin del argumento de venta.
Supongo que todo depende del tipo de código que desee escribir con el tiempo.
Romain
Esperaba que obtuviera una respuesta de "use Rcpp";) Sería realmente útil si pudiera deletrear las desventajas de usar C++ en lugar de C.Uno de los principales parece ser que C++ es mucho más complejo que C, ¿esto hace que sea más difícil de usar? (O, en la práctica, ¿puedes escribir código C++ que sea muy similar a C?) También agradecería más material de referencia dirigido a usuarios nuevos que no están familiarizados con la API C existente. – hadley
See * Edit 3 * and * yes, you can *. Meyers llama a C++ un lenguaje de "cuatro paradigmas" y no tiene que usar los cuatro. Usarlo como 'simplemente una mejor C' y usar Rcpp como pegamento para R está perfectamente bien. Nadie te obliga a un estilo, esto no es Java ;-) –
@Dirk: thx para la elaboración. Planteó la pregunta en nuestra oficina antes, ya que C se usa comúnmente aquí en lugar de C++. ¿Cuándo sería beneficioso el uso de C sobre C++, o simplemente dices "nunca C, siempre C++"? –