89 votes

Comment les langues multiples interagissent-elles dans un projet ?

J'ai entendu dire que certaines personnes programmaient en plusieurs langues dans le cadre d'un même projet. Je n'arrive pas à imaginer comment les langues interagissent entre elles.

Je veux dire par là qu'il n'existe pas de méthode Java du type

myProgram.callCfunction(parameters);

ne se produit jamais ou est-ce que je me trompe ?

44voto

0xA3 Points 73439

La présence de plusieurs langues dans un même projet est en fait assez courante, mais les principes qui la sous-tendent ne sont pas toujours simples.

Dans le cas le plus simple, différents langages sont compilés dans le même code. Par exemple, les codes C et C++ sont généralement compilés en assembleur machine ou C# et VB.Net sont compilés en IL (le langage compris par le moteur d'exécution .NET).

Les choses se compliquent si les langages/compilateurs utilisent un système de types différent. Les types de données de base tels que les entiers, les flottants et les doubles peuvent être représentés de différentes manières en interne, et il existe encore plus de façons de représenter les chaînes de caractères. Lors du passage des types entre les différents langages, il faut s'assurer que les deux parties interprètent le type de la même manière ou - si ce n'est pas le cas - que les types sont correctement mappés. Ce type de mappage de type est également connu sous le nom de marshalling .

Les exemples classiques d'interopérabilité entre différents langages de programmation sont (principalement dans le monde Windows) :

  • Les différentes langues disponibles pour la plate-forme .NET. Cela comprend C#, VB.Net, J#, IronRuby, F#, XSLT et bien d'autres langages moins populaires.
  • Les composants COM natifs écrits en C++ ou VB peuvent être utilisés avec une grande variété de langages : VBScript, VB, tous les langages .NET, Java
  • Les fonctions de l'api Win32 peuvent être appelées à partir de .NET ou VB
  • IPC (communication interprocessus)
  • Corba L'approche la plus complète (et la plus complexe) est probablement la suivante
  • Les services web et autres architectures orientées services, probablement l'approche la plus moderne

22voto

Electrons_Ahoy Points 6972

En général, tout projet web de taille raisonnable utilise environ cinq langues : HTML, CSS, Javascript, une sorte de langage côté serveur (ASP, JSP, CGI scripts avec Perl, PHP, etc.), et une variante de SQL pour la connectivité avec la base de données.

(Il s'agit, bien entendu, d'écarter d'un revers de main la question de savoir si HTML et CSS sont ou non des langages de programmation - je suis du camp "ils le sont, mais ce ne sont pas des langages Turing-complets", mais il s'agit là d'un tout autre sujet).

Quelques exemples de la manière dont tous ces éléments fonctionnent ensemble :

Si vous suivez les meilleures pratiques, la structure d'une page web est en HTML, et les instructions pour l'afficher sont en CSS - qui pourraient être dans le même fichier, mais ne doivent pas nécessairement l'être. Le CSS contient une série de classes, auxquelles le HTML fait référence, et c'est au navigateur de déterminer comment les cliquer ensemble.

Pour aller plus loin, tout scripts javascript sur cette page peut modifier n'importe quel HTML/CSS présent (changer le contenu des entités HTML, remplacer une classe CSS par une autre, changer le comportement du CSS, etc.) Pour ce faire, il utilise ce que l'on appelle le Document Object Model, qui est essentiellement une API indépendante du langage et de la plate-forme permettant de manipuler les pages HTML à la manière d'un objet (à ce stade, je vais m'éloigner doucement et me contenter de fournir un lien vers le document article wiki pertinent .)

Mais alors, d'où vient tout le HTML / CSS / Javascript ? C'est ce que fait le langage côté serveur. Dans sa forme la plus simple, le langage côté serveur est un programme qui renvoie une chaîne géante contenant une page HTML. Cela peut évidemment devenir beaucoup plus complexe : les formulaires HTML et les paramètres de la chaîne de requête peuvent être utilisés comme entrée pour notre programme côté serveur, et puis il y a tout le truc AJAX où le javascript peut envoyer des données directement au langage côté serveur aussi. Il est également possible de faire preuve de fantaisie en permettant au langage du serveur de personnaliser le HTML, le CSS et le Javascript qui sont envoyés - essentiellement, un programme dans un langage écrit un programme dans un autre langage.

La connexion entre le langage côté serveur et SQL fonctionne à peu près de la même manière. Il existe de nombreuses façons de la rendre à la fois plus complexe et plus sûre, mais la plus simple est que le langage de votre serveur construise dynamiquement une chaîne contenant une commande SQL, la transmette à la base de données via une sorte de connecteur, et récupère un ensemble de résultats. (C'est un cas où vous avez vraiment une fonction qui se résume à someValue = database.executeThisSQLCommand( SQLString ). )

Pour résumer, les différents langages communiquent soit en écrivant des programmes les uns dans les autres, soit en transmettant des données dans des formats très simples et faciles à analyser que tout le monde peut comprendre (chaînes de caractères, principalement). (Chaînes de caractères, principalement).

16voto

Alan Points 21367

L'utilisation de plusieurs langages est appelée "interopérabilité" ou "interop" en abrégé.

Votre exemple est erroné. Java peut appeler des fonctions C.

Le langage fournit un mécanisme d'interopérabilité.

Dans le cas de .NET, les langages sont compilés en IL dans le cadre de la CLI. Ainsi, tout langage .NET peut interopérer (appeler des méthodes définies par) des modules définis dans n'importe quel autre langage .NET.

A titre d'exemple :

Je peux définir une méthode en C#

static void Hello(){ Console.WriteLine("Hello World");}

Et je peux l'appeler depuis Python (IronPython)

 Hello()

Et j'obtiens le résultat escompté.

D'une manière générale, certains langages sont plus interopérables que d'autres, en particulier si les auteurs du langage ont spécifiquement fait de l'interopérabilité une caractéristique du langage.

14voto

shsmurfy Points 732

Plusieurs langues peuvent interagir :

  1. Entrée/sortie par pipeline (N'IMPORTE QUEL langage peut le faire) car l'entrée et la sortie doivent nécessairement être implémentées dans tous les langages qui ne sont pas des jouets. non jouet)
  2. Compiler du code dans un langage vers une bibliothèque native tandis que l'autre langue permet d'appeler le code natif.
  3. Communication sur une connexion réseau de type loopback. Vous pouvez des problèmes d'interférence avec le pare-feu.
  4. Bases de données. Celles-ci peuvent être considérées comme un format "universel" de stockage de données. de stockage de données "universel" et sont donc accessibles à la plupart des langages avec des extensions de base de données. En général, cela exige qu'un programme termine son opération avant que le programme suivant ne puisse puisse accéder à la base de données. En outre, toutes les "communications" sont généralement écrites sur le disque.
  5. Si les langages concernés fonctionnent avec le même système d'exécution (c'est-à-dire .NET, JVM), vous pouvez généralement transmettre des données d'objet d'un langage à l'autre. directement d'un langage à l'autre.

Dans presque tous les cas, vous devez convertir toute communication en une communication commune de type commun avant de pouvoir être échangée (à l'exception des langages utilisant le même système d'exécution). même runtime). C'est pourquoi plusieurs langues sont rarement utilisées dans un même projet. projet.

5voto

bedwyr Points 3759

Je travaille sur un grand projet d'entreprise qui comprend (au dernier décompte) environ 8 langues. La majorité des communications s'effectue via un bus de messages au niveau de l'entreprise, qui contient des liens permettant à plusieurs langues de se connecter et de transmettre des données dans un sens ou dans l'autre. Ce bus s'appelle tibco .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X