Polyglot Programmierung: Baut Anwendungen mit mehreren Sprachen eine gute Praxis?

StackOverflow https://stackoverflow.com/questions/141669

  •  02-07-2019
  •  | 
  •  

Frage

Ich erwäge eine Anwendung erstellen, die eine Mischung aus einer dynamischen Sprache ist (Python oder Ruby) und kompilierte Sprache und Hilfe brauchen immer mir davon zu überzeugen, dass dies eine gute Idee ist.

Meine Gedanken sind, dass ich eine dynamische Sprache verwenden kann, eine Menge Code schnell geschrieben zu bekommen, und dann zu einer kompilierten Sprache wie C / C ++ fallen nach unten, um der Leistung kritischen Code zu implementieren.

Ich kann eine Menge Vorteile dieses Ansatzes finden Sie unter:

  1. Höhere Produktivität durch die vorwiegende Codierung in der dynamischen Sprache
  2. Verfügbarkeit von Bibliotheken aus beiden Sprachen

Es gibt aber auch einige Nachteile:

  1. Die Aufrechterhaltung einer Brücke zwischen den beiden Sprachen
  2. Die Abhängigkeit von zwei Sprachen und Sprache / Bibliothek Fehler anstelle eines

Was sind die anderen Vor / Nachteile dieses Ansatzes? Weiß jemand, über alle Ressourcen und / oder Best Practices rund um das?

War es hilfreich?

Lösung

Ich denke, Ihr Ansatz sehr sinnvoll ist. Die Art und Weise der Nachteile zu adressieren ist vor der Zeit, um herauszufinden, wie einfach es ist, die dynamische Sprache mit C oder C ++ vor der Entscheidung, ob oder nicht Schnittstelle, die sie für Ihr Projekt zu verwenden.

Außerdem müssen Sie darüber nachdenken, ob Sie möchten, dass Ihre Anwendung Cross-Plattform sein. Eine dynamische Sprache ist wahrscheinlich viel weniger Plattform abhängig sein, als eine kompilierte ein. Das kann ein Faktor sein bei der Entscheidung, welche Teile der App sollte in C oder C ++ erfolgen.

Andere Tipps

Ich habe gerade wieder lesen Ihre Frage - Ihr Vorschlag C kritischen Code für die Leistung zu verwenden. Jede dynamische Sprache wert sein Salz-Tools können Sie native Code Zugriff effizient. So startet, indem Sie das Ganze in der dynamischen Sprache zu schreiben. Sie können Sie nicht brauchen, C schließlich finden.

Aber wenn Sie das tun, einen Profiler ausbricht, sorgfältig wählen, etwas zu optimieren, und gehen für sie.

Ja, bien sur, mein freund. Es ist un'idea meravigliosa in der Tat. Boa sorte.

Ich scherze natürlich. Ein Web-Entwickler macht, dass jeden Tag, ohne es zu merken: Java, JSP, EL / OGNL, HTML, CSS, Javascript, Ameise, XML, XSLT ...

Ich denke, polyglotte Programmierung ist natürlich, leistungsstarke, effiziente und mehr als sonst cool. Es muss in der richtigen Art und Weise natürlich verwendet werden, um die maximale Leistung von jeder Sprache zu erschließen, und nicht die anderen Menschen in Ihrem Team zu verwirren.

Ja. Viele Programme sind eine Mischung aus einer Hochsprache, wie Python oder Ruby und eine Low-Level-Sprache wie C erhalten Sie die Vorteile der Logik Codierung in einer Garbage Collection OO-Sprache und können immer noch manuell Register in engen inneren Schleifen verwalten .

Sie können feststellen, dass Sie bis zu einem späteren Zeitpunkt jede Leistung kritische Sachen nicht implementieren müssen. Also, ich würde hart gegen den Eingang eines dieser Leistung entscheidend großen Veränderungen kämpfen, bis Sie wirklich sicher sind, was Sie brauchen, es zu tun.

Ansonsten wählen Sie einfach eine Wurzelsprache, Perl und Ruby-Einsatz c, so dass ihre Einarbeitung recht einfach ist. Sie könnten auch Python (jython) oder Rubin (jrunby) auf einer Java VM laufen, die Java als Backend geben würden. Obwohl es vielleicht ein paar anderen Probleme schaffen, wie ich bin nicht vertraut mit der Entwicklung gegen diese Versionen der jeweiligen Sprachen.

nicht alle Performance-Probleme benötigen Sie auf ein niedriges Niveau Sprache allerdings fallen nach unten, so versuchen, es in einem langugae ersten angehen, bevor Sie schnell zu einem anderen springen.

Viel Glück,

