Was sind die Vorteile von Ceylon gegenüber Java? [geschlossen]

11

Auf der Suche nach den neuesten und leistungsstarken kommenden Programmiersprachen über das Internet bin ich auf Ceylon gestoßen. Ich bin bei ceylon-lang.org vorbeigekommen und es heißt:

Ceylon ist stark von Java beeinflusst. Sie sehen, wir sind Fans von Java, aber wir kennen die Grenzen genau. Ceylon behält die besten Teile von Java bei, verbessert jedoch Dinge, die unserer Erfahrung nach nervig, langweilig, frustrierend, schwer zu verstehen oder fehleranfällig sind.

Was sind die Vorteile von Ceylon gegenüber Java?

Anuj Balan
quelle
1
Hmmmm, ich habe mich auf ihrer Website umgesehen und keine überzeugende Erklärung dafür gefunden, warum ich von Java zu Ceylon wechseln möchte ... fairerweise befinden sie sich noch in der frühen Phase, also möchten sie den Hype vielleicht nicht zu früh auslösen und dann enttäuschen ...
Péter Török
1
Mmm, ich dachte, es wäre eine weitere Sprache eines überbegeisterten Programmierers (nicht, dass daran etwas falsch ist: P), aber ich sehe, dass Gavin King of Hibernates Ruhm im Team liegt, was beruhigend ist. Trotzdem sehe ich nicht, wer Ceylon anderen Sprachen wie Scala, Groovy oder Clojure vorziehen würde.
Andres F.
1
@AndresF. sieht aus wie es ist ein Red Hat-Projekt. Sollte etwas Traktion rechtfertigen, aber wie immer ist es schwer zu sagen, ob dies so lange beibehalten wird, wie der Rest von uns es will. Java hat sich in den letzten 16 Jahren als abwärtskompatibel erwiesen - das ist vorerst schwer zu übertreffen.

Antworten:

27

Ceylon scheint eine nette, lustige Sprache zu sein, aber ich würde behaupten, dass es relativ wenige "Vorteile" gegenüber Java hat.

Ich denke, es hat eine schönere Syntax und einige "modernere" Sprachfunktionen - obwohl dies subjektiv ist und ich argumentieren würde, dass es relativ kleine Faktoren bei der Auswahl einer Programmiersprache sein sollten.

Viel wichtigere Faktoren bei der Auswahl einer Sprache / Plattform für ein ernstes Projekt:

  • Ermöglicht es Ihnen, ein besseres Paradigma für Ihr gegebenes Problem zu entwickeln? (Nein - Ceylon ist eindeutig eine weitere Sprache im überfüllten statisch typisierten Java-ähnlichen OOP-Bereich. Im Gegensatz dazu z. B. Clojure, das auf den funktionalen Sprachraum abzielt, oder Groovy, eine sehr dynamische OOP-JVM-Sprache, die unterschiedliche Nischen anspricht )
  • Hat es ein besseres Bibliotheksökosystem? (keine Chance ... Java ist in dieser Hinsicht unübertroffen. Bestenfalls würden Sie wahrscheinlich nur die Java-Bibliotheken von Ceylon verwenden.)
  • Können Sie erfahrenere Entwickler finden? (Es ist unwahrscheinlich, dass derzeit nur wenige Menschen Ceylon verwenden, und selbst wenn dies der Fall wäre, müsste eine große Lernkurve erklommen werden.)
  • Hat es bessere Werkzeuge? (Nein - Java-Tools sind sehr umfassend und ausgereift.)
  • Macht es Sie produktiver? (umstritten - es hat einige nette produktive Sprachfunktionen, aber in Kombination mit Lernkurve und Werkzeugeffekten könnte es tatsächlich zurückbleiben)
  • Bietet es eine bessere Leistung? (Nein - die JVM ist sehr gut für Java optimiert. Es ist eine schwierige Aufgabe für jede andere JVM-Sprache, sie zu übertreffen. Scala kommt dem nahe, aber das ist nach vielen Jahren der Feinabstimmung ...)
  • Unterstützt es mehr Zielplattformen? (Nein - es ist eine JVM-Sprache, die genau so ist wie Java.)
  • Wird der Code wartbarer sein? (wahrscheinlich nicht - Java hat sich hier bewährt, gerade weil es relativ stabil und ausgereift ist und nicht über viele erweiterte Sprachfunktionen verfügt, die zukünftige Betreuer verwirren könnten.)
  • Gibt es eine große, aktive und hilfreiche Community? (Nein, zumindest nicht im Vergleich zu Java oder den anderen großen JVM-Sprachen wie Scala, Clojure, Groovy usw.)

