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?
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.
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:
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.
In solchen Szenarien möchte ich persönlich in der folgenden Reihenfolge beginnen.
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.