Wenn ich in Scala arbeite, gibt es oft eine Phase meiner Entwicklung (insbesondere mit for
Verständnis), in der ich dafür sorgen muss, dass alle Typen richtig funktionieren. Dies ist ein großes Plus für große Projekte, aber ein definitives Negativ für kleine. Ich hatte erwartet, dass ich Typen einfach vergessen und mich darauf konzentrieren könnte, "die Arbeit zu erledigen" in Clojure, wie ich es vage in Perl oder Awk erinnere, aber bisher hat es für mich nicht so geklappt. Ich habe die Erfahrung gemacht, dass ich beim Versuch, meinen Code auszuführen, Ausnahmen bekomme, anstatt die Typen in der Code- / Kompilierungsphase "zum Laufen zu bringen". Dies ist keine Vereinfachung; Das Problem ist nicht verschwunden, sondern nur in einen gefährlicheren / teureren Teil des Entwicklungszyklus verschoben worden.
Die Lisp-ish-Syntax ist sehr einfach. Eine der großen Stärken von Emacs besteht darin, beliebigen Lisp-Code ausführen zu können, indem jederzeit in einem beliebigen Puffer eine spezielle Tastenfolge am schließenden Paren eines Codeblocks gedrückt wird. Die durch einfache Klammern getrennte Natur der Lisp-Syntax macht dies auf eine Weise elegant, die in den meisten anderen Sprachen umständlich wäre (geschweifte Klammern einführen müssen?). Auch die Regelmäßigkeit (function arg, arg...)
und (operator arg, arg...)
das Denken über Funktionen und Operatoren als erstklassige Bürger und das Denken über anonyme Funktionen sind sehr natürlich, so wie es die Infix-Operatoren anderer Sprachen wie Scala nicht tun.
Meine begrenzte Erfahrung mit Scala hindert mich daran zu sagen, dass die Syntax einfacher oder besser lesbar ist. Sicher, es gibt in Clojure eine nicht lispische Syntax, die Makros verwendet, aber ich bin der Meinung, dass diese Makros nur ein kleines Fenster in das imperative Denken in einer Syntax öffnen, die ansonsten sehr funktional ist. Das Auferlegen einer Präferenz für funktionale oder imperative Syntax in der Sprache kann die Dinge vereinfachen. Dafür müsste ich Clojure, Java und Haskell einen Punkt geben.
Meine Sorge um Scala ist die gleiche Sorge, die ich mit C ++ oder Perl hatte (wenn auch in geringerem Maße); Die Syntax der Sprache berücksichtigt verschiedene Denkstile (Haskell und Java). Das Schreiben macht Spaß, kann aber für die Lesbarkeit problematisch sein. Noch während ich das schreibe, erinnere ich mich, dass Clojure domänenspezifische Sprachen unterstützt und frage mich, inwieweit dies meinen Standpunkt untergräbt.
Ihre Frage ist sehr interessant. Letztendlich ist der Vergleich komplex. Nach meinem derzeitigen Kenntnisstand müsste ich jedoch zustimmen, dass die Syntax von Clojure einfacher als die von Scala ist, aber möglicherweise nicht um eine ganze Größenordnung einfacher.