ropensci / software-review

rOpenSci Software Peer Review.
286 stars 104 forks source link

QuickJSR - Portable, lightweight JavaScript engine for R #646

Closed andrjohns closed 3 weeks ago

andrjohns commented 4 weeks ago

Submitting Author Name: Andrew Johnson Submitting Author Github Handle: !--author1-->@andrjohns<!--end-author1-- Repository: https://github.com/andrjohns/QuickJSR Submission type: Pre-submission Language: en


Package: QuickJSR
Title: Interface for the 'QuickJS' Lightweight 'JavaScript' Engine
Version: 1.2.0.9000
Authors@R: c(
    person(c("Andrew", "R."), "Johnson", , "andrew.johnson@arjohnsonau.com", role = c("aut", "cre"),
           comment = c(ORCID = "0000-0001-7000-8065")),
    person("Fabrice", "Bellard", role = c("cph"),
           comment = "Author of QuickJS sources and headers"),
    person("Charlie", "Gordon", role = c("cph"),
           comment = "Author of QuickJS sources and headers")
  )
Description: An 'R' interface to the 'QuickJS' portable 'JavaScript'
    engine.  The engine and all 'R' to 'JavaScript' interoperability is bundled
    within the package, requiring no dependencies beyond a 'C' compiler.
License: MIT + file LICENSE
URL: https://github.com/andrjohns/QuickJSR, https://bellard.org/quickjs/
BugReports: https://github.com/andrjohns/QuickJSR/issues
Suggests:
    knitr,
    rmarkdown,
    tinytest
Encoding: UTF-8
Language: en-AU
NeedsCompilation: yes
Roxygen: list(markdown = TRUE)
RoxygenNote: 7.3.1
SystemRequirements: GNU make
VignetteBuilder: knitr

Scope

Providing an R interface to JS code, and the ability to pass objects/values/functions/environments between them, allows for additional flexibility in the tools available for accessing different data APIs and existing packages/scripts (e.g., NPM) for working with them.

It might fit better under the Computing Infrastructure or HTTP Tools categories listed on the rOpenSci website, but those weren't options to choose from

Target audience would be users with existing pipelines needing JS interaction/evaluation, or JS code that they need to integrate into a package without rewriting.

Existing alternative would be V8, but that requires a system dependency (libv8) which can be difficult to install for some systems. Unlike V8, QuickJSR is also able to pass functions, environments, and closures to JS code, with no need for serialisation.