Ich bin für das beste Werkzeug für den Job. Im Fall von Software-Engineering bedeutet, dass polyglott. Sie würden nie ein Zimmermann erwarten nur einen Hammer zu verwenden, egal, was er / sie den Bau wurden. Warum sollte es für uns anders sein?

Zorkerman

Ich habe Erfahrung mit sowohl Jython und JRuby ... viel mehr mit JRuby.

Ich muss sagen, dass sie große Plattformen sind, und Sie den großen Vorteil von dynamischen Sprachen erhalten, PLUS die reiche 3. und 1. Party-Bibliothek Unterstützung von Java, PLUS eine sehr plattformunabhängige Basis kompilierte Sprache, PLUS Garbage Collection in beiden Sprachen (es ist wichtige Speicherverwaltung zu verstehen, aber ich bin von dem Lager, dass Sie besser dran sind zu vermeiden, es sei denn Sie es wirklich brauchen, wie wenn Sie Treiber oder Kernel-Ebene Sachen oder Sachen tun, die jedes Quäntchen Leistung benötigen Sie aufbringen können) .

Ich möchte nur eine kurze Anekdote geben. Ich war vor kurzem einen Ruby-Skript zu indizieren eine Solr Instanz bauen, und ich brauchte eine DB2-Datenbank (die Quelle unserer Daten indiziert werden) zuzugreifen. Gerade Rubin kläglich gescheitert ... es hat schrecklich DB2-Unterstützung, die eine vollständige Installation von DB2 Express Edition erfordert ..., die noch nicht wie beworben funktionierte (ich kann nicht die Ruby-Treiber kompilieren, nachdem ich fertig Installation hatte). Die Lösung war einfach zu JRuby und geben Sie mit JDBC von der Seite Ruby mit ein paar einfachen Gläser zu installieren (und viel viel viel kleinere Dateien als die DB2-Installation).

Ich würde auf jeden Fall sehr empfehlen, unter Berücksichtigung JRuby oder Jython statt C als Backend verwenden ... Ich habe, dass Algorithmus und Ressourcen Leistung gefunden in der Regel eine viel viel größeren Einfluss auf die Anwendungsleistung haben als die Sprache, die Sie auswählen, und die Java-Plattform hat so viel zu bieten (und es hat einen langen Weg seit den frühen Tagen kommen, wenn die Menschen es als erheblich prangern wurden langsamer als C / C ++). Sofern Sie nicht sehr schwer rechenintensive Dinge tun, die nicht algorithmisch Refactoring werden kann, werden Sie wahrscheinlich nicht bis in die kompilierte Sprache fallen müssen, unabhängig von Ihrer Wahl.


PS Die Integration mit Java in JRuby ist sehr nahtlos (von der JRuby auf Java Seite sowieso), so eine Brücke Aufrechterhaltung ist kein Thema. Jython Ich denke, das gleiche ist, aber wieder meine Erfahrung mit ihm ist viel weniger.

Es ist erwähnenswert, dass Gambit Scheme und Chicken (und ein paar andere Implementierungen für diese Angelegenheit) in einem interpretierten Modus ausgeführt werden, und können dann bis zu C kompiliert werden

Ich denke, dass dies eine gute Idee ist.

Da die meisten (fast alle?) OSes sind in C oder C ++ geschrieben, jede dynamische oder interpretierte Sprache auf einer gewissen Ebene fällt zurück in eine kompilierte, optimierte Sprache für geringe Sachen.

Einige Leute argumentieren, dass wir Programmierer müssen zu viele Sprachen beherrschen. Sie argumentieren, dass eine Sprache hinzuzufügen, ist eine schlechte Sache.

Der ganze Datenzugriff in SQL, Präsentation in HTML / CSS scheint irreversibel zu sein.

Die XML-Sache ist ein bisschen ermüdend: einige Leute versuchen, alles in XML zu tun, als ob XML magische Kräfte hat, um Software besser

.

Außerdem gibt es eine ganze Menge Redundanz wegen der mehreren Sprachen. Alle der interSprachBindungen bedeutet, dass die Dinge zweimal geschrieben werden, einmal in jeder Sprache.

Es ist durchaus üblich, aber stellen Sie sicher, dass Sie wissen, warum Sie es so, wie du Architecting Sie tun.

Ein Beispiel dafür ist in Spiele-Programmierung. In vielen Spielen wird das leistungskritischen Game-Engine in C geschrieben, während Dinge wie Level-Scripting in Python getan werden, Schema, eine home-grown Sprache oder was auch immer.

Dies bedeutet, dass die Performance-Freaks in einer Sprache arbeiten sie mögen und das gibt ihnen die geringe Kontrolle, die sie benötigen, während die Level-Designer in einer höheren Sprache arbeiten können, wo sie nicht brauchen, um Sorgen über die Speicherverwaltung und so weiter.

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