it-swarm.com.de

Wie interagieren mehrere Sprachen in einem Projekt?

Ich habe gehört, dass einige Leute in einem Projekt in mehreren Sprachen programmieren. Ich kann mir nicht vorstellen, wie die Sprachen miteinander interagieren.

Ich meine, es gibt keine Java Methode wie

myProgram.callCfunction(parameters);

passiert nie oder irre ich mich

58
n00ki3

Mehrere Sprachen in einem Projekt zu haben, ist eigentlich weit verbreitet, die Prinzipien dahinter sind jedoch nicht immer einfach.

Im einfachen Fall werden verschiedene Sprachen zum gleichen Code kompiliert. Beispielsweise wird C- und C++ - Code normalerweise in Machine Assembler oder C # kompiliert, und VB.Net wird in IL kompiliert (die Sprache, die von der .NET-Laufzeitumgebung verstanden wird).

Schwieriger wird es, wenn die Sprachen/Compiler ein anderes Typensystem verwenden. Es gibt viele verschiedene Möglichkeiten, grundlegende Datentypen wie Integer, Float und Doubles werden intern dargestellt, und es gibt noch mehr Möglichkeiten, Zeichenfolgen darzustellen. Wenn Sie Typen zwischen den verschiedenen Sprachen austauschen, müssen Sie sicherstellen, dass beide Seiten den Typ gleich interpretieren. Andernfalls werden die Typen korrekt zugeordnet. Diese Art der Typzuordnung wird auch als Marshalling bezeichnet.

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

  • Die verschiedenen Sprachen, die für die .NET-Plattform verfügbar sind. Dies beinhaltet C #, VB.Net, J #, IronRuby, F #, XSLT und viele andere weniger beliebte Sprachen.
  • In C++ oder VB geschriebene native COM-Komponenten können mit einer Vielzahl von Sprachen verwendet werden: VBScript, VB, alle .NET-Sprachen, Java
  • Win32-API-Funktionen können von .NET oder VB aufgerufen werden
  • IPC (Interprozesskommunikation)
  • Corba , wahrscheinlich der umfassendste (und komplexeste) Ansatz
  • Webservices und andere serviceorientierte Architekturen, wahrscheinlich der modernste Ansatz
26
Dirk Vollmar

Im Allgemeinen werden in einem Webprojekt mit angemessener Größe etwa fünf Sprachen verwendet: HTML, CSS, Javascript, eine serverseitige Sprache (ASP, JSP, CGI-Skripte mit Perl, PHP usw.) und eine Variante von SQL für die Datenbankkonnektivität.

(Dies ist natürlich eine Handbewegung, die den Streit darüber beseitigt, ob HTML und CSS als Programmiersprachen gelten oder nicht. Ich bin das "Sie sind, aber nicht Turing-vollständige Sprachen" -Camp, aber das ist ein ganz anderer Thread. )

Einige Beispiele, wie all diese zusammenarbeiten:

Wenn Sie den Weg der Best Practices beschreiten, ist die Struktur einer Webseite in HTML und die Anweisungen zur Anzeige in CSS - möglicherweise in derselben Datei, müssen es aber nicht. Das CSS enthält eine Reihe von Klassen, auf die sich der HTML-Code bezieht, und es ist Sache des Browsers, herauszufinden, wie man sie miteinander verbindet.

Wenn Sie noch einen Schritt weiter gehen, können alle JavaScript-Skripte auf dieser Seite alle vorhandenen HTML/CSS-Elemente ändern (Inhalte von HTML-Entitäten ändern, eine CSS-Klasse gegen eine andere austauschen, das Verhalten des CSS ändern usw.). ) Dies geschieht über das Dokumentobjektmodell, das im Wesentlichen eine sprach- und plattformunabhängige API ist, mit der HTML-Seiten objektähnlich bearbeitet werden können. relevanter Wiki-Artikel .)

