Ajax HTML 5 JavaScript Création site CMS Comment Design Logiciels Programmation RSS SQL Scripts Mobiles
Forum
JAVASCRIPT
Node.js
Environnement Node.js
Twitter
Calculs de dates
jQuery & applications
TECHNIQUES WEB
Qu'est-ce qu'Ajax?
Interfaces Web
Frameworks Ajax
Frameworks HTML 5
JSON ou XML
CSS

Le compilateur JavaScript V8

Un compilateur JIT qui peut fonctionner dans un navigateur ou de façon indépendante.

Ce compilateur est fourni sous forme open source par Google ce qui a permis le développement d'outils comme le serveur d'applications Node.js.

Sa rapidité d'exécution en effet permet d'utiliser JavaScript pour réaliser des logiciels systèmes. Il n'interprète pas le code mais le compile avant de l'exécuter, bien que les variables soient dynamiques et donc puissent changer de type au cours du développement du programme. Mais on dispose de techniques comme l'inférence de type pour gérer ce problème.

Le compilateur JavaScript V8

V8 dispose d'un garbage collector (du type stop-the-world, il stoppe l'exécution pour un cycle de nettoyage), un avantage par rapport au langage C++. Il recourt à un assembleur basé sur celui de Smalltalk (Strongtalk), pour créer du code natif à partir du bytecode de haut-niveau.

Il implémente (en 2012) ECMA-262, la troisième édition de JavaScript, et fonctionne sur Windows, MacOS et Linux (ARM ou x386).

Utiliser V8 comme langage de script

On peut donc grâce à V8 utiliser JavaScript comme langage de script et éventuellement doter les scripts d'interface graphique hors navigateur en les intégrant à du code C++ et ses librairies graphiques.
V8 est conçu comme une librairie que l'on peut lier à tout projet C++ et donc utiliser le compilateur comme une fonction d'un système plus vaste.

C'est ce que fait le navigateur Chrome, pour lequel il est fait, et auquel il procure sa rapidité d'exécution supérieure par rapport à celle des concurrents. Mais ceux-ci tendent à adopter les mêmes techniques et à le rattraper.

Quand à Node.js, c'est un serveur écrit en JavaScript destiné à des applications qui peuvent se développer sans limitation dans le temps. Il est asynchrone et réagit, comme les applications HTML, aux évènements. Il est utilisé par Microsoft pour le service Azure, par eBay, par LinkedIn pour les mobiles, par Yahoo pour le projet Manhattan.

Il fonctionne avec un lanceur d'application

On peut l'intégrer à un programme C++ ou l'utiliser seul pour exécuter, comme le fait un interpréteur, un programme JavaScript. Dans le second cas il faut créer une fonction main qui sert a appeler le parseur, lui fournir un code source à compiler et afficher le résultat de la compilation.
Mais le code généré peut fonctionner en interaction avec les librairies incluses dans le projet.

En schématisant, pour exécuter un programme, on doit créer un lanceur que l'on va lier au code de V8 avant de compiler celui-ci. On crée ainsi un interpréteur qui pourra parser et exécuter des scripts JavaScript.

int main(int argc, char* argv[]) 
{
  String source = String::New($argv[1]);
  Script script = Script::Compile(source);
  Value result = script->Run();
  String::AsciiValue ascii(result);
  printf("%s\n", *ascii);
  return 0;
}

La version détaillée et les instructions pour construire l'interpréteur JIT se trouvent sur le site de V8 dans la section getting started.

Référence

  • Conception de V8. (Anglais).

Voir aussi

  • JavaScript. Description du langage.
Tweet
© 2012 Scriptol.fr