XPCOM

Une architecture multi-langages de programmation

Multi-langages de programmation

La base de XPCOM est composée de code écrit en C++. Toutefois, rien n'empêche de créer des composants dans d'autres langages. L'unique pré-requis est l'existence d'un wrapper qui permet de convertir les appels d'un langage à l'autre.

C'est une grande force de l'architecture XPCOM car cela permet de combiner les avantages des différents langages. De plus, cela ouvre l'écriture de composants à une communauté plus importante de développeurs.

Comme le montre la figure suivante, les composants écrits en C++ sont nativement utilisés par la plateforme XPCOM. En revanche, les composants écrits en JavaScript (et qui sont interprétés par l'interpréteur JavaScript de Mozilla) sont wrappés par XPConnect. Un mécanisme similaire existe pour les composants écrits dans d'autres langages de programmation.

Interconnexion des composants

Un point très important de cette architecture est l'indépendance de l'implémentation et de l'utilisation du composant. Cela signifie qu'un composant peut s'adresser à un autre composant sans savoir dans quel langage est écrit l'autre composant. L'interfaçage des composants rend transparente l'utilisation de différents langages de programmation.

Des wrappers ont été mis au point pour les langages suivants :

Toutefois, il faut noter que le support est loin d'être parfait, à l'exception du support de XPConnect qui est largement utilisé dans Mozilla. Par exemple, la dernière release de BlackConnect ne fonctionne qu'avec Mozilla 0.9, alors que la version stable de Mozilla est actuellement la version 1.7.

Langages des composants utilisés par Mozilla

Au sein de Mozilla, la majeure partie des composants est écrite en C++ et en JavaScript. Plus précisément, les composants de bas niveau (ceux qui gèrent le réseau, par exemple) sont écrits en C++, tandis que de nombreux composants de plus haut niveau sont écrits en JavaScript.

Le langage C++ est utilisé dès lors qu'il s'agit de réaliser des appels de bas niveau ou lorsque le critère de performance est important. La gestion des threads est ainsi réalisée en C++, de même que celle des fichiers ou du réseau.

Le langage JavaScript est utilisé dans toutes les couches hautes de l'application. Ainsi, toute la logique applicative est réalisée en JavaScript (gestion des interactions avec l'utilisateur...). Cela permet aux développeurs de réaliser très rapidement ce qui serait long à développer en C++. De plus, cela apporte de la fiabilité au logiciel car la gestion de la mémoire est déléguée à l'interpréteur JavaScript.