Neon : Embarquer du code Rust dans les applications node.js

Par:
fredericmazue

jeu, 22/10/2020 - 17:37

Neon consiste en une bibliothèque et une chaîne d'outils permettant de créer des modules Node natifs écrits en Rust. Il est bien sûr déjà possible de créer des modules Node natifs en C/C++. Le but de Neon est d'amener la sûreté de Rust pour les modules Node natifs.

Neon vient sous la forme d'un package Node. Pour créer un projet de module, on utilise un outil du package, qui génère toute l'arborescence nécessaire, avec, au sein de celle-ci, un fichier Cargo.toml pour générer les dépendances Rust. Un projet Neon est lui-même un package Node et il doit être pensé comme tel.

Un module Node natif permet d'exécuter des tâches asynchrones en arrière plan. Neon utilise pour cela l'API microtask de N-API et s'appuie sur les callback et promises côté JavaScript pour contrôler l'exécution.

Neon peut aussi être utilisé dans les applications Electron.

Voici un exemple de code de module Neon dont le code Rust génère un tableau et remplit celui-ci de 3 éléments

fn make_an_array(mut cx: FunctionContext) -> JsResult<JsArray> {
    // Create some values:
    let n = cx.number(9000);
    let s = cx.string("hello");
    let b = cx.boolean(true);

    // Create a new array:
    let array: Handle<JsArray> = cx.empty_array();

    // Push the values into the array:
    array.set(&mut cx, 0, n)?;
    array.set(&mut cx, 1, s)?;
    array.set(&mut cx, 2, b)?;

    // Return the array:
    Ok(array)
}

register_module!(mut cx, {
    cx.export_function("makeAnArray", make_an_array)
})

Neon dispose d'un site dédié sur lequel on trouvera de la documentation, dont un guide de démarrage.

Neon est un logiciel libre sous deux licences : Apache et MIT, au choix. Neon est disponible sur GitHub