Dynamische oder statisch getippte Sprachen für Websites [geschlossen]


13

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?


6
Klingt für mich so, als hätten sie keine Sprache / kein Paket mit einer richtigen Objekthierarchie in Betracht gezogen. Es muss nicht überprüft werden, ob das Steuerelement, das Sie verschieben, ein ButtonZeitpunkt WebControlist, an dem alle benötigten Informationen enthalten sind und alle Steuerelemente davon abgeleitet sind.
Matthew Read

5
Yup @Matthew - klingt wie jemand, der Polymorphismus
Nicole

8
Auch - Twitter mag populär sein, aber es liegt nicht daran, dass ihre Website ein Meisterwerk der Technik ist.
Nicole

Antworten:


39

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.


1
Wie fallen Funktionen erster Ordnung in dieselbe Kategorie wie strukturelle Untertypen und algebraische Datentypen? Sie lassen es so klingen, als hätten dynamische Sprachen keine Funktionen erster Ordnung, was eindeutig nicht zutrifft (Schema, Common Lisp, Erlang, Smalltalk, ...).
Frank Shearar

21
+1 für "Es sieht eher so aus, als ob dieser Typ nicht weiß, dass Polymorphismus mit anderen Mitteln als dem Tippen von Enten erreicht werden kann."
Nicole

1
@Frank Shearer: Was ich meine ist, dass sie mit der gleichen Sicherheit wie jeder andere Wert unterstützt werden. Es gibt eine Reihe streng typisierter Sprachen, die Funktionswerte unterstützen, jedoch nicht zwischen Signaturen unterscheiden.
back2dos

1
Ich stimme auch nicht zu, weshalb ich dies als Antwort wähle.
Bradford


8

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.)


1
Ich würde dem zustimmen - schauen Sie sich einfach das JSP / STRUTS-Durcheinander an, als sie versuchten, Java zu einer Web-Sprache zu machen!
James Anderson

8

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…


2
Definieren Sie "übermäßig". Da Programme immer komplexer werden und ihre Lebensdauer und Wartungszyklen zunehmen, steigt die Wahrscheinlichkeit, dass ein anderer Benutzer als der ursprüngliche Autor ein Debugging oder eine Änderung eines bestimmten Codeteils vornehmen muss. Wenn Sie sich in einer solchen Situation befinden, sind Sie in der Regel unter Druck, und je mehr Informationen Ihnen sofort zur Verfügung stehen, mit welchen Daten Sie genau zu tun haben und was sie können, desto besser. Ich habe das Delphi anderer Leute und das JavaScript anderer Leute getestet, und das Delphi ist aufgrund der Ausführlichkeit und der Typinformationen um
Mason Wheeler

1
Nur eine Randnotiz: So etwas wie TypeScript (JavaScript mit statischen Typinformationen) ist möglicherweise eine einfache Möglichkeit, die Theorie des OP zu testen. Mein kurzer Einblick in diese Methode war sehr schön - einmal, als ich JavaScript in TypeScript konvertierte, stellte ich fest, dass es keine Möglichkeit gab, eine bestimmte Methode aufzurufen, ohne dass ein Fehler auftrat .
Katana314

5

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.


1
"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." viele Tests zu schreiben, die die Typprüfung ersetzen. Mit einer statischen Sprache kann ich mich bei meinen Tests mehr auf die Geschäftslogik konzentrieren.
Giorgio

@Giorgio Interessant, ich habe selten eine Typüberprüfungslogik in meinen Tests.
Pllee

@pllee: Manchmal ist es keine direkte Typüberprüfungslogik, aber die Tests überprüfen ein Verhalten, das ein statisches Typsystem sowieso erzwungen hätte.
Giorgio

Bruce Eckel scheint nur eine andere Person zu sein, die jahrelang mit überaus wortreichen Sprachen (Java, C ++, ...) umgegangen ist und dann den ersten Zug (Python) gesprungen ist, auf den er stößt. Er verbringt die Hälfte des Artikels damit, zu loben, wie großartig die Python-Syntax ist. Zu dieser Debatte hat er aufgrund mangelnden Wissens nichts beizutragen.
Ziggystar

Wenn Sie jedoch versuchen, eine Zeichenfolge in einer int-Variablen in einer dynamischen Sprache zu speichern, werden Sie dies erst bemerken, wenn Sie die Anwendung ausführen / testen und in Aktion sehen. In der Praxis (über 17 Jahre Entwicklungszeit) sehe ich dies jedoch sehr selten als die Hauptursache für einen Fehler! Je! Aber auch wenn es IST - merkt man es und repariert es? Was ist die große Sache? Es ist, als ob das gesamte Argument auf einem sehr technischen Fall mit seltenen Kanten basiert. Das ist kein großes Problem! Auf der anderen Seite ist der Vorteil der dynamischen Typisierung die dramatisch schnellere Entwicklung.
Manachi

2

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.


Lose Kupplung ist gut. Es sind jedoch keine dynamischen Sprachen erforderlich, um dies zu erreichen. Im Web dreht sich alles um lose Kopplung über HTTP, und die meisten Webserver und Browser sind in statischen Sprachen geschrieben. Dynamische Sprachen glänzen in Skriptanwendungen , wenn Sie einen Code benötigen, der zur Laufzeit einfach geändert werden kann, ohne eine große Toolchain aufzurufen.
9000

2

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.


1

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.


Ich denke, es ist erwähnenswert, dass Scala etwas Besonderes ist, weil es Typinferenz verwendet und daher nicht der gleichen Kategorie für statische Typisierung angehört wie Java.
Winston Ewert

1

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 ;-))


0

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.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.