Meu grupo está desenvolvendo um pacote R para simular o crescimento das plantas (consulte o repositório do GitHub ). O pacote R usa .Call
para fazer interface com C.
Decidimos que valeria a pena criar uma biblioteca C autônoma. Os dois principais motivos são: 1) usar ferramentas familiares de depuração C e 2) uma grande parte da comunidade de desenvolvedores / usuários está familiarizada com as linguagens compiladas (a maioria dos modelos da classe são escritos em C ou Fortran). No entanto, o pacote R é acessível a muitos fora desta comunidade, portanto, queremos manter sua funcionalidade.
Analisei algumas questões relacionadas, por exemplo, https://stackoverflow.com/q/12328156/199217 , que discutem pacotes R com dependências da biblioteca C, mas não encontrei uma que lida especificamente com a dissociação de um pacote R existente.
Uma abordagem proposta
(o que inventamos até agora ... um palhaço)
- Escreva testes para a funcionalidade existente
- mantenha a biblioteca C dentro da
src/
pasta - Coloque o código C específico de R (por exemplo
SEXP
, carregando bibliotecas R, etc.) nos arquivos 'R wrapper' anexados comR_*
- crie funções separadas para ler arquivos de configuração em C
- crie uma função C 'principal' para substituir a funcionalidade em R
- escreva um makefile para a biblioteca C que ignora os arquivos do wrapper R
- Uma vez que a biblioteca C funcione de forma independente e equivalente ao pacote R, podemos considerar mover as funções C para um repositório separado, que seria uma dependência do pacote R
Questões:
- Esse esforço está equivocado?
- Estamos negligenciando possíveis armadilhas?
- Existe uma maneira melhor de desenvolver as bibliotecas R e C em paralelo?
- Existem exemplos de bibliotecas C que foram dissociadas dos pacotes R?
- Como podemos escrever testes para comparar funções equivalentes em R e C?