Insgesamt würde ich die Leute sicherlich ermutigen, mit Ceylon zu experimentieren und Spaß daran aus einer Lernperspektive zu haben.

Derzeit sehe ich jedoch keine überzeugenden Vorteile, die eine große Anzahl von Menschen dazu veranlassen würden, darauf umzusteigen (oder sie vor anderen JVM-Sprachen wie Clojure, Scala, JRuby oder Groovy zu wählen).

mikera
quelle
2
"Unterstützt es mehr Zielplattformen?" JA - Sie können Ceylon in Javascript kompilieren.
Chochos
1
Ich denke auch, dass Ihre Bewertung einiger Punkte nicht wirklich gültig ist, da Ceylon noch nicht einmal fertig ist. Es macht also keinen Sinn, es mit anderen Sprachen zu vergleichen, die es schon seit Jahren gibt.
Chochos
5
@Chochos - Sie können Java auch in JavaScript kompilieren (Google Web Toolkit erledigt dies), sodass es nichts anderes als Java ist. Ich bin damit einverstanden, dass Ceylon eindeutig nicht fertig ist, aber ich denke, dass alle meine Punkte jetzt gültig sind und sich in den nächsten 5 Jahren wahrscheinlich nicht ändern werden (selbst wenn das Ceylon-Team die gesamte aktuelle Roadmap beendet).
Mikera
1
@mikera Chochos ist völlig richtig. Ceylon unterstützt das kompilierte Kompilieren in JS. Es kann auch zu nativem Code kompiliert werden. Ich denke, das ist ein großer Unterschied zu "es gibt irgendwo ein Werkzeug von jemandem, das das gleiche tut, wenn ..."
Gundon
5
@mikera - Das "Gibt es eine große Community" ist natürlich ein Killerargument für jede kommende Sprache. Trotzdem ist eine kleine Community oft reaktionsschneller und kompetenter. (Schauen Sie, was für ein Schrott über Java den ganzen Tag dort drüben bei SO geschrieben ist ...)
Ingo
3

Es hat einige nette Funktionen, die in Java nicht zu finden sind:

  1. Reified Generics
  2. Typ Inferenz
  3. Mixins (obwohl dies in JDK8 kommt)
  4. Union- und Intersection-Typen (was wirklich cool ist und in vielen Sprachen nicht vorkommt)
  5. "Funktionen höherer Ordnung" (obwohl nicht ganz als erstklassige Objekte)
  6. Verschlüsse (auch in JDK8 erhältlich)
MebAlone
quelle
3. Defender-Methoden in JDK8 können einige der Funktionen von Mixins bereitstellen, kommen jedoch weder Mixins noch Merkmalen nahe. 4. Vereinigungs- und Kreuzungstypen sind für mich ein seltsames Konzept. Ich habe Probleme, den Mehrwert zu verstehen. AFAIK spart Ihnen nur Tippaufwand, wenn Sie keine Schnittstelle definieren müssen, die zwei andere Schnittstellen kombiniert. Abgesehen davon bin ich sicher, dass Java in Scala / Kotlin / Ceylon / niemals eine erweiterte Funktion haben wird, was auch immer ein Problem für die binäre Abwärtskompatibilität ist. Das Verlassen von Java wie bei Ceylon hat also eine Rechtfertigung.
OlliP
@OlliP Sie möchten wirklich nicht alle vom Compiler generierten Vereinigungs- und Schnittpunkttypen definieren. Java hat Schnittpunkttypen, jedoch nur als generische Argumente. Es konvertiert Union-Typen in einen gängigen Supertyp, was zu lustigen Compiler-Nachrichten führt ("& capture of?"). Union-Typen werden auch für die Nullfähigkeit verwendet, die sowohl Java null als auch optional ziemlich überlegen ist.
Maaartinus
2

