2017-00122 - Ingénieur pour développement de JSExplain, un interpréteur de JavaScript en OCaml

Type de contrat : CDD de la fonction publique

Contrat renouvelable : Oui

Niveau de diplôme exigé : Bac + 5 ou équivalent

Fonction : Ingénieur scientifique contractuel

Niveau d'expérience souhaité : Jeune diplômé

A propos d'Inria

Inria, institut de recherche dédié au numérique, promeut « l'excellence scientifique au service du transfert technologique et de la société ». Inria emploie 2700 collaborateurs issus des meilleures universités mondiales, qui relèvent les défis des sciences informatiques et mathématiques. Son modèle ouvert et agile lui permet d’explorer des voies originales avec ses partenaires industriels et académiques. Inria répond ainsi efficacement aux enjeux pluridisciplinaires et applicatifs de la transition numérique. Inria est à l'origine de nombreuses innovations créatrices de valeur et d'emplois.

A propos du centre ou de la direction fonctionnelle

Le centre de recherche Inria Rennes-Bretagne Atlantique est l’un des huit centres de recherche Inria regroupant 620 personnes dont 400 scientifiques, réparties dans 33 équipes de recherches et 8 services d’appui et soutien à la recherche.

Contexte et atouts du poste

Dans le cadre du projet ANR Ajacs et du projet CominLabs SecCloud, l'objectif est de déveloper et étendre l'application JSExplain, un interpréteur de JavaScript écrit en OCaml.

JavaScript est un langage extrêmement complexe. Non seulement le langage contient de nombreux éléments (la dernière version du standard fait plus de 500 pages), mais son développement se basant sur la standardisation de plusieurs implémentations conduit à une accrétion de nombreuses fonctionnalités dont les interactions sont multiples.

JavaScript est en effet défini par une spécification, appelée ECMAscript, qui est conçue par un comité de standardisation. Ce comité, le TC39 d'ECMA, est composé des grands acteurs du web, non seulement des entreprises implémentant des navigateurs comme Mozilla, Google, Apple ou Microsoft, mais également des utilisateurs du langage, comme Netflix, AirBnB ou Paypal, ainsi que des institutions académique, dont Imperial College et Inria.

Ajouter des fonctionnalités à JavaScript exige de bien étudier les interactions avec le langage existant. C'est d'autant plus crucial que le fil directeur du comité de standardisation est « on ne casse pas le web » : dès qu'une fonctionnalité est utilisée en pratique, on ne peut pas l'enlever du standard.

Pour ce faire, le comité s'est muni d'un processus très contraignant pour le développement du langage. Chaque proposition passe par plusieurs étapes avant d'être intégré au standard, et la dernière étape requiert que la fonctionnalité soit implémentée et diffusée dans deux des quatre navigateurs principaux (Firefox, Chrome, Safari et Edge). Ce processus ne permet cependant pas de suffisamment explorer les propositions avant la phase de prototypage.

Durant les 3 dernières années où nous avons participé au comité de standardisation, en tant que représentants Inria et Imperial College, nous avons observé une forte demande pour accompagner le processus de standardisation. C'est dans ce cadre que nous avons choisi une approche pragmatique pour transférer des garanties formelles à ce processus.

Notre outil actuel, JSExplain, se compose des éléments suivants.

  • Une implémentation d'ECMAscript 5.1 écrite dans un sous-ensemble de OCaml et très proche de la spécification. La version 5.1 du standard était plus courte (de l'ordre de 200 pages), et notre implémentation couvrant tout le langage à l'exception de certaines bibliothèques (dates, URL, expressions régulières, …) représente 10000 lignes de OCaml.
  • Un compilateur de ce sous-ensemble de OCaml vers un sous-ensemble de JavaScript qui est fonctionnel et typé. La version compilée de notre interprète fait 17000 lignes de JavaScript.
  • Une instrumentation de la compilation permettant d'exécuter un programme JavaScript pas à pas, de manière interactive, en montrant à la fois l'état du programme mais également l'état de l'interprète. Ceci permet de précisément comprendre comment des programmes s'exécutent en suivant la spécification. Une démonstration est disponible en ligne (https://jscert.github.io/jsexplain/branch/master/driver.html).
  • Une intégration aux jeux de tests de JavaScript pour la version OCaml et la version JavaScript.

Mission confiée

La mission de ce poste consiste à étendre et améliorer JSExplain, afin qu'il devienne un outil incontournable dans le processus de standardisation.

Notre objectif à moyen terme est l'adoption par le comité de standardisation soit de cette implémentation comme implémentation de référence, soit d'une version dans un langage bien spécifié (comme une extension de ECMArkup, actuellement utilisé pour écrire les algorithmes de la spécification) qui serait compilé vers cette implémentation de référence. Dans les deux cas, nous voulons pouvoir facilement suivre l'évolution de JavaScript pour que l'implémentation reste en phase avec la spécification. À long terme, nous voulons fournir des outils permettant au comité de standardisation de faire ces mises à jour directement.

La personne recrutée sera amenée à participer aux réunions du comité de standardisation de JavaScript. Les frais de déplacements seront pris en charge dans la limite du barème en vigueur.

 

Principales activités

  • Extension de notre outil de traduction de OCaml vers JavaScript.
  • Étude de la spécification de JavaScript et extension de l'implémentation en OCaml pour couvrir tout le standard actuel
  • Consolidation de l'outil de visualisation interactive et intégration des liens de l'interprète vers la spécification en ligne
  • Participation au processus de standardisation et présentation de l'outil au comité de standardisation.

 

Compétences

  • Programmation fonctionnelle en OCaml
  • Anglais oral et écrit, pour présentations et écriture de rapports
  • Connaissance de JavaScript non requise mais appréciée

 

Avantages sociaux

  • Restauration subventionnée
  • Transports publics remboursés partiellement
  • Sécurité sociale
  • Congés payés
  • Aménagement du temps de travail
  • Installations sportives

Rémunération

A partir de 2 562€ brut mensuel