J'ai entendu des gens programmer en plusieurs langues dans un même projet. Je ne peux pas imaginer comment les langues interagissent entre elles.
Je veux dire qu'il n'y a pas de méthode Java comme
myProgram.callCfunction(parameters);
n'arrive jamais ou je me trompe?
Avoir plusieurs langues dans un même projet est en fait assez courant, mais les principes ne sont pas toujours simples.
Dans le cas simple, différentes langues sont compilées dans le même code. Par exemple, le code C et C++ est généralement compilé dans l'assembleur de machine ou C # et VB.Net est compilé en IL (le langage compris par le runtime .NET).
Cela devient plus difficile si les langages/compilateurs utilisent un système de type différent. Il peut y avoir de nombreuses façons différentes, les types de données de base tels que les nombres entiers, flottants et doubles sont représentés en interne, et il existe encore plus de façons de représenter les chaînes. Lorsque vous passez des types entre les différentes langues, vous devez vous assurer que les deux côtés interprètent le même type ou - sinon - les types sont correctement mappés. Ce type de mappage de type est également appelé marshalling .
Des exemples classiques d'interopérabilité entre différents langages de programme sont (principalement du monde Windows):
En règle générale, tout projet Web de taille décente utilisera environ cinq langues: HTML, CSS, Javascript, une sorte de langage "faire avancer les choses" côté serveur (ASP, JSP, scripts CGI avec Perl, PHP, etc.), et certaines variantes de SQL pour la connectivité à la base de données.
(Ceci, bien sûr, fait disparaître l'argument de savoir si HTML et CSS comptent ou non comme langages de programmation - je suis le camp "ils le sont, mais pas les langages complets de Turing", mais c'est un tout autre fil. )
Quelques exemples de la façon dont tous ces éléments fonctionnent ensemble:
Si vous suivez la voie des meilleures pratiques, la structure d'une page Web est en HTML, et les instructions pour l'afficher sont en CSS - qui pourrait être dans le même fichier, mais ce n'est pas obligatoire. Le CSS contient un tas de classes, auxquelles le HTML fait référence, et c'est au navigateur de comprendre comment les cliquer ensemble.
Pour aller plus loin, tous les scripts javascript de cette page peuvent modifier n'importe quel code HTML/CSS présent (modifier le contenu des entités HTML, remplacer une classe CSS par une autre, changer le comportement du CSS, etc.). ) Il le fait via quelque chose appelé le modèle d'objet de document, qui est essentiellement une API indépendante du langage et de la plate-forme pour manipuler les pages HTML d'une manière semblable à un objet (auquel point je reculerai lentement et fournirai simplement un lien vers le - 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é sereur est un programme qui renvoie une chaîne géante contenant une page HTML en sortie. Cela, évidemment, peut devenir beaucoup plus complexe: les formulaires HTML et les paramètres de chaîne de requête peuvent être utilisés comme entrée pour notre programme côté serveur, et vous avez alors l'ensemble AJAX chose où le javascript peut envoyer les données directement dans la langue du serveur également. Vous pouvez également imaginer où la langue du serveur peut personnaliser le HTML, CSS et Javascript qui se crache - essentiellement, vous avez un programme dans une langue écrivant un programme dans une autre langue.
Le langage côté serveur vers la connexion SQL fonctionne de la même manière. Il existe de nombreuses façons de le rendre à la fois plus complexe et plus sûr, mais le plus simple est que le langage de votre serveur crée dynamiquement une chaîne contenant une commande SQL, la transmette à la base de données via une sorte de connecteur et revienne un ensemble de résultats. (Il s'agit d'un cas où vous avez vraiment une fonction qui se résume à someValue = database.executeThisSQLCommand (SQLString).)
Donc, pour conclure, différentes langues dans ce cas communiquent soit en écrivant des programmes entre elles, soit en distribuant des données dans des formats très simples à analyser que tout le monde peut comprendre. (Cordes, principalement.)
Plusieurs langues utilisées sont appelées "interopérabilité" ou "interop" pour faire court.
Votre exemple est faux. 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, n'importe quel langage .NET peut interopérer (appeler des méthodes définies par) des modules définis dans tout autre langage .NET.
Par 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 obtenez la sortie attendue.
D'une manière générale, certaines langues interagissent mieux que d'autres, surtout si les auteurs de la langue ont spécifiquement fait de l'interopérabilité une caractéristique de la langue.
Plusieurs langues peuvent interagir avec:
Dans presque tous les cas, vous devez convertir toute communication dans un format commun avant de pouvoir l'échanger (l'exception concerne les langues sur le même runtime). C'est pourquoi plusieurs langues sont rarement utilisées dans un même projet.
Vous pourriez avoir une application où l'essentiel du travail est effectué en Java, mais il peut y en avoir une partie, comme peut-être un analyseur de données ou quelque chose est écrit en Python ou quoi d'autre). Presque deux applications distinctes vraiment, peut-être que l'analyseur fait juste un peu de travail sur les fichiers, puis votre application principale en Java les utilise pour quelque chose. Si quelqu'un me demandait ce que j'ai utilisé dans ce projet Je dirais "Java et Python".
Il existe différentes manières d'utiliser plusieurs langues dans un même projet. Quelques exemples:
Juste pour ajouter à la liste d'exemples, il est assez courant d'optimiser Python en C ou C++ ou d'écrire une bibliothèque C pour lier une autre bibliothèque à Python.
Cela dépend du type de projet. Si vous voulez expérimenter, vous pouvez configurer un projet Web, dans .NET, et changer la langue page par page. Cela ne fonctionne pas comme vous le montrez dans votre pseudocode, mais c'est plusieurs langues. Bien sûr, le répertoire de code réel doit être une seule langue.
Il existe plusieurs façons dont le code dans les langues peut interagir directement. Tant que les données transmises entre le code sont au bon format, au niveau des bits et octets, il n'y a aucune raison pour que différentes langues ne puissent pas interopérer. Cette approche est utilisée dans les fenêtres traditionnelles DLL. Même sur différentes plates-formes, si vous pouvez obtenir le format correct (regardez grand/petit endian si vous êtes intéressé) cela fonctionnera tant que votre éditeur de liens ( pas le compilateur) sait joindre le code ensemble.
Au-delà de cela, il existe de nombreuses autres façons dont les langues peuvent se parler. Dans le monde .Net, le code est compilé en code IL, qui est le même pour chaque langue, de cette manière C #, VB.Net sont tous les mêmes sous le capot et peuvent s'appeler/travailler ensemble de manière transparente.
Mal. S'il n'y a pas de besoin urgent, respectez une seule langue. Vous augmentez les dépendances et la complexité. Mais lorsque vous disposez d'un code existant offrant des fonctionnalités intéressantes, il peut être plus facile de le coller ensemble que de le recréer.