Node.js Bindings for ROOT6: Difference between revisions

From Lsdf
Jump to navigationJump to search
(Created page with "Zurück zur Themenliste = Description = [http://root.cern.ch/ ROOT] is a modular scientific software framework developed at CERN. It has beco...")
 
 
Line 9: Line 9:
applications. We aim specifically at ROOT 6 because its LLVM-based C++ interpreter Cling offers many advantages over the one available in older ROOT versions. The bindings should:
applications. We aim specifically at ROOT 6 because its LLVM-based C++ interpreter Cling offers many advantages over the one available in older ROOT versions. The bindings should:
* allow the user to interact with any ROOT class from the Node.js JavaScript interpreter
* allow the user to interact with any ROOT class from the Node.js JavaScript interpreter
* accept C++ code for just-in-time compilation and
* accept C++ code for just-in-time compilation
* update dynamically following changes to C++ internals
* update dynamically following changes to C++ internals
* provide asynchronous wrappers for common I/O operations (i.e. file and tree access)
* provide asynchronous wrappers for common I/O operations (i.e. file and tree access)

Latest revision as of 15:00, 20 October 2015

Zurück zur Themenliste

Description

ROOT is a modular scientific software framework developed at CERN. It has become a de-facto standard for storage, processing and analysis of data in elementary-particle physics, including experiments at the LHC. ROOT is written mainly in C++ and is typically used to execute user-provided macros (scripts) using a built-in C++ interpreter, which in the latest major version, 6, is based on LLVM. That said, bindings for higher-level languages such as Python, Ruby or R also exist and are commonly used.

The goal of this project is to create Node.js bindings for ROOT, thanks to which it will become possible to e.g. integrate ROOT into Node-based Web applications. We aim specifically at ROOT 6 because its LLVM-based C++ interpreter Cling offers many advantages over the one available in older ROOT versions. The bindings should:

  • allow the user to interact with any ROOT class from the Node.js JavaScript interpreter
  • accept C++ code for just-in-time compilation
  • update dynamically following changes to C++ internals
  • provide asynchronous wrappers for common I/O operations (i.e. file and tree access)
  • support the streaming of data in JSON format compatible with JavaScript ROOT

Goals

  • meet standard PSE goals
  • gain knowledge about interfacing between different programming languages
  • learn how to develop native-code modules for Node.js
  • get better at non-blocking/asynchronous programming

Requirements

  • English (the output of the project is meant for consumption by an international scientific community)
  • Linux (should know how to write code under this OS, although the final product should ideally be cross-platform)
  • good knowledge of C++
  • basic knowledge of JavaScript and the Node.js ecosystem
  • some familiarity with asynchronous programming and streams

Project Supervisor

Marek Szuba (SCC Campus Nord)