Ich habe diese Frage gefunden und die Antwort auf StackOverflow akzeptiert . Es hängt mit dem langsamen JSON-Parser in der Standard-Scala-Bibliothek zusammen.
Der Konsens ist sozusagen, dass die eingebaute JSON-Bibliothek langsam ist und mit den Worten von DMC: "Es ist so, und so ist es auch."
Vielleicht bin ich hier nur naiv, aber das klingt nach einem schlechten Ansatz, um die Sprache zu erweitern. Sollten die eingebauten Bibliotheken nicht perfekt sein? Sie müssen nicht alles für alle sein, und ich akzeptiere, dass Scala erweiterbar ist. Aber wenn es eine eingebaute Bibliothek gibt, sollte sie sicherlich solide und so schnell sein, wie es die Sprache zu bieten hat.
Ich reiche eine Beschwerde bei Star Command ein ;-)
Weiß jemand, wo oder wie ein normaler Typ wie ich meine Meinung dazu äußern kann, dh wo wir die Scala-Sprache mitgestalten können?
Aktualisieren:
Diese Frage war in keiner negativen Weise beabsichtigt. Scala, es sind Schöpfer und die Scala-Community ist voll von Güte. Ich war einfach überrascht zu sehen, dass so etwas wie der eingebaute JSON-Parser alles andere als optimal war (gemäß der Frage im angegebenen Link).
Antworten:
In einer idealen Welt ja. Aber perfekt ist der Feind des Guten. Jede echte Kreation ist immer eine Art Kompromiss. Dies kann beispielsweise ein Kompromiss zwischen Leistung und Flexibilität sein. Oder Leistung gegen den Aufwand, die Bibliothek zu schreiben. Wenn es "vorerst gut genug" ist und es kritischere Themen gibt, an denen gearbeitet werden muss, ist es besser, sich auf diese kritischeren Themen zu konzentrieren. Nur auf Geschwindigkeit zu optimieren ist normalerweise eine falsche Wirtschaftlichkeit.
Ein wichtiger Punkt bei Kompromissen zwischen Sprache, Bibliothek und API ist, dass das spätere Ändern von Schnittstellen schwierig ist, da normalerweise alter Code, der auf der Schnittstelle aufgebaut ist, beschädigt wird. Die Implementierung (dh die Geschwindigkeit) kann jedoch später verbessert werden, sodass Sie zunächst darauf verzichten können, wenn Sie sich auf die richtige Benutzeroberfläche konzentrieren möchten. Die Reihenfolge der Wichtigkeit ist:
Ich denke, das Schlüsselwort hier ist "Engpass". Wenn Sie einen realen Anwendungsfall haben, bei dem die Leistung der JSON-Bibliothek der Engpass ist, können Sie das Problem in der Scala-Mailingliste ansprechen. Wenn Sie es selbst verbessern können, gut, aber wenn jemand anderes es verbessern soll, muss es zumindest einen echten Bedarf dafür geben.
quelle
Der mit der Standardbibliothek gelieferte JSON-Parser basiert auf den Parser-Kombinatoren. Parser-Kombinatoren ermöglichen es, Parser zu erstellen, die leicht zu verstehen und zu ändern sind, und dies sehr schnell. Die ganze Grammatik für JSON auf Linien definiert 134-140 hier . Wenn Sie sich Lift JSON ansehen , können Sie nicht einmal eine Gruppe von Zeilen als Darstellung der Grammatik auswählen.
Parser-Kombinatoren - zumindest die Scala-Bibliothek (Haskell hat sie auch) - sind jedoch langsam. Vielleicht würde der in Scala 2.8 eingeführte Packrat-Parser eine bessere Leistung erbringen, aber dieser JSON-Parser ist viel älter, und wenn ich meine Fakten klar habe, wurde er hauptsächlich als Beispiel erstellt.
Sollte Scala nur perfekte Bibliotheken zur Verfügung stellen? Angesichts der eingeschränkten verfügbaren Ressourcen ist die Alternative überhaupt keine JSON-Bibliothek. Heute wäre das in Ordnung - es gibt schließlich viele Alternativen. Zu der Zeit, als JSON zur Bibliothek hinzugefügt wurde, und bevor die weit verbreitete Einführung von JSON es leistungskritisch machte, war es etwas Schönes.
quelle
Wenn die Entwickler von Scala keinen Code veröffentlichen würden, bis er perfekt auf Höchstleistung optimiert ist, wäre Scala wahrscheinlich auf Version 0.1 und nicht auf Version 2.9.
Praktisch alle neuen Sprachen haben anfangs Leistungsprobleme . Denken Sie an Java 1 zurück (wenn Sie Erfahrung damit haben). Dies liegt daran, dass sich die Ersteller anfangs mehr auf die Sprachfunktionen und -oberflächen als auf die Implementierungsdetails konzentrieren. Dies ist auf diese Weise sinnvoll. Niemand kann vorhersagen, wie (und ob) eine Sprache und ihre Klassenbibliotheken in Zukunft verwendet werden (abgesehen von trivialen Fällen wie Zeichenfolgenbibliothek usw.). Es ist daher besser, nur dann zu optimieren, wenn ein dringender Bedarf besteht, als Zeit mit der Optimierung eines Codeteils zu verbringen, der im Leben der Entwickler keinen sichtbaren Unterschied macht.
Darüber hinaus ist Scala insofern besonders, als es auf der JVM aufbaut, sodass alle vorhandenen Java-Bibliotheken direkt von ihr verfügbar sind. Wenn Sie die Leistung der Reinheit der Sprache vorziehen, können Sie jederzeit eine geeignete Java-Klasse / Bibliothek auswählen und verwenden.
quelle
Seine Open-Source-Software. Im Vergleich zu proprietärer Software neigen die Autoren dazu, Fehler offener zu beurteilen. Es gibt auch keinen Anspruch darauf, dass Sie eine andere Möglichkeit haben, die Entwicklung zu beeinflussen, als höfliche Anfragen zu stellen oder die Verbesserungen selbst zu schreiben und den verbesserten Code respektvoll zur Aufnahme in die allgemeine Version einzureichen.
Angesichts der Natur von Scala und der Nische, die es einnimmt (groß angelegte Parallelverarbeitung), haben die Entwickler wahrscheinlich Recht, der internen Leistung von Code, der für eine einzelne Anforderung mehrere tausend Mal ausgeführt werden kann, Vorrang vor einem JSON-Parser einzuräumen, der nur ausgeführt wird einmal pro Anfrage.
quelle
Angesichts der Fülle an schnellen Open-Source-JSON-Parsern für die JVM scheint dies ein perfektes Beispiel dafür zu sein, dass sie hier nicht erfunden wurden . Eine integrierte Funktion, die um Größenordnungen langsamer ist als bereits vorhandene Implementierungen, ist ein Hinweis darauf, dass sich die Macher der Sprache zumindest in Bezug auf diese Funktion nicht allzu sehr um die Verwendung in der realen Welt kümmern.
quelle
Also repariere es. So funktioniert Open Source, mein Mann. Du hast einen Juckreiz, du kratzst daran. Sie wissen, dass Sie Java JSON-Parser in Scala ausführen können, oder?
quelle