Comment faire de multiples langues interagissent dans un projet?
J'ai entendu certaines personnes programme dans plusieurs langues dans un même projet. Je ne peux pas imaginer comment les langues interagissent les uns avec les autres.
Je veux dire il n'y a pas de méthode Java comme
myProgram.callCfunction(parameters);
n'arrive jamais, ou je me trompe?
Vous devez vous connecter pour publier un commentaire.
Le fait d'avoir plusieurs langues dans un seul projet est en fait assez commun, cependant, les principes qui sous-tendent ne sont pas toujours simples.
Dans les cas les plus simples, les différentes langues sont compilés dans le même code. Par exemple, le C et le C++ code est généralement compilé dans la machine assembleur ou en C# et VB.Net est compilé en IL (la langue comprise par la .NET runtime).
Il devient plus difficile si les langues et les compilateurs utilisent un différent type de système. Il peut y avoir de nombreuses façons différentes, types de données de base tels que integer, float et double sont représentés en interne, et il y a encore plus de façons de représenter des chaînes de caractères. Lors de la transmission de types entre les différentes langues, il doit s'assurer que les deux côtés d'interpréter le type même ou - si ce n'est pas les types sont correctement mappé. Ce genre de type de cartographie est également connu comme triage.
Des exemples classiques d'interopérabilité entre les différents langages de programmation sont (pour la plupart du monde Windows):
Native COM components
sont?De manière générale, toute décemment de taille de projet web va utiliser environ cinq langages: HTML, CSS, Javascript, une sorte de serveur-côté “getting things done” de la langue (ASP, JSP, scripts CGI avec Perl, PHP, etc.), et une variante de SQL pour la base de données de connectivité.
(Ce qui est, bien sûr, la main en agitant loin l'argument de savoir si ou non le HTML et les CSS compter que les langages de programmation – je suis le “ils sont, mais juste de ne pas Turing-complet langues” camp, mais c'est une toute autre thread.)
Quelques exemples de la façon dont les personnes travaillent ensemble:
Si vous allez les meilleures pratiques de la route, la structure d'une page web en HTML, et les instructions sur la façon de l'afficher sont dans les feuilles de style CSS qui pourrait être dans le même fichier, mais n'ont pas à l'être. Le CSS contient un tas de classes, qui le HTML se réfère, et c'est au navigateur de comprendre comment cliquez sur ensemble.
De prendre tout ce qu'un pas de plus, tous les scripts javascript sur cette page, qui peut modifier le HTML/CSS, qui est présent (changer le contenu des entités HTML, de changer une classe CSS pour une autre, de modifier le comportement de la CSS, et ainsi de suite.) Il le fait via ce qu'on appelle le Modèle d'Objet de Document, qui est essentiellement une langue et d'une plate-forme indépendante de l'API pour manipuler les pages HTML dans un objet à la manière (à ce point, je vais vous reculez lentement et il suffit de fournir un lien vers le pertinentes de l'article de wiki.)
Mais alors, d'où vient tout le HTML /CSS /Javascript viennent? C'est ce que le langage côté serveur ne. Dans la forme la plus simple, les sérères du côté de la langue est un programme qui retourne un géant de la chaîne de caractères contenant une page HTML comme sa sortie. Cela, évidemment, est beaucoup plus complexe: les formulaires HTML et les paramètres de chaîne de requête peut être utilisé comme entrée pour notre serveur côté programme, puis vous avez l'ensemble de l'AJAX chose où le javascript arrive à envoyer des données directement sur le serveur de la langue ainsi. Vous pouvez également obtenir la fantaisie, où la langue du serveur pouvez personnaliser le code HTML, CSS et Javascript qui obtient cracher – essentiellement, vous avez un programme dans un langage de l'écriture d'un programme dans une autre langue.
Le langage côté Serveur de connexion SQL fonctionne de la même façon. Il y a beaucoup de façons de le rendre à la fois plus complexe et plus sûr, mais le plus simple est de votre serveur de langue pour générer dynamiquement une chaîne de caractères avec la commande SQL en elle, la main qu'à la base de données via un connecteur, et obtenir un ensemble de résultats. (C'est un cas où vous vraiment avoir une fonction qui se résume à someValue = base de données.executeThisSQLCommand( Chaîne -). )
Donc, pour résumer, les différentes langues, dans ce cas, soit communiquer par écrire des programmes dans les uns des autres, ou par la remise de données autour de dans de très simple, facile à analyser les formats que tout le monde peut comprendre. (Chaînes de caractères, principalement.)
Plusieurs langues en usage est appelé "l'interopérabilité" ou "interop" pour faire court.
Votre exemple est mauvais. Java peut appeler des fonctions C.
La langue fournit un mécanisme pour l'interopérabilité.
Dans le cas d' .NET, les langues sont compilés dans IL dans le cadre de la CLI. Donc, de tout .NET de la langue peut interop (appel à des méthodes définies par) les modules définis dans toutes les autres .NET de la langue.
Comme un exemple:
Je peux définir une méthode en C#
Et je peux l'appeler à partir de Python (IronPython)
Et obtenir le résultat attendu.
Généralement parlant, certaines langues interop mieux que d'autres, surtout si les auteurs de langue spécifiquement mis interop une caractéristique de la langue.
Plusieurs langues peut interagir avec:
parce que l'entrée et la sortie doit nécessairement être mis en œuvre dans tous les non-jouet
langue)
tandis que l'autre prend en charge l'appel de code natif.
des difficultés avec le pare-feu de l'interférence de cette façon.
le format de stockage, et peut donc être consulté par la plupart des langues
avec la base de données des extensions. Ce sont généralement les
nécessite un programme pour terminer l'opération avant que le programme suivant
peuvent accéder à la base de données. En outre, tous les "communications" sont
généralement écrites sur le disque.
JVM), puis, en général, vous pouvez transmettre les données de l'objet d'une langue
directement à l'autre avec peu d'impédance.
Dans presque tous les cas, vous devez convertir toute communication d'une commune
format avant de pouvoir être échangés (à l'exception des langues sur le
même à l'exécution). C'est pourquoi plusieurs langues sont rarement utilisés dans un
projet.
Je travaille sur un grand projet d'entreprise qui est composé de (au dernier décompte) environ 8 langues. La majorité de la communication est par l'intermédiaire d'une entreprise au niveau du bus de message qui contient des liaisons de plusieurs langues à exploiter et transmettre les données d'avant en arrière. Il est appelé tibco.
Vous pourrait avoir une application où le gros du travail est fait en Java, mais il y a peut être une partie, comme peut-être une des données de l'analyseur ou quelque chose est écrit en Python ou que vous avez. Près de deux applications, vraiment, peut-être l'analyseur est juste un travail sur les fichiers et puis le principal de votre application en Java est de les utiliser pour quelque chose. Si quelqu'un me demandait ce que j'ai utilisé dans ce projet, je dirais "Java et Python."
Il y a beaucoup de nationalités différentes façons dont vous pouvez utiliser différentes langues dans un même projet
Il existe deux catégories principales qui me viennent à l'esprit
Il existe diverses manières de plusieurs langues peuvent être utilisés dans un projet. Quelques exemples:
Cela dépend du type de projet. Si vous voulez vous exercer, vous pouvez mettre en place un projet web, dans .NET, et de modifier la langue sur une page par page. Il ne fonctionne pas comme vous le montrez dans votre pseudo, mais il est en plusieurs langues. Bien sûr, le répertoire de code doit être en une seule langue.
Il ya un couple de façons de code dans les langues peuvent interagir directement. Tant que les données transmises entre le code est dans le bon format, à la de bits et d'octets, alors il n'ya aucune raison pourquoi les différentes langues ne peut pas l'interopérabilité. Cette approche est utilisée dans des fenêtres traditionnelles développement de DLL. Même sur différentes plates-formes, si vous pouvez obtenir le format correct (regardez big/little endian si intéressé), cela fonctionnera aussi longtemps que votre éditeur de liens (pas de compilateur) sait comment joindre le code ensemble.
Au-delà qu'il existe de nombreuses autres façons dont les langues peuvent parler les uns aux autres. Dans l' .Monde Net code est compilé vers le bas pour IL code, qui est le même pour toutes les langues, de cette façon, C#, VB.Net sont tout de même sous le capot et peut appeler/travailler les uns avec les autres de façon transparente.
Mal. Si il n'y a pas de besoin urgent, s'en tenir à une seule langue. Vous êtes l'augmentation de dépendances et de la complexité. Mais si vous disposez déjà d'un code offrant des fonctionnalités intéressantes, il peut être plus facile à coller ensemble plutôt que de le recréer.
Juste pour ajouter à la liste d'exemples, il est assez commun pour optimiser le code Python en C ou C++ ou d'écrire une bibliothèque C pour lier une autre bibliothèque Python.