Aber woher kommt dann all das HTML/CSS/Javascript? Das macht die serverseitige Sprache. In der einfachsten Form ist die serer-seitige Sprache ein Programm, das einen riesigen String mit einer HTML-Seite als Ausgabe zurückgibt. Dies kann natürlich viel komplexer werden: HTML-Formulare und Parameter für Abfragezeichenfolgen können als Eingabe für unser serverseitiges Programm verwendet werden, und dann haben Sie das Ganze, AJAX===================================================== Sie können auch festlegen, wo die Serversprache das HTML, CSS und Javascript anpassen kann, das ausgespuckt wird - im Wesentlichen haben Sie ein Programm in einer Sprache, das ein Programm in einer anderen Sprache schreibt.

Die serverseitige Verbindung von Sprache zu SQL funktioniert ähnlich. Es gibt viele Möglichkeiten, es sowohl komplexer als auch sicherer zu machen. Die einfachste Möglichkeit besteht jedoch darin, dass Ihre Serversprache dynamisch einen String mit einem darin enthaltenen SQL-Befehl erstellt, diesen über eine Art Connector an die Datenbank übergibt und zurückgibt eine Ergebnismenge. (Dies ist ein Fall, in dem Sie wirklich eine Funktion haben, die auf someValue = database.executeThisSQLCommand (SQLString) hinausläuft.)

Um dies zusammenzufassen, kommunizieren verschiedene Sprachen in diesem Fall entweder, indem sie Programme ineinander schreiben, oder indem sie Daten in sehr einfachen, leicht zu analysierenden Formaten weitergeben, die jeder verstehen kann. (Hauptsächlich Streicher.)

14
Electrons_Ahoy

Mehrere verwendete Sprachen werden als "Interoperabilität" oder kurz "Interop" bezeichnet.

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

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

Bei .NET werden Sprachen als Teil der CLI in IL kompiliert. Somit kann jede .NET-Sprache Module, die in einer anderen .NET-Sprache definiert sind, interoppen (Methoden aufrufen, die von diesen definiert werden).

Als Beispiel:

Ich kann eine Methode in C # definieren

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

Und ich kann es von Python (IronPython) aufrufen

 Hello()

Und die erwartete Ausgabe erhalten.

Im Allgemeinen interagieren einige Sprachen besser als andere, insbesondere wenn die Sprachautoren ein spezifisches Interop für ein Merkmal der Sprache erstellt haben.

8
Alan

Mehrere Sprachen können interagieren mit:

  1. Piped Input/Output (JEDE Sprache kann dies tun, da Input und Output notwendigerweise in jeder Nicht-Spielzeug-Sprache implementiert sein müssen.)
  2. Wenn Code in einer Sprache in eine native Bibliothek kompiliert wird, unterstützt die andere das Aufrufen von nativem Code.
  3. Kommunikation über eine Loopback-Netzwerkverbindung. Auf diese Weise können Sie auf Schwierigkeiten mit Firewall-Interferenzen stoßen.
  4. Datenbanken. Diese können als "universelles" Datenspeicherformat angesehen werden und können daher von den meisten Sprachen mit Datenbankerweiterungen verwendet werden. Dies erfordert im Allgemeinen, dass ein Programm den Vorgang beendet, bevor das nächste Programm auf die Datenbank zugreifen kann. Darüber hinaus werden alle "Kommunikationen" im Allgemeinen auf die Festplatte geschrieben.
  5. Wenn die beteiligten Sprachen zur gleichen Laufzeit ausgeführt werden (z. B. .NET, JVM), können Sie Objektdaten in der Regel mit geringer Impedanz direkt von einer Sprache zur anderen übertragen.

In fast allen Fällen muss eine Kommunikation in ein gemeinsames Format konvertiert werden, bevor sie ausgetauscht werden kann (Ausnahme: Sprachen zur gleichen Laufzeit). Aus diesem Grund werden in einem Projekt selten mehrere Sprachen verwendet.

5
shsmurfy

Ich arbeite an einem großen Unternehmensprojekt, das (nach der letzten Zählung) aus ungefähr 8 Sprachen besteht. Der Großteil der Kommunikation erfolgt über einen Nachrichtenbus auf Unternehmensebene, der Bindungen für mehrere Sprachen enthält, um Daten abzugreifen und hin und her zu übertragen. Es heißt tibco .

2
bedwyr

