Granular wrapping of the R api
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 5/5
- Tempo stimato
- Più di una settimana
- Idoneità per principianti
- 25/100
Direzione di ricerca
Inizia confrontando il prototipo in modern_libr con la struttura attuale di libR-sys e esamina #238 per l’elaborazione più veloce dei binding proposta. Poi analizza come i percorsi dei moduli #[path] possano dipendere dal target, dalla versione di R e dalla piattaforma. Il lavoro è completato quando l’intera R C-API può essere esposta tramite una struttura di moduli uniforme, incluse le considerazioni specifiche della piattaforma elencate.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
It has been a long-term goal of mine, to include the totality of the R C-API in libR-sys.
Right now, libR-sys only serves as a sys-crate for extendr, and it primarily follows the needs of extendr.
But it would be nice if libR-sys could be used for all R-API needs in Rust.
To that end, I've made a prototype of how such a project can look like, see
https://github.com/CGMossa/modern_libr
(see discord discussion for reference)
https://discord.com/channels/751419551132155925/751419551132155928/1136068899507540078
Essentially, the resulting lib.rs will roughly look like this
Details
#![allow(non_snake_case)]
#![allow(non_upper_case_globals)]
#![allow(non_camel_case_types)]
#![allow(ambiguous_glob_reexports)]
pub mod bindings {
#[path = "R.rs"]
pub mod r;
#[path = "Rinternals.rs"]
pub mod r_internals {
use super::r_ext::boolean::Rboolean;
use super::r_ext::complex::Rcomplex;
use super::r_ext::r_dynload::DL_FUNC;
include!("bindings/Rinternals.rs");
}
#[path = "Rmath.rs"]
pub mod r_math;
#[path = "Rversion.rs"]
pub mod r_version;
//TODO: unix specific?
// #[path = "Rinterface.rs"]
// pub mod r_interface;
// pub use r_interface::*;
pub mod r_embedded {
use super::r_ext::boolean::Rboolean;
include!("bindings/Rembedded.rs");
}
#[path = "R_ext"]
pub mod r_ext {
pub mod applic {
use super::boolean::Rboolean;
include!("bindings/R_ext/Applic.rs");
}
pub mod blas {
use super::complex::Rcomplex;
include!("bindings/R_ext/BLAS.rs");
}
// #[path = "Callbacks.rs"]
pub mod callbacks {
use super::super::r_internals::SEXP;
use super::boolean::Rboolean;
include!("bindings/R_ext/Callbacks.rs");
}
//TODO: another platform?
// #[path = "GetX11Image.rs"]
// pub mod GetX11Image;
// #[path ="Lapack.rs"]
pub mod lapack {
use super::complex::Rcomplex;
include!("bindings/R_ext/Lapack.rs");
}
#[path = "Linpack.rs"]
pub mod linpack;
#[path = "Parse.rs"]
pub mod parse {
use super::super::r_internals::SEXP;
include!("bindings/R_ext/Parse.rs");
}
pub mod r_startup {
use super::boolean::Rboolean;
include!("bindings/R_ext/RStartup.rs");
}
pub mod r_dynload {
use super::boolean::Rboolean;
include!("bindings/R_ext/Rdynload.rs");
}
#[path = "Riconv.rs"]
pub mod r_iconv;
#[path = "Visibility.rs"]
pub mod visibility;
// TODO: another platform?
// #[path ="eventloop.rs"]
// pub mod event_loop;
#[path = "Boolean.rs"]
pub mod boolean;
#[path = "Complex.rs"]
pub mod complex;
#[path = "Arith.rs"]
pub mod arith;
#[path = "Constants.rs"]
pub mod constants;
#[path = "Error.rs"]
pub mod error;
#[path = "Memory.rs"]
pub mod memory;
#[path = "Print.rs"]
pub mod print;
#[path = "RS.rs"]
pub mod rs;
#[path = "Random.rs"]
pub mod random;
#[path = "Utils.rs"]
pub mod utils {
use super::complex::Rcomplex;
use super::boolean::Rboolean;
include!("bindings/R_ext/Utils.rs");
}
//TODO: this is windows specific.
#[path = "libextern.rs"]
pub mod libextern;
}
#[path = "Rconfig.rs"]
pub mod r_config;
pub mod r_prelude {
pub use super::r_config::*;
pub use super::r_ext::arith::*;
pub use super::r_ext::boolean::*;
pub use super::r_ext::complex::*;
pub use super::r_ext::constants::*;
pub use super::r_ext::error::*;
pub use super::r_ext::libextern::*;
pub use super::r_ext::memory::*;
pub use super::r_ext::print::*;
pub use super::r_ext::random::*;
pub use super::r_ext::rs::*;
pub use super::r_ext::utils::*;
}
}
There are challenges that need to be dealt with before this can be a reality:
- Faster processing of bindings, as right now, in
modern_libruses clang to filter out elements. Luckily, we are about to land #238 that serves as a schematic for how to accomplish this. - Paths to module-files has to be
target, R version and platform dependent. This means that the module notation of#[path = <path>]has to depend on these things, for the seamless experience, that is.
- Lingua principale
- Rust
- Stelle
- 56
- Fork
- 26
- Metriche di merge delle PR
- Nessuna PR unita negli ultimi 30g
Preparare l'ambiente
- Nessun Dockerfile né file Docker Compose
- Nessun modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di extendr/libR-sys
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 25/100
-
Difficoltà 3/5 1-2 giorni Idoneità per principianti 45/100
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 30/100
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 35/100
-
Difficoltà 3/5 1-2 giorni Idoneità per principianti 45/100
Tutte le issue di extendr/libR-sys
Issue simili
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
trezor/trezor-firmware#7997 ·
I maintainer di solito rispondono entro 2 giorni
-
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 88/100
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 84/100
oxidecomputer/management-gateway-service#506 · 1 commento ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
scylladb/nodejs-rs-driver#566 ·
I maintainer di solito rispondono entro 1 giorno
-
A-ABI needs-triage relnotes relnotes-needs-review relnotes-tracking-issue T-lang T-libs T-opsem
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
I maintainer di solito rispondono entro 1 giorno