Soweit ich bemerkt habe, besteht einer der größten Unterschiede zwischen Ceylon und anderen von Hobby erstellten JVM-Sprachen darin, dass es von Red Hat / JBoss unterstützt wird. Es wird also ein wirklich schönes Tooling-Set in JBoss Tools / Developer Studio integriert, gute Interaktionen mit JBoss AS / Gatein Portal und der gesamten Midleware / JEE 6 / BRMS. So könnten Sie bei einigen Poing vollwertige Ceylon-Anwendungen in JSF entwickeln, sehr produktive Portlets mit einem PHP "Change and Refresh Cycles" und was nicht.

Wie die meisten JVM-basierten Sprachen sehe ich es nicht als Ersatz für Java für Projekte, die große Codebasen benötigen, sondern für einige kleine bis mittelgroße Projekte, insbesondere einmal, die sehr modular sind (wie CRUD-intensiv, Portlets usw.) ). Ich denke, es wird in der Web-Welt sehr gut ankommen, besonders von JBoss-Fans.

Eduard Korenschi
quelle
1
"Ceylon und andere" Hobby-erstellte "JVM-Sprachen". Also sind Scala und Kotlin Hobby-Sprachen?
OlliP
Ich denke, die Art und Weise, wie die Ceylon-IDE Moduldefinitionen für Sie erstellt, wenn Sie ein Ceylon-Projekt erstellen, ist eine Inspiration für Jigsaw. Die Ceylon-IDE erleichtert dem Benutzer die Modularisierung. Mit OSGi ist es sehr umständlich, da Sie mit Maven-Plugins und verschiedenen Parametern herumspielen müssen. Ich denke, die Jigsaw-Mitarbeiter bei Oracle werden die intelligente benutzerfreundliche Tool-Integration in die Ceylon-IDE zur Kenntnis nehmen und versuchen, etwas Ähnliches für Jigsaw zu produzieren.
OlliP
1

Ich denke, Ceylon ist in vielerlei Hinsicht interessant. Und vielleicht haben sie Recht damit, dass Sie in gewisser Weise von Java abweichen müssen, wenn Sie einige Probleme mit Java hinter sich lassen möchten. Ceylon scheint einige Sprachfunktionen zu haben, und ich hoffe, dies macht den Compiler langsam wie in Scala oder noch schlimmer, da die Build-Zeiten nicht mit der Codegröße skaliert werden können (siehe Feedback zu zwei Jahren Scala-Erfahrung ). Das Tempo des Ceylon-Entwicklerteams ist beeindruckend.

Kotlin ist immer noch 0,6 und gemessen an der Entwicklungsgeschwindigkeit im letzten Jahr würde ich sagen, dass 1,0 ein Jahr entfernt ist. Es hat nicht so viele Sprachfunktionen wie Ceylon (aber diese wichtigen Java fehlen wie Eigenschaften und Erweiterungsmethoden) und scheint eher eine Art Scala ohne die Probleme zu sein. Ich denke, skalierbare Build-Zeiten werden damit kein Problem sein. Aber Kotlin kann nur ein schöneres Java wie Groovy sein. Es kann keinen Ausweg aus der Java-Commodity-Programmierung mit XML-Abhängigkeit, Boilerplate-Code, Byte-Code-Manipulation usw. bieten. Es ist so etwas wie Java und Scala, die richtig gemacht wurden. Ob Kotlin oder Ceylon etwas bewirken können, bleibt abzuwarten. Ich denke, beide Versuche sind die Mühe wert und ich wünsche beiden viel Glück.

OlliP
quelle
-2

Ceylon erstellt während seiner Entwicklung eine Spezifikation, wie alle großen JVM-Sprachen (dh alle oben genannten außer Groovy) ...

Ceylon (http://ceylon-lang.org/documentation/1.0/spec)

Clojure (http://clojure.org/Reference)

Scala (www.scala-lang.org/docu/files/ScalaReference.pdf)

Java (http://docs.oracle.com/javase/specs/jls/se7/html/index.html)

JRuby folgt Rubys Spezifikation, für die bezahlt werden muss (http://www.iso.org/iso/iso_catalogue/catalogue_tc/catalogue_detail.htm?csnumber=59579).

Vorg van Geir
quelle