dimanche 18 novembre 2012

Node.js pour les pas-tout-a-fait nuls


Cet article est destiné à faire le point sur Node.js avec un certain recul vis à vis des réactions positives ou négatives engendrées par ce phénomène.
généré à partir du site www.txt2pic.com

Node.js : c'est quoi ?


Node est une machine virtuelle capable d'exécuter des programmes javascript.


Node.js désigne l 'environnement (la galaxie) de Node (sans l'extension .js). Node est un programme (exécutable) écrit en C++ et compilé. Node n'est pas en javascript. Node est un programme qui va recevoir en entrée des fichiers sources de javascript, il va interpréter (traduire) en langage machine les instructions javascript et va les exécuter.

Le résultat de la commande file sur le fichier node
Node est donc un interpréteur de javascript. Il joue le même rôle que la JVM pour les projets java (Machine Virtuelle Java) mais pour le javascript !

Pourquoi le terme de machine virtuelle ?

Tout d'abord définissons le notion de portabilité
La portabilité d'un programme qualifie le niveau d'indépendance d'un programme vis à vis de la machine physique (système) qui l'accueille. Ainsi un programme dit 'portable' fonctionnera sur des systèmes différents, en l'état, sans changement de code majeur.
Pour assurer la portabilité d'un programme (javascript, java ou autre ) il est possible d'avoir deux approches :

La compilation adaptée.

La première approche consiste à recompiler les sources du programme en fonction des systèmes cibles : c'est le dispositif adopté pour les programmes en C ou C++. La contrainte forte est de pouvoir disposer des codes sources du programme et d'un compilateur. Cette solution n'est pas satisfaisante pour les langages interprétés.

L'utilisation d'un composant intermédiaire : la machine virtuelle.

La deuxième méthode consiste utiliser un composant qui va servir de médiateur entre le code (les instructions du programmes) et le système d'accueil : c'est le rôle de l’interpréteur appelé dans ce cas 'machine virtuelle'. Ainsi , il y aura une machine virtuelle adaptée à chaque environnement. Ces machines virtuelles prennent en charge l’interprétation des instructions d'un programme et leurs traductions adaptées au système de la machine physique hôte. Ces machines virtuelles masquent les disparités des environnements d'accueil. Elles prennent à leur charge la gestion des écarts de comportement, de matériel , d'appel de fonction système etc..

Remarque : Une machine virtuelle est couramment 'fabriquée' à partir de la méthode 1 (compilation adaptée) d'un projet 'modèle'.

Ainsi le programme Node va lire des fichiers qui contiennent des instructions 'javascript' et exécutera chaque instruction javascript en les traduisant par des instructions machines et des appels de fonction.
Il existe des machines virtuelles Node pour les systèmes les plus usités : Microsoft, Ubuntu , MacOS etc.
La liste de architectures supportées par Node

Un programme javascript s'exécutera et se comportera de la même façon sur tous ces environnements: le javascript est donc portable.

Le javascript est le seul langage de programmation normalisé (standard ECMA-262)  à pourvoir s’exécuter nativement dans un navigateur. Avec Node.js , il s’exécute à présent sur le serveur ou d'une manière générale en dehors du navigateur.


La suite à venir:   mettre un  V8 dans ses programmes, la licence Node.js etc..


Question bonus: Pourquoi les programmes java passent par une phase de pré-compilation (bytecode) ?

Aucun commentaire: