Mischt Clojure mit Python eine gute Idee?

8

Ich arbeite an einem großen Projekt, das eine Menge webbasierter und KI-Arbeit beinhaltet. Ich bin sehr zufrieden mit Python, obwohl meine einzige Sorge mit der gleichzeitigen Programmierung und Skalierung dieses Projekts ist, damit es auf Clustern funktioniert. Clojure for AI und Unterstützung für Java-Funktionsaufrufe führen somit zu gleichzeitiger Programmierung.

Ist es eine gute Idee, die gesamte webbasierte API-Arbeit mit Python zu machen und Clojure die meiste Arbeit mit gleichzeitiger KI erledigen zu lassen?

Bearbeiten: Lassen Sie mich die Interaktion im Detail erklären. Python würde die meiste schmutzige Arbeit erledigen (Scraping, Bildverarbeitung, Verbesserung der Datenbank und so weiter.) Clojure würde, wenn möglich, entweder mit der Datenbank umgehen oder die Daten von Python holen. Ich nehme etwas CPython, das mit Python und Clojure verlinkt.

Bearbeiten2: Könnte eine törichte Frage sein, aber da es sich um ein eher langfristiges Projekt handelt, das sich ein wenig entwickeln wird und mehrere Wiederholungen durchlaufen wird, ist Clojure eine Sprache, die hier bleiben soll? Ist es tragbar genug?

    
Hick 11.05.2012, 20:16
quelle

4 Antworten

14

Ich habe in Clojure (auf einer beliebigen Anzahl von Maschinen) und einem Frontend in Ruby on Rails eine peinlich parallele Anwendung für die Zahlenverarbeitung mit einem Backend erstellt. Ich mag RoR nicht besonders, aber das war zu der Zeit ein Null-Budget-Projekt und wir hatten einen Rails-Programmierer zur Hand, der bereit war, kostenlos zu arbeiten.

Der Clojure-Teil bestand (ungefähr) aus einem Controller, Knotenpunkten zum Knacken von Zahlen und einem Server, der eine JSON-über-HTTP-API implementierte, die die Schnittstelle zur Rails-Webanwendung war. Die Clojure-Knoten benutzten RabbitMQ, um miteinander zu sprechen. Da wir klare APIs zwischen verschiedenen Teilen der Anwendung definiert haben, war es einfach, später das Frontend in Clojure neu zu schreiben (weil das besser zu unseren Bedürfnissen passt).

Wenn Sie an einem verteilten Projekt mit einer langen Lebensdauer und kontinuierlichen Entwicklungsanstrengungen arbeiten, könnte es sinnvoll sein, die Anwendung als eine Anzahl separater Module zu konzipieren, die über gut definierte APIs kommunizieren (json, bson, ...). über AMQP, HTTP, ... oder eine Datenbank). Das bedeutet, dass Sie schnell mit einer Sprache beginnen können, mit der Sie vertraut sind, und Teile in einer anderen Sprache zu einem späteren Zeitpunkt neu schreiben können.

    
Gert 11.05.2012, 21:32
quelle
6

Ich sehe kein großes Problem mit der Verwendung von Python für die Web-Apps und Clojure für den gleichzeitigen Daten-Crunching / Back-End-Code. Ich nehme an, Sie würden etwas wie JSON über HTTP für die Kommunikation zwischen den beiden verwenden, was gut funktionieren sollte.

Ich würde persönlich Clojure für beide verwenden (zB mit dem ausgezeichneten Noir als Web-Framework und Korma für den Datenbank-Kram.), aber wenn, wie Sie sagen, Ihre Erfahrung hauptsächlich in Python ist, dann macht es wahrscheinlich Sinn, mit Python aus einer Produktivitätsperspektive (zumindest kurzfristig) zu bleiben. .

Um die Fragen bezüglich der Zukunft von Clojure zu beantworten:

  • Es ist definitiv hier zu bleiben. Es hat eine sehr aktive Community und ist derzeit wahrscheinlich eine der "heißesten" JVM-Sprachen (neben Scala und Groovy). Es scheint sich besonders gut im Bereich Big Data / Analytics zu bewähren
  • Clojure hat einen besonderen Vorteil in Bezug auf die Bibliotheksunterstützung, da es leicht alle Java-Bibliotheken verwenden kann. Dies ist ein großer Vorteil für eine neue Sprache aus einer praktischen Perspektive, da sie sofort das löst, was normalerweise eines der größten Probleme ist, wenn es darum geht, ein neues Sprach-Ökosystem auf den Weg zu bringen.
  • Clojure ist eine neue Sprache, die noch ziemlich viel entwickelt wird. Wenn Sie sich entscheiden, Clojure zu verwenden, sollten Sie sich bewusst sein, dass Sie sich bemühen müssen, auf dem neuesten Stand zu bleiben und Ihren Code mit den neuesten Clojure-Versionen auf dem neuesten Stand zu halten. Ich persönlich habe das nicht als ein Problem empfunden, aber es könnte eine Überraschung für Leute sein, die an "stabileren" Sprachen wie Java gewöhnt sind.
  • Clojure ist sehr portabel - es wird grundsätzlich überall laufen, wo Sie eine einigermaßen moderne JVM bekommen können, die heutzutage fast überall zu finden ist.
mikera 12.05.2012 02:26
quelle
4

Wenn Sie beide Seiten erstellen können, um Daten und Pure (ish) -Funktionen zur Kommunikation zu verwenden, sollte das sehr gut funktionieren. Wenn Sie Ihre Clojure-Funktionen in Web-Services einbinden, die JSON (oder besser Clojure-Formulare) enthalten und retruntieren, sollten Sie sie für Ihr Python-basiertes Frontend zugänglich machen.

Es macht natürlich mehr Spaß, es in Clojure zu schreiben. ;)

Wenn dies ein langfristiges Projekt ist, werden saubere Schnittstellen (wie in Take- und Return-Werten), die Daten austauschen, noch wichtiger, da es Ihnen die Möglichkeit gibt, die Komponenten unabhängig voneinander zu entwickeln.

    
Arthur Ulfeldt 11.05.2012 20:22
quelle
0

In solchen Szenarien möchte ich persönlich in der folgenden Reihenfolge beginnen.

  • Teilen Sie das System in Subsysteme mit "sehr klar" Definition dessen, was jedes System tut, und diese Definition sollte dem Prinzip folgen "eine Sache zu tun und es einfach zu halten". Denken Sie in diesem Stadium nicht an Sprache usw.
  • Wählen Sie die Plattform (nicht die Sprachen), auf der diese Subsysteme ausgeführt werden. Beispiel: JVM, Python VM, NodeJs, CLR (Mono), andere VMs. Versuchen Sie, einige Plattformen auszuwählen oder wenn möglich nur eine, da dies das Leben im Hinblick auf die Komplexität vereinfacht.
  • Wählen Sie die Sprache, um diese Plattformen zu programmieren. Dies ist sehr subjektiv, aber für JVM können Sie mit Clojure oder Jython gehen (falls Sie dynamische Sprachen mögen wie ich).

Soweit es Clojure Zukunft betrifft, ist dies eine Sprache, die von "Gemeinschaft der erstaunlichen Programmierer" und nicht von irgendeinem Unternehmen entwickelt wurde. Ich hoffe, dass das Ihre Zweifel über die "langfristige" Sorge von Clojure aufhebt. Übrigens ist Clojure LISP, also kannst du die Sprache so ändern, wie du es willst und Dinge selbst reparieren, selbst wenn jemand das nicht für dich tut.

    
Ankur 12.05.2012 09:07
quelle

Tags und Links