Frage

In den nächsten 3 Jahren muss ich mit der JVM (Projektanforderung) arbeiten und dabei eine ganz bestimmte API eines Drittanbieters verwenden.Sie wollen Java, aber mir wurde Spielraum gegeben, mich von Java zu entfernen.Ich hatte gehofft, wir könnten zum .NET-Framework zurückkehren, damit ich Code in F# entwickeln könnte, da ich total in OCaml verliebt bin.Die .NET-Entwicklung wurde von unserem Kunden abgelehnt.Es ist ein No-Go.

Ich habe mich dem Suchen, Lesen und Stöbern in Programmierblogs/-foren zugewandt, um herauszufinden, welche Sprache mich am meisten ansprechen könnte:Scala oder Clojure.Diese scheinen die größte Community/Fangemeinde zu haben.Da ich Erfahrung mit ML-Sprachen habe, sehe ich viele Leute, die Scala mit ML vergleichen.Allerdings gibt es bei diesem Vergleich einige echte Neinsager.Wenn Scala so nah an ML wäre, würden meine Produktivität und meine Lernkurve von diesem Wechsel profitieren.

Das Internet ist voller Fehlinformationen und ich frage mich, ob ich darunter leide.Ich mag die Syntax von Lisp nicht (tun Sie mir nicht weh!), aber wenn Scala die Fehler hat, die ich lese (schlechte IDE-Unterstützung, im Flux-Unit-Testing-Framework, Leistungsprobleme), frage ich mich, ob Clojure das bessere ist Möglichkeit.Ich möchte von Anfang an produktiv sein, Funktionen als erstklassige Objekte verwenden und den Parallelitätsaufwand minimieren.

Bevor ich also zu viel Zeit im Internet verbringe und nicht arbeite...Ich stecke bei der JVM fest, habe Java satt und frage mich, wohin ich gehen soll?

War es hilfreich?

Lösung

Haben Sie Groovy in Betracht gezogen? Ich glaube nicht, es ganz so funktional wie Scala / Clojure, aber es ist sicherlich eine Menge funktioneller als Java **. Im Allgemeinen kann ich die gleiche Arbeit in Groovy mit etwa 50% des Codes getan es mich in Java nehmen würde.

Das ist, weil Groovy syntaktisch ähnlich wie Java und bietet einen nahtlosen Zugriff auf die JDK-Bibliotheken, aber die Zugabe von vielen Sprachfunktionen (Verschlüsse, Meta-Programmierung, Eigenschaften) und dynamische Typisierung eliminiert fast alle vorformulierten mit Java assoziiert Programmierung.

** Ich meine funktionell im Sinne der funktionalen Programmierung "und nicht‚ordnungsgemäß funktioniert‘

Andere Tipps

Meiner Meinung nach verfügen sowohl Clojure als auch Scala nicht über eine großartige IDE-Unterstützung, falls Ihnen das wirklich wichtig ist.Das heißt, Folgendes kann ich aus meiner Lektüre und meinen Erfahrungen sammeln.

Scalas Profis

  • Schneller als Clojure dank mehr statischem Tippen
  • Näher an ML (Syntax, typgesteuerte Programmierung)
  • Größere Standard-API (Die APIs von Clojure wachsen sehr langsam, weil sie sicherstellen wollen, dass sie die besten Redewendungen finden, bevor sie sie veröffentlichen.Allerdings verfügt Clojure immer noch über halboffizielle ergänzende APIs.
  • Bessere Integration Praktiken Methoden Ausübungen mit dem typischen Java-Toolset (Clojure trifft noch einige Entscheidungen, ist in dieser Hinsicht also noch nicht so fest etabliert)
  • Älter als Clojure (Aber Clojure basiert auf einem sehr alten und bewährten Kern:Lispeln)
  • Die Leute sagen, dass es Chancen hat, den Mainstream zu erreichen, während sie über Clojure nicht dasselbe sagen würden

Clojures Vorteile

  • Unglaublich einfache, schnelle und korrekte Parallelität dank MVCC-basiertem STM Und andere Parallelitätsmechanismen
  • Standardmäßig Unveränderlichkeit hilft, zuerst das Richtige zu tun
  • Stabilere Standard-API
    • Wenn sich Dinge ändern, müssen Sie normalerweise keinen vorhandenen Code neu schreiben
    • (Scalas Sammlungen werden für 2.8 erneut überarbeitet)
    • (Ich habe auch irgendwo gelesen, dass es allgemein bekannt ist, dass die Actors-Implementierung von Scala überdacht und neu geschrieben werden muss.)
  • Leichter zu erlernen (kleine Sprache, ein (sehr sauberes) Lisp)
  • Eine Gelegenheit für Sie, sich weiterzuentwickeln, indem Sie etwas Neues lernen
  • Die Leistung von Clojure wird mit der Zeit nur besser;Es gibt noch Raum für nette Optimierungen im Compiler
  • Die Bindung von Scala an Java wirkt einschränkender als die von Clojure (Interaktionen zwischen den statischen Typsystemen von Scala und Java).Das Gleiche könnte man manchmal auch über Clojure sagen (die Unterstützung von Object-Orientation passt nicht 1:1, aber die Unterstützung dafür wird bald besser werden)
  • Rich Hickey hat die Gabe, Entscheidungen zu treffen, die Clojure in die Lage versetzen, über technisch führende Funktionen zu verfügen, die in den folgenden Jahrzehnten von anderen Sprachen übernommen werden.Und er hat auch eine Gabe dafür sie zu erklären.Verwenden Sie sie also heute in Clojure oder warten Sie, bis Sie sie in einigen Jahren in einer anderen Sprache verwenden.:) :)

