Wie kombiniert man Programmiersprachen?

9 Antworten

Vom Beitragsersteller als hilfreich ausgezeichnet

Du kannst sogennante „Bridges“ benutzen, oder lokal die Ergebnisse von einem Programm speichern und von einem anderen aus laden. Ich würds aber nicht empfehlen, wenns nicht wirklich nötig ist.


Hemo20 
Beitragsersteller
 08.07.2024, 15:29

Und wie gehen diese Bridges

0
Glandorf  09.07.2024, 07:25
@Hemo20

Würd ich eher empfehlen auf Youtube nachzuschauen, wirst es dann eher verstehen als wenn ichs erklär

0
Also große Programme haben das ja immer.

Nein, ganz und garnicht.

Wie man das aber grundsätzlich machen kann:

  • Bei gemeinsamer ABI kann man die Dateien mit dem nativen Maschinencode 'einfach' zusammenlinken.
  • Verschiedene Prozesse die mit IPC untereinander Daten tauschen/kommunizieren
  • Alle Sprachen auf ein gemeinsames intermediäres Format übersetzen und am Ende gemeinsam durch den eigentlichen Codegenerator schieben, wobei das wiederum auch ein Bytecode für einen JIT sein kann.

Anders sieht es bei interpretierten Sprachen aus, viele Interpreter sind einbettbar und so könnte man die verschiedenen Interporeter eben in ein gemeinsames Executeable einbetten.

Für Systemsprachen kann es möglich sein, das Kompilat aus verschiedenen Sprachen zusammen zu linken (z. B. kann ich in Java eine C library rufen oder eine rust Methode aus C++).
Dabei muss nur sichergestellt sein, dass die ABI für die dabei verwendeten Funktionen und Datentypen kompatibel ist.

Auch ist es möglich, interpretierte Sprachen in einer anderen zu interpretieren. Bsp. ist der Python-Interpreter in C geschrieben und kann somit auch C code aufrufen, um Python auszuführen; sowie ich fast überall Lua laufen lassen kann. Ähnlich ist es heute auch mit WebAssembly, was z. B. volle Programme in Browsern laufen lassen kann (https://wavacity.com/) oder als Ebene für Plugins dient (https://typst.app/docs/reference/foundations/plugin/).

Grundsätzlich kann man nicht sagen, dass jedes großes Programm mehrere Sprachen kombiniert.

In manchen Fällen macht es allerdings durchaus Sinn.

Wenn du beispielsweise hauptsächlich mit C# entwickelst, aber irgendwelche Low-Level-Operationen ausführen willst, die mit C++ besser umzusetzen sind.

In diesem Fall würde man diesen C++-Code in eine .dll auslagern und im C#-Projekt einbinden.

Das wäre so der direkteste Weg, wenn man so will.

Ansonsten gibt es natürlich noch APIs, die man in sein Programm integrieren kann, über die dann kommuniziert wird.

Für sowas gibt es auch schon Librarys, wie RabbitMQ.

Den Prozess insgesamt nennt man übrigens Interprozesskommunikation.

Woher ich das weiß:eigene Erfahrung – Leidenschaftlicher C# Entwickler und Foren Admin

Hemo20 
Beitragsersteller
 11.07.2024, 13:20

Danke! Vernünftige Antwort

1

Definiere kombiniert.

Bei uns wird alte Sprache abc durch neue Sprache bef (Fantasie namen) abgelöst.

Es laufen jetzt also alte Module in Sprache abc in Kombination mit neuen Modulen in def mit dem Ziel das erst mal alles neue in def programmiert wird und altes nach und nach ersetzt wird.

Je Modul ist aber nur eine Programmiersprache beteiligt.