Frage

Ich hörte einige Leute Programm in mehreren Sprachen in einem Projekt. Ich kann mir nicht vorstellen, wie die Sprachen miteinander in Wechselwirkung treten.

Ich meine, es gibt keine Java-Methode wie

myProgram.callCfunction(parameters);

nie passiert, oder täusche ich mich?

War es hilfreich?

Lösung

mehrere Sprachen in einem Projekt zu haben, ist eigentlich recht häufig, aber die Prinzipien, die hinter sind nicht immer einfach.

Im einfachen Fall, verschiedene Sprachen mit dem gleichen Code kompiliert. Zum Beispiel, C und C ++ Code ist typischerweise in Maschinen Assembler kompiliert oder C # und VB.Net in IL zusammengestellt (die Sprache von .NET-Laufzeit zu verstehen).

Schwieriger wird es, wenn die Sprachen / Compiler eine differnt Art System. Es können viele verschiedene Möglichkeiten, grundlegende Datentypen wie Integer, Float und verdoppelt sein werden intern dargestellt, und es gibt noch mehr Möglichkeiten, Strings darzustellen. Wenn Typen um zwischen den verschiedenen Sprachen geben muss es sicher sein, dass beide Seiten der Art gleich interpretieren oder - wenn nicht - sind die Typen korrekt abgebildet. Diese Art der Typzuordnung ist auch bekannt als Rangier .

Klassische Beispiele für die Interoperabilität zwischen verschiedenen Programmsprachen sind (vor allem aus der Windows-Welt):

  • Die verschiedenen Sprachen verfügbar für .NET platfrom. Dazu gehören C #, VB.Net, J #, IronRuby, F #, XSLT und viele andere weniger populäre Sprachen.
  • Native COM-Komponenten in C ++ geschrieben oder VB können mit einer großen Vielfalt von Sprachen verwendet werden: VBScript, VB, alle .NET-Sprachen, Java
  • Win32-API-Funktionen können von .NET oder VB
  • aufgerufen werden
  • IPC (Inter-Prozess-Kommunikation)
  • Corba , die wohl umfassendste (und komplexeste) Ansatz
  • Web-Services und andere serviceorientierte Architekturen, wahrscheinlich der modernste Ansatz

Andere Tipps

Im allgemeinen kann jedes vernünftige Größe Web-Projekt wird etwa fünf Sprachen verwenden: HTML, CSS, Javascript, irgendeine Art von Server-Seite „Getting Things Done“ Sprache (ASP, JSP, CGI-Skripte mit Perl, PHP, etc.), und eine Variante von SQL für Datenbank-Konnektivität.

(Dies ist natürlich, von Hand winkt das Argument darüber, ob oder nicht HTML und CSS zählen als Programmiersprachen weg - ich bin das „sie sind, aber eben nicht Turing-complete Sprachen“ Lager, aber das ist ein ganz anderer Thread).

Einige Beispiele dafür, wie alle arbeiten zusammen:

Wenn Sie den Best-Practices Weg gehen, die Struktur einer Webseite ist in HTML, und die Anweisungen, wie sie angezeigt werden sind in CSS - die in der gleichen Datei sein könnten, aber nicht haben Sein. Das CSS enthält eine Reihe von Klassen, die die HTML bezieht sich auf, und es liegt an den Browser, um herauszufinden, wie man sie zusammen klicken.

alle nehmen, die ein Schritt weiter, alles Javascript-Skripte auf dieser Seite eine des HTML / CSS verändern kann, die vorhanden ist (ändern Inhalt von HTML-Entitäten, die Swap einer CSS-Klasse für ein anderes, das Verhalten des CSS ändern, und so weiter.) Es tut dies über etwas das Document Object Model genannt, die im wesentlichen eine Sprache und plattformunabhängige API ist auf HTML-Seiten in einem Objekt artig zu manipulieren (an welcher Stelle ich weg langsam wieder werden und biete nur einen Link href="http://en.wikipedia.org/wiki/Document_Object_Model" zum relevanten Wiki-Artikel .)

