it-swarm.dev

Wie können zwei verschiedene Programmierungen mit zwei verschiedenen Sprachen interagieren?

Ich weiß nicht, ob das zu weit gefasst ist oder nicht, aber ich bin ein junger Programmierer, der noch am College ist. Es ist mein Juniorjahr. Ich habe das Gefühl, dass ich ein gutes Gespür für verschiedene Sprachen habe und eine ziemlich gute Basis habe. Aber ich stolpere darüber, wie ich zum Beispiel versuche, ein Programm zu erstellen und sage, ich hätte einen Teil in python geschrieben), nur weil es einfach ist und die Arbeit erledigt, aber dieses Programm würde es brauchen Ich bin mir nicht sicher, wie die beiden verschiedenen Programme und Sprachen miteinander interagieren sollen, um ein Gesamtprogramm zu erstellen. Ich denke darüber nach Ich bin mir sicher, dass Sie in eine Datei schreiben können, aber was ist, wenn python und C-Programme beide auf eine Datei zugreifen, würde ich an Sperren denken müssen.

Meistens habe ich dies beim Importieren von Dateien in ein Programm getan, aber in diesem Fall haben sie dieselbe Sprache, so dass es einfach ist, ich verwende nur die Importfunktion, aber wenn zwei Sprachen/Programme interagieren, um eine zusammenhängende Ausgabe zu erstellen, habe ich Probleme .

Ich habe über diese Frage nachgedacht, weil ich darüber nachgedacht habe, einige grundlegende Webanwendungen zu erstellen, nur um zu lernen, aber ich habe keine Ahnung, wie ich eine Javascript-Datei interaktiv mit etwas sagen soll, das ich in python or oder und umgekehrt.

Ich habe das Gefühl, dass mir hier etwas wirklich Leichtes fehlt und ich es einfach nicht verstehe. Es tut mir leid, wenn diese Frage zu weit gefasst ist, aber ich konnte online keine eindeutige Antwort finden. Ich habe versucht, eine OpenSource-Webanwendung zu durchsuchen, konnte aber keine Antwort darauf finden. Entschuldigen Sie mich erneut, wenn die Frage dumm erscheint, dachte ich Dies ist ein guter Ort, um zu fragen, ich liebe es, auf Stackexchange zu lesen.

Vielen Dank für jede Antwort.

27

In verschiedenen Sprachen geschriebener Code kann auf verschiedene Arten interagieren.

Auf der Quellenebene kann für einige Sprachkombinationen eine Kreuzkompilierung von einer Sprache in die andere durchgeführt werden (z. B. enthält Googles GWT einen Java-zu-Javascript-Compiler; der Glasgow Haskell-Compiler kann zu C kompilieren; frühere Versionen von C++ zusammengestellt nach C). Meistens ist dies jedoch nicht wirklich machbar.

Sprachen, die eine virtuelle Plattform gemeinsam nutzen, wie z. B. die JVM- oder die .NET-Laufzeit, können normalerweise über Mechanismen interagieren, die von der Plattform bereitgestellt werden. Beispielsweise können alle JVM-Sprachen auf Java-Bibliotheken) zugreifen und diese für die Kommunikation verwenden Sie können Methoden aufrufen und Klassen verwenden, die in einer anderen JVM-Sprache erstellt wurden.

Viele Programmiersprachen, einschließlich Python, bieten einen Mechanismus für die Schnittstelle zu nativen Bibliotheken, die normalerweise in C geschrieben sind. Mit einem solchen Mechanismus können native Funktionen aus einer anderen, höheren Sprache aufgerufen werden. In populären Bibliotheken sind häufig Bindungen verfügbar. Diese Technik wird normalerweise als "Foreign Function Interface" bezeichnet. Die Python-in-C-Schnittstelle ist CFFI .

Eine andere Möglichkeit besteht darin, zwei vollständig getrennte Programme zu erstellen und sie zur Laufzeit interagieren zu lassen. Es gibt verschiedene Mechanismen, um dies zu erreichen; Am einfachsten geht es über eine Pipe (siehe Python im Modul subprocess): Im Grunde ruft ein Programm das andere auf, sendet Eingaben an seinen Standard und liest das Ergebnis von seinem Standard zurück. Dies macht ein Programm zu einem Unterprozess des anderen; Wenn beide langlebig sein und unabhängig voneinander gestartet werden müssen, können Daten über Named Pipes, (lokale) Netzwerk-Sockets, freigegebene Dateien und (je nach Plattform) andere Mittel hin und her übertragen werden. Welches am besten ist, hängt davon ab.

28
tdammers

Es gibt verschiedene etablierte Möglichkeiten für zwei Programme, miteinander zu kommunizieren. Sie haben bereits eine offensichtliche durch das Teilen von Dateien identifiziert und eine offensichtliche Schwierigkeit damit. Es gibt aber auch andere Möglichkeiten.

Die meisten modernen Betriebssysteme enthalten einen Mechanismus namens Named Pipes , bei dem es sich im Grunde um einen Datenstrom handelt, dessen Eingabe in einem Programm und dessen Ausgabe in einem anderen Programm endet. Wenn Sie Daten von einem Programm an ein anderes Programm senden müssen, das auf demselben Computer ausgeführt wird, kann dies eine gute Methode sein.

Wenn Sie eine API einrichten müssen, mit der ein Programm das andere Programm aufrufen kann, sollten Sie sich mit RPC (Remote Procedure Calls) befassen, das normalerweise auf Betriebssystemebene unterstützt wird.

Wenn Sie zwischen zwei Programmen auf zwei verschiedenen Computern kommunizieren möchten, wird es komplizierter. Dann müssen Sie mit Netzwerken und Protokollen arbeiten. Sie benötigen eines der Programme, um einen Socket öffnen und auf eingehende Nachrichten warten zu können, diese in einen internen Methodenaufruf zu dekodieren, zu verarbeiten und eine Antwort zurückzugeben. Für die Bereitstellung dieser Funktionalität in verschiedenen Sprachen, einschließlich C und Python, stehen zahlreiche Bibliotheken zur Verfügung.

Grundsätzlich hängt es davon ab, welche Methode Sie verwenden sollten. Recherchieren Sie nach verschiedenen Formen von Kommunikation zwischen Prozessen und Netzwerknachrichten, und Sie sollten in der Lage sein, herauszufinden, was Ihren Anforderungen am besten entspricht.

11
Mason Wheeler

Message Passing scheint hier das allgemeine Konzept zu sein, da es verschiedene Beispiele gibt, bei denen verschiedene Sprachen interagieren können, z. Man könnte klassisches ASP mit COM-Komponenten und etwas JavaScript verwenden, um eine Mischung aus 3 verschiedenen Sprachen zu erhalten, die in derselben Anwendung verwendet werden.

In dem Beispiel, das Sie angeben, wären die Sperren nicht etwas, das das Betriebssystem im Dateisystem verarbeiten kann? Jedes Programm weiß nicht über das andere Bescheid.

2
JB King

Die meisten Softwarekomponenten sollten nicht in Anweisungen kommunizieren, sondern Daten senden und empfangen: mit einer Datenbank interagieren, JSON/XML-Anforderungen senden/empfangen usw.

0
vemv

Abhängig von Ihrer Art des Problems kann die Standardverwendung von Pipes durch Shell ausreichend sein (geben Sie Ihre Shell ein):

program1 | program2

Auf diese Weise geht der Ausgang von Programm1 direkt zum Eingang von Programm2. Natürlich funktioniert dies nicht für jedes Problem, aber viele (nicht interaktive) Probleme können mit diesem Ansatz gut gelöst werden.

0
markijbema