Über verteilte Parallelität

Wenn Ihre Parallelitätsanforderungen verteilt sind, bietet Clojure noch nichts dafür, es sei denn, Sie führen es auf Terracotta oder etwas Ähnlichem aus. In diesem Fall können Sie alle Parallelitätsfunktionen nutzen.Wenn Sie dies tun, erhalten Sie meiner Meinung nach ein besseres verteiltes Parallelitätserlebnis als mit Scalas Actors.

Abschluss

Meiner Meinung nach versucht Scala alles und schafft das meiste davon.Clojure versucht nicht dasselbe, aber worauf es sich konzentriert, ist mehr als genug und gelingt so gut, dass die meisten Leute, die Clojure wirklich kennen, nicht zu etwas anderem zurückkehren möchten. Offenlegung:Meine persönliche Vorliebe gilt natürlich Clojure.Ich hoffe, dass ich mit dem, was ich geschrieben habe, objektiv sein konnte.

Ich werde die Punkte adressieren Sie Scala erhöht.

  • IDE-Unterstützung :

    Scala hat nicht die gleiche Ebene oder IDE-Unterstützung Java hat - oder, was das betrifft, dass F # mit VS10 haben sollte.

    Das heißt, es ist eines der besten hat (vielleicht sogar die am besten?) IDE unterstützt auf JVM, außerhalb Java. Gerade jetzt ist NetBeans gut genug, und die Menschen haben immer wieder gesagt IDEA ist immer noch besser (Hörensagen). Die Eclipse-Plugin ist jedoch instabil.

    Aber Sie erwähnte einen 3-Jahre-Bereich und die IDE-Unterstützung für Scala sollte erheblich verbessert werden, wenn Scala 2.8 ist out, da es einige Compiler-Unterstützung für IDEs bieten. Es gibt kein Release-Datum festgelegt, aber es sieht innerhalb der nächsten sechs Monate, vielleicht drei. Und die Eclipse-Plugin aktualisiert wird direkt mit.

  • In Fluss Unit Testing Framework :

    Ja, wenn Sie bedeuten, dass es pulsiert, weiterentwickelt und gut unterstützt, statt stagniert und verlassen. ScalaTest, Specs und Scalacheck sind von höchster Qualität Gerüste, untereinander kompatibel und kompatibel mit anderem Java-Frameworks und Bibliotheken, wie JUnit und JMock.

    Das Test-Frameworks, in der Tat ist fast noch ein Kind Poster von dem, was möglich ist, mit Scala.

    EDIT: Scala Basisgerät Testunterstützung in seiner Standardbibliothek hat (scala.testing.SUnit). Angesichts der Tatsache, dass viele überlegen, aktiv unterstützten und freie Alternativen erschienen sind, hat sich diese als veraltet und wird wahrscheinlich nicht mit Scala 2.8 Teil der Bibliothek versandt werden.

  • Leistungsprobleme :

    Ich bin nicht bewusst überhaupt, abgesehen von der Tatsache, dass Sie lausig Code schreiben können, wie bei jeder anderen Sprache. Menschen nicht zu funktionaler Programmierung verwendet werden tun oft Dinge, die nicht effizient, wie nicht mit Endrekursion ist, oder Listen verketten und der Paradigmenwechsel, dass Scala bringen ans Licht, dass ermöglicht.

    Auf jeden Fall können Sie Scala Code so schnell wie Java-Code (noch schneller mit einigen kommenden Features) schreiben. Und Sie können Scala Code mit funktionellen Eigenschaften schreiben fast so schnell wie Java-Code.

