Bonjour.

EcmaScript est présent dans bien des domaines. Bien souvent confondu avec JavaScript.

La machine virtuelle Java accueille déjà, depuis quelques années d'autres langages que Java. Parmi eux: des langages interprétés.
On peut citer TCL ou Python.

On doit à Mozilla le portage d'EcmaScript dans la JVM avec le projet, Rhino.

Le besoin de langages plus souples, plus dynamiques, au sein de la JVM n'est donc pas nouveau.
Une des forces d'EcmaScript est sa capacité à interagir avec son environnement d'exécution.
Dès le départ, EcmaScript a été conçu pour être embarqué et offrir des moyens de lier le contexte d'exécution avec les objets de l'hôte. Par exemple l'API DOM du navigateur.

Face à de tels besoins, Java intègre donc dans la JVM en version 8 un moteur EcmaScript. Et pour rendre hommage à Mozilla qui a créé Rhino celui-ci l'appellera Nashorn. (rhino en allemand).

L'annonce a été publiée dans le numéro Janvier/Fevrier 2014 de Java Magasine.

Il y a quelques différences fondamentales entre nashorn, et ce que nous connaissons dans le navigateur.

Dans le navigateur, JavaScript nous offre plusieurs choses.
En premier lieu EcmaScript lui-même. c'est lui qui permet l'interprétation, mais fournis aussi quelques éléments de base comme Math, Array, etc.
En second, vient l'API W3C. Cette API ne fournit en fait pas grand-chose au sens EcmaScript et pourtant beaucoup en terme d'usage. En tout et pour tout l'API W3C ajoute 1 objet au contexte d'exécution : window. C'est au travers de lui qu'on a accès à tous les objets du navigateur. Comme le document ou les éléments qui le composent.
Cette implémentation importe donc dans le contexte EcmaScript un objet et donne donc accès à toutes ces méthodes et attributs. (de nombreux synonymes comme "document" facilitent l'écriture)

Dans Rhino ou Nashorn rien de tel.
Il y a effectivement EcmaScript. Mais pas d'objet ajouté au contexte. À la place un accès complet aux classes Java est disponible.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
var stack = 
new java.util.LinkedList();
[1, 2, 3, 4].forEach(function(item) {
  stack.push(item);
});
dans cet exemple stack, est une instance de la classe java LinkedList du package java.util.
Pour cela Nashorn ajoute donc à EcmaScript un certain nombre d'éléments pour importer des packages java.

Tout cela est bien gentil, mais l'intérêt est faible.
Le point important est que lorsqu’on embarque Nashorn dans un développement Java les objets Java peuvent avoir accès au contexte EcmaScript et donc, aux objets et prototypes définis dans celui-ci.
Mais c'est aussi vrai dans l'autre sens. On peut étendre un objet java en lui ajoutant des membres et des méthodes dynamiquement. Ce qui rend le tout beaucoup plus souple.

Bref JS s'invite officiellement dans le monde Java.
Tutoriel sur les nouveautés du langage 8
A+JYT