Aber dann, wo sich alle HTML / CSS / Javascript kommen? Das ist, was die serverseitige Sprache der Fall ist. In der einfachsten Form ist die serer seitige Sprache ein Programm, das einen riesigen String hält eine HTML-Seite als Ausgabe zurück. Dies kann natürlich bekommt viel komplexer: HTML-Formulare und Parameter Query-String als Input für unser Server-Seite-Programm verwendet werden können, und dann haben Sie die ganze AJAX Sache, wo die JavaScript als auch Daten senden direkt an den Server Sprache bekommt. Sie können auch Lust bekommen, wo der Server der Sprache das HTML anpassen kann, CSS und Javascript, das ausspucken wird -. Im Wesentlichen ein Programm in einer Sprache haben ein Programm in einer anderen Sprache zu schreiben

Die Server-Seite Sprache SQL-Verbindung funktioniert sehr ähnlich. Es gibt viele Möglichkeiten, um es sowohl komplexen und sicherer zu machen, aber der einfachste Weg ist, für Ihren Server Sprache dynamisch eine Zeichenfolge mit einem SQL-Befehl in ihm zu bauen, dass die Hand in die Datenbank über eine Art von Stecker und zurück ein Ergebnis gesetzt. (Dies ist ein Fall, wo man wirklich eine Funktion zu tun hat, die läuft darauf hinaus, somevalue = database.executeThisSQLCommand (SQLString).)

So wickeln diese nach oben, verschiedenen Sprachen in diesem Fall entweder kommunizieren, indem sie tatsächlich Programme in ihnen schreiben, oder durch Daten um in sehr einfachen leicht zu analysieren Formaten Gabe, die jeder verstehen kann. (Streicher, hauptsächlich.)

Mehrere Sprachen im Einsatz ist „Interoperabilität“ oder „Interop“ kurz genannt.

Ihr Beispiel ist falsch. Java kann C-Funktionen aufrufen.

Die Sprache stellt einen Mechanismus für die Interoperabilität.

als Teil der CLI

Im Fall von .NET Sprachen werden in IL kompilieren. So kann jede .NET-Sprache (Methoden Aufruf definiert) Interop-Module in jeder anderen .NET-Sprache definiert ist.

Als Beispiel:

Ich kann eine Methode in C # definieren

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

Und ich kann es nennen von Python (Ironpython)

 Hello()

Und bekommt die erwartete Ausgabe.

Im Allgemeinen einige Sprachen Interop besser als andere, vor allem, wenn die Sprache Autoren speziell Interop ein Merkmal der Sprache aus.

Mehrere Sprachen können aufeinander wirken:

  1. Piped Eingabe / Ausgabe (ANY Sprache kann dies tun da Eingangs- und Ausgangs muss notwendigerweise in jedem Nicht-Spielzeug umgesetzt werden Sprache)
  2. Mit Code in einer Sprache zusammenstellen zu einer nativen Bibliothek während die anderen Träger nativen Code aufrufen.
  3. Kommunizieren über eine Loopback-Netzwerkverbindung. Du kannst läuft in Schwierigkeiten mit Firewall Interferenzen auf diese Weise.
  4. Datenbanken. Diese kann man sich als „universal“ Daten Speicherformat und kann daher von den meisten Sprachen zugegriffen werden mit Datenbank-Erweiterungen. diese allgemein erfordert eine Programmoperation vor dem nächsten Programm zu beenden kann auf die Datenbank zugreifen. Darüber hinaus sind alle ‚Kommunikation‘ sind im Allgemeinen auf die Platte geschrieben.
  5. Wenn die Sprachen laufen auf der gleichen Laufzeit beteiligt (das heißt .NET, JVM), dann können Sie in der Regel Objektdaten von einer Sprache übergeben direkt mit dem anderen mit wenig Impedanz.

In fast jedem Fall müssen Sie auf einen gemeinsamen jede Kommunikation konvertieren Format, bevor sie (die Ausnahme Sprachen auf die ausgetauscht werden können gleiche Laufzeit). Aus diesem Grunde mehr Sprachen selten in einen verwendet werden, Projekt.

Ich arbeite an einem großen Enterprise-Projekt, das von (bei der letzten Zählung) umfasste etwa 8 Sprachen. Der Großteil der Kommunikation über ein Unternehmensebene Nachrichtenbus die Bindungen für mehrere Sprachen enthält anzapfen und Daten hin und her übergeben. Es heißt tibco .

