In welchen Situationen sollten Sprachen gemischt werden?
Ich spreche nicht über die Verwendung von ASP.NET mit C # und HTML oder eine in C geschriebene Anwendung, die über SQL-Abfragen auf eine SQL-Datenbank zugreift. Ich spreche über Dinge wie Mischen von C ++ mit Fortran oder Ada mit Haskell etc. zum Beispiel.
[EDIT]
Zunächst einmal: Danke für all Ihre Antworten.
Als ich diese Frage stellte, dachte ich mir, dass Sie immer lesen "jede Sprache hat ihren besonderen Zweck".
Im Allgemeinen können Sie mit speziellen Bibliotheken fast alles in jeder Sprache erledigen. Aber wenn Sie daran interessiert sind, verschiedene Sprachen zu lernen, warum sollten Sie nicht die Programmiersprache wählen, die Ihrem Zweck am besten entspricht, statt einer Bibliothek, die ein Problem löst, für das Ihre Sprache ursprünglich nicht gedacht war?
Nun, die offensichtlichste (und die gebräuchlichste) Situation wäre, wenn Sie eine höhere Programmiersprache verwenden, um das meiste aus Ihrem Programm zu machen, wobei Sie die Vorteile schneller Entwicklung und Robustheit nutzen, während Sie eine niedrigere Programmiersprache wie C oder even verwenden Montage, um Geschwindigkeit dort zu gewinnen, wo es wichtig ist.
Auch ist es oft notwendig, mit anderer Software in einer anderen Sprache zu kommunizieren. Ein gutes Beispiel hierfür sind APIs, die vom Betriebssystem bereitgestellt werden - sie werden normalerweise mit C geschrieben (obwohl ich mich an einige alte MacOS-Versionen mit Pascal erinnere). Wenn Sie keine systemeigene Bindung für Ihre Sprachcompiler-Infrastruktur haben, müssen Sie einen Schnittstellencode schreiben, um Ihr Programm mit "der anderen Seite" zu "kleben".
Es gibt auch einige domänenspezifische Sprachen, die speziell darauf abgestimmt sind, bestimmte Arten von Berechnungen effizient auszudrücken. In der Regel schreiben Sie nicht Ihr gesamtes Programm, nur einige Teile, in denen es das geeignete Werkzeug ist. Prolog ist ein gutes Beispiel.
Last but not least, haben Sie manchmal haufenweise alten und getesteten Code in einer anderen Sprache zur Hand, von denen Sie profitieren könnten. Anstatt das Rad in einer neuen und besseren Sprache neu zu erfinden, möchten Sie es vielleicht einfach mit Ihrem neuen Programm verbinden. Dies ist wahrscheinlich der üblichste (wenn nicht der einzige) Fall, in dem Sprachen, die für ähnliche Zwecke gedacht sind, zusammengemischt werden (wurde C ++ und Fortran erwähnt?).
Generell haben verschiedene Sprachen unterschiedliche Stärken und Schwächen. Sie sollten versuchen, das geeignete Werkzeug für die jeweilige Aufgabe zu verwenden. Wenn der Nutzen, einige Teile des Programms in einer anderen Sprache auszudrücken, größer ist als die damit verbundenen Probleme, dann ist es das Beste, sich dafür zu entscheiden.
Zum Beispiel verwenden wir in Videospielen verschiedene Sprachen für verschiedene Zwecke:
In meinem Spiel benutze ich auch HTML / Javascript für die GUI.
[BEARBEITEN]
Um Ihre Bearbeitung zu beantworten: Die Sprache, die Sie am besten kennen, ist nicht immer das effizienteste Werkzeug für die Arbeit. Deshalb benutze ich zum Beispiel C ++ für mein selbstgemachtes Spiel, weil ich es am besten kenne (ich könnte viele andere Sprachen verwenden, da die Ziele Win / Mac / Linux sind, keine Konsolen), aber ich benutze Python für alles was mit dem Build-Prozess zu tun hat , Dateimanipulation usw. Ich kenne Python nicht genau, aber es ist leichter, damit schnelle Dateimanipulationen durchzuführen als mit C ++. Ich würde C ++ nicht für Webanwendungen aus offensichtlichen Gründen verwenden.
Am Ende verwenden Sie, was für den Job effizient ist. Das lernst du, indem du unter Einschränkungen in der realen Welt arbeitest, mit Geld, Zeit und Qualität im Hinterkopf.
Ich weiß, dass Sie das in Ihrer Frage irgendwie ausgeschlossen haben, aber verschiedene Sprachen werden für verschiedene Bereiche verwendet.
Momentan arbeite ich an einem Datenvisualisierer, die Daten sind in einer Datenbank, also gibt es natürlich SQL, aber das zählt kaum, weil es klein ist und häufig benötigt wird. Die Daten werden in eine Reihe von Graphen umgewandelt, ich verwende R, was wie MATLAB, aber Open Source ist. Es ist eine einzigartige statistische Sprache mit einigen fortgeschrittenen Zeichenfunktionen.
Ein Datenvisualisierer ist nicht nur ein Grafikgenerator, es muss also möglich sein, diesen Stapel von Bilddateien zu durchsuchen und zu navigieren. Wir haben uns dafür entschieden, html mit eingebettetem Javascript zu verwenden, um eine Offline- "Anwendung" zu erstellen, die einfach verteilt werden kann. Es ist offline in dem Sinne, dass es eigenständig ist, dass HTML sorgfältig generiert wird und die js darin sorgfältig erstellt wird, um dem Benutzer zu ermöglichen, Tausende von Bildern zu durchsuchen, die nach einer Anzahl von Kriterien sortieren oder filtern.
Wie erstellen Sie sorgfältig JavaScript und HTML basierend auf einer Datenbankstruktur, die sich ändert, während der Rest meines Teams Fortschritte macht? Sie werden von einem Perl-Programm (single-pass-Skript) erstellt, das für einige Struktur- und Schlüsselinformationen in die db einliest und dann über 300 Kilobyte html / js ausgibt. Es ist auch nicht ganz trivial HTML, Imagemaps, die sorgfältig mit den R-Plots ausgerichtet sind und einige onclick () javascript erlauben dem Benutzer, tatsächlich mit einer einfachen Bilddarstellung zu interagieren, so fühlt sich das Ganze wie eine echte Daten-Browser / Visualizer-Anwendung.
>Das sind vier Sprachen, fünf wenn Sie SQL zählen, nur um ein einzelnes Endprodukt zu erstellen.
Ich denke nicht, dies in einer einzigen Sprache zu tun, wäre eine gute Wahl, weil wir die Fähigkeiten eines echten Webbrowsers ausnutzen, um uns eine freie GUI und ein Frontend zu geben.
Ein hervorragendes aktuelles Beispiel wäre das Schreiben von Methoden zum Erstellen von XML-Dokumenten in VB.NET mit der Funktion "XML Literals", die in C # fehlt. Da es sich um .NET-Sprachen handelt, gibt es keinen Grund, keinen der beiden anderen zu nennen:
%Vor%Der größte Grund, warum Sie Sprachen miteinander kombinieren möchten, ist, dass eine Sprache in bestimmten Bereichen Vorteile bietet, während eine andere in einem anderen Vorteile hat. Also versuchst du, die Fähigkeiten beider zu nutzen, indem du sie zusammenwirfst. Ein gängiges Beispiel ist die Verwendung von C und ASM, da C abstrakter ist und es einfacher macht, die komplexeren Dinge in einem Programm zu tun. Sie würden jedoch ASM verwenden, um Basislevel mit Hardware und dem Prozessor zu erledigen. Daher sind sie angesichts der Natur von C und seiner Verwendung in eingebetteten Systemen oft gemischt.
Je nachdem, welchem Paradigma eine Sprache unterliegt, hat es seine Vor- und Nachteile. Zum Beispiel könnte man die GUI-Funktionen von C # verwenden, aber die effizienten Funktionen backtracking oder Artificial Intelligence von Prolog (eine Sprache in logical Paradigma), um einige Details zu berechnen, bevor sie angezeigt werden.
Ein vereinfachtes Beispiel
Stellen Sie sich vor, Sie möchten ein Programm schreiben, mit dem ein Benutzer Schach gegen einen Computer spielen kann.
(möglicherweise) würde ich:
1.) Erstellen Sie die Visuals mit Windows GUI Libraries.
2.) Berechnen Sie die möglichen Züge mit Prolog und wählen Sie den besten / am besten geeigneten Zug.
3.) Abrufen der Ergebnisse aus Schritt 2 von Prolog in meinem C # -Code und Rendern der Ergebnisse.
4.) Erlaube das Gameplay und die schnelle Entwicklung von Visuals und UIs in C # und verlasse dich auf den Prolog für die Berechnungen / Backtracking
Dies passiert am häufigsten, wenn Sie bereits Code in zwei oder mehr Sprachen geschrieben haben und Sie bemerken, dass es sinnvoll ist, die Programme zu kombinieren. Neuschreiben ist teuer und braucht Zeit.
In der Finanzwelt müssen Sie Programme oft 50 Jahre am Leben erhalten (oder ersetzen). Mit Technologieaustausch alle 10 Jahre werden neue Verträge (Hypotheken, Lebensversicherung) in der neuesten Sprache / Umgebung erstellt. Die vier älteren kümmern sich nur um die monatlichen Zahlungen und Änderungen an bestehenden Verträgen. Um zu wissen, wie das Unternehmen vorgeht, müssen Sie Daten aus allen fünf Systemen integrieren.
Ich nehme an, die alten am Leben zu halten ist billiger als jedes Mal auf die neueste Technologie zu migrieren. Aus Sicht der Risikovermeidung macht es Sinn.
Web-Anwendungen sollten wahrscheinlich keine gemischte Sprache für den Entwickler sein. Smalltalk funktioniert gut, mit Gemstone for Persistence und Seaside als Web Application Framework. Die verschiedenen Sprachen (Javascript) können im Framework ausgeblendet werden.
Wenn 2 Köpfe besser als einer sind.
Ich habe Spiele gesehen, bei denen Flash in C # eingebettet war - mit der AI und anderem schwerem Code, der von einer C ++ DLL lief.
Wenn er zu
gezwungen wirdSchreiben von neuem Code zum Erweitern eines neuen Systems, das von einem alten Framework unterstützt wird
Zum Beispiel in Spielen (die ziemlich hardcore Anwendungen sind) haben Sie normalerweise eine sehr enge C ++ - Engine, die all das Schweres anhebt und eine Skriptsprache (wie Lua), die zugänglich ist und geeignet ist, diese Sammlung spezieller Fälle zu machen rufen Sie "Spiel" passieren.
Die Leute hier haben den meisten Grund. Ich werde nur dieses haben:
Es gibt auch den Fall von graziöser Degradierung. Zum Beispiel arbeite ich an einem alten Intranet, und wir ändern uns Stück für Stück von einer Sprache in eine andere, so dass wir an dieser Stelle verschiedene Sprachen im selben System haben.
Geräteprogrammierung - Normalerweise möchten Sie die Benutzeroberfläche mit der nativen Benutzeroberflächensprache des Betriebssystems (z. B. Java für Android) programmieren, müssen jedoch die Gerätetreiber mit etwas programmieren, das mehr in den unteren Bereich bringt Ebene (wie C).
Tags und Links programming-languages mixing