Il mio gruppo ha sviluppato un pacchetto R per simulare la crescita delle piante (vedi repository GitHub ). Il pacchetto R utilizza .Call
per interfacciare con C.
Abbiamo deciso che sarebbe valso la pena creare una libreria C standalone. I due motivi principali sono 1) utilizzare strumenti di debug di C familiari e 2) gran parte della comunità di sviluppatori / utenti ha familiarità con i linguaggi compilati (per lo più i modelli nella classe sono scritti in C o Fortran). Tuttavia, il pacchetto R è accessibile a molti al di fuori di questa comunità, quindi vogliamo mantenere la sua funzionalità.
Ho esaminato alcune domande correlate, ad es. link , che discute i pacchetti R con le dipendenze della libreria C, ma non ne ha trovato uno che si occupa specificamente del disaccoppiamento di un pacchetto R esistente.
Un approccio proposto
(cosa abbiamo inventato finora ... un uomo di paglia)
- Scrivi test per la funzionalità esistente
- mantieni la libreria C all'interno della cartella
src/
- Inserisci il codice C specifico per R (ad esempio
SEXP
, caricando le librerie R, ecc.) nei file 'R wrapper' anteposto aR_*
- crea funzioni separate per leggere i file di configurazione in C
- crea una funzione C "principale" per sostituire la funzionalità in R
- scrive un makefile per la libreria C che ignora i file wrapper R
- Una volta che la libreria C funziona in modo indipendente e in modo equivalente al pacchetto R, potremmo considerare di spostare le funzioni C in un repository separato, che sarebbe una dipendenza per il pacchetto R
Domande:
- Questo sforzo è fuorviato?
- Stiamo trascurando qualsiasi potenziale insidia?
- C'è un modo migliore per sviluppare sia le librerie R che C in parallelo?
- Ci sono esempi di librerie C che sono state disaccoppiate dai pacchetti R?
- Come possiamo scrivere test per confrontare funzioni equivalenti in R e C?