Sie können eine App haben, wo der Großteil der Arbeit in Java getan wird, aber es könnte ein Teil davon sein, wie vielleicht ein Daten-Parser oder etwas in Python geschrieben ist oder was Sie haben. Fast zwei separate Anwendungen wirklich, vielleicht der Parser tut nur einige Arbeit auf Dateien und dann Haupt-App in Java verwendet sie für etwas. Wenn jemand mich fragen, was ich in diesem Projekt verwendet würde ich sagen „Java und Python.“

Es gibt viele verschiedene Möglichkeiten, wie Sie differnt Sprachen in einem Projekt verwenden können Es gibt zwei Hauptkategorien, die in den Sinn kommen

  1. Verwenden unterschiedliche Sprachen zusammen eine Anwendung zu erstellen. Zum Beispiel Java über die GUI und mit JNI zu bauen, um C-API zugreifen (so die Beantwortung Ihrer Frage, die Sie C-Funktionen aus Java aufrufen können;))
  2. Verwenden von verschiedenen Sprachen zusammen in dem einem Projekt, aber sie sind nicht Teil der gleichen Anwendung. Zum Beispiel. Ich arbeite derzeit an einem iPhone-App, die eine große Menge an Text hat verwendet. Ich bin derzeit drei Sprachen Python (mit den origanal Quellen des Textes arbeiten), SQL (die Ergebnisse der Python-Anwendung in ein Format, leicht erreichbar vom iphone sqlite3 api zu setzen) und Objectiv C die tatsächliche Anwendung zu erstellen. Auch wenn das Endprodukt nur Objective C sein wird, ich habe zwei andere Sprachen verwendet, um das Endprodukt zu erhalten

Es gibt verschiedene Möglichkeiten, die mehrere Sprachen können in einem Projekt verwendet werden. Einige Beispiele:

  • Sie können eine DLL in, sagen wir, C, schreiben und dann diese Bibliothek verwenden, um von, sagen wir, ein VB-Programm.
  • Sie können ein Server-Programm schreiben in, sagen wir C ++, und haben viele verschiedene Sprachimplementierungen des Kunden.
  • Ein Webprojekt oft benutzt viele Sprachen; zum Beispiel ein Server-Programm, geschrieben in, sagen wir, Java (Programmiersprache), die Daten aus einer Datenbank (eine Abfragesprache), sendet das Ergebnis an den Browser in HTML (eine Markup-Sprache), kann der Benutzer die unter Verwendung von SQL abruft interagieren mit der Verwendung von Javascript (eine Skriptsprache) ...

Es hängt von der Art des Projektes. Wenn Sie experimentieren möchten, können Sie ein Web-Projekt, in .NET einrichten, und die Sprache, die von Seitenbasis auf einer Seite ändern. Es funktioniert nicht, wie Sie in Ihrem Pseudo-Code zeigen, aber es ist mehrere Sprachen. Natürlich muss das eigentliche Code-Verzeichnis eine einzige Sprache sein.

Es gibt ein paar Möglichkeiten, in denen Code in Sprachen direkt interagieren kann. Solange die Daten zwischen dem Code ist, dann ist es an der Bits und Bytes Ebene im richtigen Format übergeben werden kein Grund, warum verschiedene Sprachen nicht Interop. Dieser Ansatz wird in der traditionellen Windows-DLL-Entwicklung verwendet. Auch auf verschiedenen Plattformen, wenn Sie das Format korrekt ist (bei großen / Little-Endian aussehen, wenn interessiert) bekommen es wird solange Ihr Linker (nicht Compiler) weiß, arbeiten, wie Code miteinander zu verbinden.

Darüber hinaus gibt es zahlreiche andere Möglichkeiten, in denen Sprachen miteinander reden können. In der Welt Code .Net kompiliert wird, um IL-Code unten, die die für jede Sprache gleich ist, auf diese Weise C #, sind VB.Net alle gleich unter der Haube und nennen / Arbeit miteinander nahtlos.

Badly. Wenn es keine dringende Notwendigkeit ist, halten Sie sich an einer einzigen Sprache. Sie Abhängigkeiten und die Komplexität zu erhöhen. Aber, wenn Sie vorhandenen Code interessante Funktionalität bereitstellt, kann es einfacher sein, es zusammen zu kleben, als es neu zu erstellen.

Sie einfach auf die Liste der Beispiele hinzuzufügen, es ist ziemlich häufig Python-Code in C oder C ++ oder schreiben Sie eine C-Bibliothek zur Optimierung eines andere Bibliothek zu Python zu binden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top