Diese Aussage legt nahe, dass statisch typisierte Sprachen nicht ideal für Websites sind:
Ich werde das mit dem Aufbau einer Website vergleichen. Beim Rendern von Webseiten interagieren häufig sehr viele Komponenten auf einer Webseite. Sie haben Schaltflächen hier und kleine Widgets dort und es gibt Dutzende von ihnen auf einer Webseite sowie möglicherweise Dutzende oder Hunderte von Webseiten auf Ihrer Website, die alle dynamisch sind. Bei einem solchen System mit einer wirklich großen Oberfläche ist die Verwendung einer statisch typisierten Sprache eigentlich ziemlich unflexibel. Ich würde es wahrscheinlich als schmerzhaft empfinden, in Scala zu programmieren und eine Webseite damit zu rendern, wenn ich interaktiv Knöpfe drücken möchte und was nicht. Wenn das gesamte System kohärent sein muss, so wie das gesamte System einen Typcheck durchführen muss, um einen Knopf bewegen zu können, kann das meiner Meinung nach wirklich unflexibel sein.
Quelle: http://www.infoq.com/interviews/kallen-scala-twitter
Ist das richtig? Warum oder warum nicht?
quelle
Button
ZeitpunktWebControl
ist, an dem alle benötigten Informationen enthalten sind und alle Steuerelemente davon abgeleitet sind.Antworten:
Ich stimme überhaupt nicht zu. Wenn die Systeme größer werden, sorgen statisch typisierte Sprachen für Robustheit auf Komponentenebene und damit für Flexibilität auf Systemebene.
Auch das vom Autor gegebene Beispiel macht eigentlich keinen Sinn. Es scheint eher so, als wüsste dieser Typ nicht, dass Polymorphismus mit anderen Mitteln als mit dem Tippen von Enten erreicht werden kann.
Es gibt eine Reihe von Leuten, die behaupten, dynamische Sprachen seien überlegen, aber dies beruht in der Regel auf mangelnder Erfahrung mit expressiven Typsystemen, die beispielsweise strukturelle Untertypen, algebraische Datentypen und Funktionen erster Ordnung unterstützen.
quelle
Denken Sie zunächst daran, dass der Autor der obigen Erklärung über die Entwicklung der Website spricht. Er macht sich also Sorgen um die Entwicklung von Präsentationen und ist der Meinung, dass Scala keine gute Wahl wäre ...
Trotzdem habe ich gute Erfahrungen mit der Webentwicklung gemacht. Ich habe mindestens 8 Jahre ausschließlich damit gearbeitet, 5 davon in digitalen Agenturen.
Und ja, nach meiner Erfahrung kann eine statisch typisierte, kompilierte Sprache auf der Präsentationsebene ein großes Hindernis sein. Der Inhalt muss ständig geändert werden, viel häufiger als die geschäftlichen Anforderungen. Und in der Regel muss dies von einem bestimmten Team (den "Front-End" -Entwicklern) durchgeführt werden. Sie wissen normalerweise viel über HTML, JavaScript, Webstandards und CSS, aber nicht viel über serverseitige Sprachen wie Java und C #. Sie gehen auch davon aus, dass jede Art von Änderung an einer Vorlage sofort verfügbar ist. Sie werden nicht zum Kompilieren und Eingeben von Fehlern verwendet. Und sie haben Recht: Statisch typisierte Sprachen eignen sich sehr gut für schwierige, komplexe Anforderungen wie Datenzugriff und Geschäftsregeln, aber nicht so gut für die Schnittstellenentwicklung.
Dies ist in der Tat einer der Hauptvorteile der Verwendung einer speziellen und interpretierten Vorlagensprache wie Velocity . Die einfache Bedienung, die Leistungsfähigkeit und die Flexibilität sind für Entwickler von Präsentationsebenen ausreichend. Und dann steht es den Servern frei, überall eine seriöse, statisch typisierte Sprache zu verwenden ...
Ich stimme jedoch auch zu, dass Scala etwas anders ist. Da zugleich viel weniger ausführlich und viel ausdrucksvoller als Java, ich glaube , es könnte für die Präsentation Entwicklung verwendet werden - so vielleicht könnte es erfolgreich als Template - Sprache verwendet werden. Und wenn es auch zu einem Framework wie Play (das die Website nach jeder Änderung automatisch kompiliert) kombiniert werden könnte, wäre es meiner Meinung nach ein Gewinner. Trotzdem hat sich auch Play für eine Groovy-ähnliche (dynamische) Vorlagensprache entschieden, was kein gutes Zeichen ist.
Fazit: Das Problem mit Scala hängt viel mehr damit zusammen, dass es kompiliert ist. Tatsächlich lässt der Typinferenzmechanismus fast vergessen, dass er auch statisch typisiert ist.
(Und entschuldigen Sie mein Englisch. Lassen Sie mich wissen, wenn etwas nicht klar ist, ich werde versuchen, es zu beheben.)
quelle
Ich denke, der Text (und die meisten Antworten) mischen statisch getippte Sprachen und übermäßig ausführliche Sprachen. Natürlich ist die Überschneidung sehr groß (insbesondere, wenn nur die gängigsten Sprachen berücksichtigt werden). Es gibt jedoch einige interessante Beispiele für nicht-verbose, statisch typisierte Sprachen: Go, Haskell, Scala, Rust…
quelle
Ich ermutige Sie, Bruce Eckels Strong Typing vs. Strong Testing zu lesen . Das Hauptargument ist, dass die Softwarequalität auf das Testen hinausläuft. Sie können auf viele verschiedene Arten testen. Compiler testen einige Dinge zur Kompilierungszeit: Versuchen Sie, eine Zeichenfolge in einer int-Variablen zu speichern, und sie wird Sie wahrscheinlich anstacheln. In dynamischen Sprachen werden viele Tests zur Laufzeit durchgeführt. Letztendlich spielt es keine Rolle, wann der Test stattfindet. Es muss einfach passieren. Wenn Sie nicht in dynamischen Sprachen kompilieren, verlieren Sie die Testzeit zur Laufzeit. Sie testen alles gründlich, oder?
Angesichts dessen ist eine Präferenz für kompilierte Sprachen mit starren Typsystemen gegenüber dynamischen Sprachen genau das - eine Präferenz. Ein bisschen wie Boxer gegen Slips oder Tangas gegen French Knickers. Es gibt keine richtige oder falsche Antwort. Tragen Sie sie mit der richtigen Einstellung und es gibt nur fantastisch.
quelle
Ich stimme dem in den meisten Fällen zu, wenn Flexibilität ein Muss ist, wenn Sie mit Kunden auf einer Web-Plattform arbeiten.
Statisch getippte Sprachen sind robuster und sicherer als dinamisch getippte Sprachen. Wenn Sie jedoch anfangen, Code so anzupassen, dass er nicht so ist, wie er sein soll, und Sie ihn schnell benötigen, sehen die Lösungen komplex und starr aus.
Wenn Sie also die Änderung zum Zusammenführen von Technologien haben, würde ich empfehlen, einen Kern in einer statisch typisierten Sprache zu erstellen (Kern ändert sich nicht viel) und dinamisch für die Benutzerinteraktion zu verwenden.
quelle
Ich denke, der Autor dieses Beitrags hat sich nicht mit Scala selbst befasst. Ich bin damit einverstanden, dass Java und C # Einschränkungen aufweisen und für die Webentwicklung etwas unflexibel sind, aber Scala ist eine statisch typisierte Sprache, die sich stark von der unterscheidet, an die Sie normalerweise denken, wenn Sie dies hören. Scala ermöglicht das Tippen von Enten sowie eine typsichere Version des Affenpatchings (durch implizite Konvertierungen). Das macht das Programmieren von Bibliotheken etwas komplexer, da Sie über Typen nachdenken müssen. Wenn Sie jedoch nur eine Bibliothek wie Lift verwenden, fühlt sich dies wie eine dynamische Sprache an, mit der Ausnahme, dass der Compiler Sie über offensichtliche Fehler informiert, bei denen Sie diese einfach nicht verwenden richtig. Ich persönlich denke, dass sich das Lift-Web-Framework nicht vor Ruby on Rails oder Ähnlichem verstecken muss. Schauen Sie sich die Codebeispiele hier oder hier anund entscheiden Sie selbst. Ich entwickle mich seit einiger Zeit im Aufzug und hatte nie eine Situation, in der ich einen Tippfehler hatte und obwohl "Ah man, wenn das dynamisch wäre, würde es funktionieren" ... denn wenn es dynamisch wäre, hätte es mir das einfach nicht gesagt Es gab einen Fehler, bis er zur Laufzeit abstürzte.
quelle
Persönlich denke ich, dass das, was sie sagen, für jedes System gilt, nicht nur für Websites. Wenn Sie mit Hardware sprechen, müssen Sie statisch tippen, denn alles andere hat die gleichen Nachteile und Vorteile, unabhängig davon, was Sie wirklich tun, und was am besten ist, hängt vom Geschmack und den spezifischen Problemen für jedes Projekt ab.
quelle
Praktisch Schnelle Antwort: Es kommt auf die Größe und Komplexität der Webgröße an. Kleine Website, dynamisches Programm lang., Complex Große Website, statische Progr. lang.
Erweiterte langweilige Antwort: Viele Entwickler bestehen darauf, dass eine Website mit einem dynamischen Programm erstellt wird. langr. Die Wahrheit ist jedoch, dass Web-Entwicklungstools letztendlich dazu neigen, statisch typisierte Sprachen zu verwenden oder zu emulieren.
Ich habe mehrmals mit PHP gearbeitet, und früher oder später mussten wir eine Menge Code hinzufügen, der die Typen der angegebenen Daten überprüft, die in einem statischen typisierten Programm impliziert sind. lang.
Tippte Lagn. hilft auch bei der Verwendung von IDE (s), für die eine umfangreiche Typüberprüfung erforderlich ist.
(gebracht von deinem Nachbarn Progr. & Compiler Designer ;-))
quelle
Ich stimme irgendwie zu. Wenn ich mir den meisten Web-Front-End-C # -Code ansehe, gibt es eine Menge Casting von Zeichenfolgen und Serialisierung von Daten in Zeichenfolgen. Grundsätzlich eignet sich HTTP als Protokoll gut für dynamische Sprachen.
quelle