Ganz ehrlich, einen anderen Job bekommen.

Wenn Sie die nächsten drei Jahre zu verbringen, sind ein ungutes Gefühl auf, was Sie tun, sollten Sie überlegen, für attraktivere Alternativen suchen.

Auch wenn Sie eine Sprache, die Sie bekommen verwalten, wenn Sie Teil eines Teams sind (was ich denke, Sie sind), um den Rest des Teams diese Sprache nicht dabei. Wenn der Rest von ihnen Code in Java und Sie in „ die Lücke ausfüllen “ Programmiersprache, dann können Probleme auftreten.

Es ist nicht so schlimm.

Sprechen Sie mit Ihrem Chef, ließ ihn wissen, wie fühlen Sie sich. Starten der Suche nach Alternativen und haben eine schöne und professionelle „leave“.

Es gibt keinen Grund, warum Sie nicht noch eine gute Beziehung zu Ihrem aktuellen Chef haben. Wenn schließlich haben sie ein neues Projekt für .net, Sie kommen wieder kann. Sprechen Sie, dass etwa auch mit ihnen. Lassen Sie Ihre Türen öffnen.

Es ist nicht wirklich ein Nullsummenspiel, lernen sie alle!
PS: Ich stimme für Clojure , finde ich es am meisten Spaß!

Sie sollten sich glücklich schätzen, dass Sie die JVM verwenden können, weil die JVM immer beliebter für alternative Programmiersprachen als Java werden.

Neben Java gibt es Groovy , Scala , Clojure (a Lisp Dialekt auf der JVM), JRuby (Rubin auf der JVM), Jython (Python auf der JVM), Jaskell (Haskell auf die JVM), Fan (läuft auf der JVM als auch die .NET CLR) und vieles mehr, und es gibt auch ein OCaml-Java , OCaml, die auf der JVM ausgeführt wird.

Es gibt also viel Auswahl in Programmiersprachen auf der JVM, aus rein funktional zu einfachen Skripting und anvanced OO-Sprachen.

Werkzeugunterstützung für Scala und Clojure kann unreif sein, aber es wird immer besser.

Da Sie F # mögen, dann ist Scala höchstwahrscheinlich die beste Wahl. Ich sage es ausprobieren und Ihre eigene Meinung bilden - Sie können feststellen, dass die Dinge, die Menschen über Haar in der Suppe sind Dinge, die Sie spielen keine Rolle, oder Dinge, die Sie arbeiten, um kann

.

Vergessen JRuby nicht, und beachten Sie, dass eine IDE für Nicht-Java

ist optional

Ich glaube, Du hast tolle Situation. Wie viele Menschen die Erlaubnis erhalten, die Umsetzung Sprache zu wählen? Mit allem, was für die JVM Ihrer Umgebung gewählt haben ist nicht viel von einer Einschränkung.

  • Sie werden nicht brauchen große IDE-Unterstützung in den weniger ausführlich Sprachen
  • In einer Sprache so mächtig wie Rubin ohne Typdeklarationen, Sie keine IDE bei allen
  • brauchen
  • Scala wurde speziell zur Heilung des ausführlichen-java-Blues
  • entwickelt
  • sich glücklich schätzen, dass Sie drei Jahren Arbeit haben aufgereiht: -)
  • Clojure könnte Spaß machen und bietet funktionale Parallelität sichere Designmuster

Noop? http://code.google.com/p/noop/ (experimentell though)

In Bezug auf die IDE-Unterstützung und andere Zweifel die Sie haben, ist Clojure nicht besser als Scala. Und für eine Person mit ML / F # Hintergrund (oder allgemein in streng, dass getippt statisch FP Sprachen), Sie werden auf jeden Fall zu Scala viel näher das finden, was Sie gewohnt sind.

Wenn Sie ML vielleicht gefallen Sie CAL das ist mehr oder weniger Haskell 98 für die JVM.

Es ist von hohen Qualität und sehr stabil und hat auf Eclipse gute IDE-Unterstützung, aber leider nicht mehr aktiv weiterentwickelt.

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