Sie könnten eine App haben, in der der Großteil der Arbeit in Java erledigt wird, aber es könnte einen Teil davon geben, wie etwa einen Datenparser oder etwas, das in Python oder was haben Sie?) Geschrieben ist. Eigentlich fast zwei verschiedene Apps, vielleicht bearbeitet der Parser nur ein paar Dateien, und dann verwendet Ihre Haupt-App in Java) sie für etwas. Wenn mich jemand fragen würde, was ich in diesem Projekt verwendet habe Ich würde "Java und Python" sagen.

1
Carter

Es gibt viele verschiedene Möglichkeiten, verschiedene Sprachen in einem Projekt zu verwenden. Es gibt zwei Hauptkategorien, die in den Sinn kommen

  1. Verschiedene Sprachen zusammen verwenden, um eine Anwendung zu erstellen. Zum Beispiel mit Java zum Erstellen der GUI und mit JNI für den Zugriff auf die C-API. Wenn Sie also Ihre Frage beantworten, können Sie C-Funktionen von Java;) aus aufrufen.)
  2. Verwenden verschiedener Sprachen in einem Projekt, die jedoch nicht Teil derselben Anwendung sind. Beispielsweise. Ich arbeite derzeit an einer iPhone-App, die viel Text verwendet. Ich verwende derzeit drei Sprachen Python (um mit den Originalquellen des Textes zu arbeiten), SQL (um die Ergebnisse der python App in ein Format zu bringen) leicht zugänglich über das iphone sqlite3 (api) und Objectiv C. Obwohl das Endprodukt nur Objectiv C ist, habe ich zwei andere Sprachen verwendet, um zum Endprodukt zu gelangen
1
hhafez

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

  • Sie können eine DLL in C schreiben und diese Bibliothek dann beispielsweise aus einem VB - Programm verwenden.
  • Sie könnten ein Serverprogramm in C++ schreiben und viele verschiedene Sprachimplementierungen des Clients haben.
  • Ein Webprojekt verwendet oft viele Sprachen. Beispielsweise sendet ein Serverprogramm, das beispielsweise in Java (eine Programmiersprache) geschrieben ist und mit SQL (eine Abfragesprache) Daten aus einer Datenbank abruft, das Ergebnis in HTML an den Browser ( eine Auszeichnungssprache), mit der der Benutzer über Javascript (eine Skriptsprache) interagieren kann ...
1
Kieron

Nur um die Liste der Beispiele zu erweitern, ist es üblich, Python in C oder C++ zu optimieren oder eine C-Bibliothek zu schreiben, um eine andere Bibliothek an Python zu binden.

0
Jason Baker

Das hängt von der Art des Projekts ab. Wenn Sie experimentieren möchten, können Sie ein Webprojekt in .NET einrichten und die Sprache seitenweise ändern. Es funktioniert nicht so, wie Sie es in Ihrem Pseudocode zeigen, aber es sind mehrere Sprachen. Natürlich muss das eigentliche Codeverzeichnis eine einzige Sprache sein.

0

Es gibt verschiedene Möglichkeiten, wie Code in Sprachen direkt interagieren kann. Solange die Daten, die zwischen dem Code übertragen werden, das richtige Format auf Bit- und Byte-Ebene haben, gibt es keinen Grund, warum verschiedene Sprachen nicht interoperieren können. Dieser Ansatz wird in der traditionellen Windows DLL) -Entwicklung verwendet. Auch auf verschiedenen Plattformen funktioniert das Format so lange wie der Linker ( kein Compiler) kann Code zusammenfügen.

Darüber hinaus gibt es zahlreiche andere Möglichkeiten, wie Sprachen miteinander sprechen können. In der .Net-Welt wird Code zu IL-Code kompiliert, der für jede Sprache gleich ist. Auf diese Weise sind C #, VB.Net unter der Haube alle gleich und können nahtlos miteinander telefonieren/arbeiten.

0
MrTelly

Schlecht. Wenn es keinen dringenden Bedarf gibt, bleiben Sie bei einer einzigen Sprache. Sie erhöhen Abhängigkeiten und Komplexität. Wenn Sie jedoch vorhandenen Code haben, der interessante Funktionen bietet, kann es einfacher sein, ihn zusammenzufügen, als ihn neu zu erstellen.

0