Ja, ähnliche Fragen wurden gestellt, aber immer mit dem Ziel herauszufinden, welches besser ist.
Ich frage, weil ich als Entwickler hauptsächlich in JavaScript aufgewachsen bin und keine wirklich umfangreiche Erfahrung im Schreiben in statisch typisierten Sprachen habe.
Trotzdem sehe ich definitiv Wert darin, C zu lernen, um anspruchsvolle Operationen auf niedrigeren Codeebenen zu handhaben (was meiner Meinung nach viel mit statischer und dynamischer Arbeit auf Compilerebene zu tun hat), aber was ich versuche, meinen Kopf herumzureißen ist, ob es bestimmte Projektkontexte gibt (möglicherweise bestimmte Arten von dynamischen datenintensiven Vorgängen?), die andere Dinge als die Leistung betreffen, bei denen es viel sinnvoller ist, Java oder C # im Vergleich zu Python zu verwenden.
quelle
Antworten:
Ja auf jeden Fall.
Dynamisches Schreiben hat bestimmte Vorteile in Fällen, in denen Sie alles als einen einzigen Typ behandeln möchten. Serialisierung / Deserialisierung ist eines der klassischen Beispiele. Aus diesem Grund wird so viel Webprogrammierung in dynamisch typisierten Skriptsprachen durchgeführt: Sie eignen sich gut für eine Aufgabe, bei der alle Arten von Daten in und aus Zeichenfolgen konvertiert werden müssen.
Für die Anwendungsprogrammierung hingegen funktionieren statische Sprachen viel besser, da der Versuch, alles als einen einzigen Typ zu behandeln, nicht häufig erforderlich ist. Sie möchten häufig effiziente Datenstrukturen mit Daten, die als solche dargestellt werden, und nicht sehr häufig in andere Typen konvertiert werden. Dies macht die Funktionen der dynamischen Eingabe zu einem Nachteil anstelle eines Vorteils, weshalb Anwendungen fast ausschließlich in statisch typisierten Sprachen geschrieben werden.
quelle
Wenn Sie auf natürliche Weise in einer statisch typisierten Sprache arbeiten können, ist statische Typisierung der richtige Weg. Im Allgemeinen besteht der Zweck eines Typsystems darin, zu verhindern, dass Sie Operationen mit undefinierter Semantik ausführen
(string) "hello" + (bool) true
. Das zusätzliche Sicherheitsniveau, das Sie daran hindert, diese Vorgänge auszuführen, kann eine gute Möglichkeit sein, Fehler in Ihrem Code zu verhindern, auch ohne umfangreiche Komponententests. Das heißt, die Typensicherheit bietet ein weiteres Maß an Vertrauen in die semantische Korrektheit Ihres Codes.Typsysteme sind jedoch sehr schwer zu finden. Ich glaube nicht , es ist eine perfekte Art System in der Natur zum Zeitpunkt des Schreibens dieses Artikels. (Mit "perfektes Typsystem" meine ich ein striktes Typsystem, das keine ausführlichen Code-Annotationen erfordert, keine falsch positiven Typfehler erzeugt und dessen Typfehler für den Programmierer leicht zu verstehen sind.) Außerdem kann es Es ist schwierig, die wirklich guten Typsysteme zu verstehen, die es gibt. Als ich Haskell lernte, kann ich Ihnen nicht sagen, wie viele obskure Typfehler ich beim Versuch hatte, etwas zu schreiben, das (für mich) wie korrekter Code aussah. Normalerweise war der Code nicht richtig (was ein Punkt zugunsten des Typsystems ist), aber es hat viel gedauertvon Arbeit, um die Fehlermeldungen vom Compiler zu verstehen, damit ich die zugrunde liegenden Probleme beheben konnte. In OO - Sprachen, können Sie schließlich finden sich denken : „Dieses Argument sollte kontra mit dem Eingabetyp, nicht covariant!“, Oder (wahrscheinlicher) Rückkehr zu Umwandlungen von den Grenzen des Typs System zu entkommen. Typsysteme können viel schwieriger werden, als Sie denken.
Ich verstehe, dass die Schwierigkeit, gute Typsysteme zu entwickeln, Teil der Motivation von Gilad Bracha ist , die Unterstützung für steckbare Typsysteme in Newspeak aufzunehmen.
quelle
Es sind verschiedene Werkzeuge, aber es hängt nicht von der Leistung ab. Es geht nur um Komplexität .
Dynamische Sprachen zielen normalerweise auf maximale Flexibilität ab und bringen mangelnde Validierung und eine Art Garantie mit sich. Dann ist es in kleinen Programmen sehr leistungsfähig, aber es wird fast unmöglich, große Programme zu verwalten (Komplexität).
Statische Sprachen zielen normalerweise auf eine maximale Validierung ab. Ihr erstes Ziel ist es normalerweise, Fehler (oder Bugs) so früh wie möglich zu erkennen. Für die Validierung werden viele Garantien gegeben. Dann ist es schwieriger zu lernen und zu starten, aber wenn Programme größer werden, bietet es eine bessere Programmvalidierung bei weitaus geringeren Kosten (Codierungsaufwand).
Daher eignen sich dynamische Sprachen normalerweise für kleine (ich meine sehr kleine) Programme wie dynamische Webseiten, Webbrowser-DSL (nicht für Browseranwendungen!) Oder Shell-Skripte. Statische Sprachen eignen sich besser für Systemprogrammierungen oder andere Dinge.
Die obigen Beschreibungen beziehen sich auf sehr rein dynamische oder statische Sprachen. Die meisten realen Sprachen befinden sich dazwischen und weisen verschiedene Merkmale auf.
Weitere Informationen finden Sie hier: https://softwareengineering.stackexchange.com/a/105417/17428
quelle
Ich programmiere derzeit in statischen Sprachen (C # und F #), aber ich programmiere gerne in dynamischen Sprachen (Smalltalk, Ruby). Es gibt viele Vor- und Nachteile, die Menschen mit einem Typ gegenüber einem anderen assoziieren, bei denen es mehr um die Sprache geht als beim Erzwingen von Typen. Beispielsweise haben dynamische Sprachen normalerweise eine sauberere, präzisere Syntax, jedoch haben F # und OCaml mit ihrem Typinferenzsystem eine ebenso saubere Syntax wie jede dynamische Sprache. Und mit statischer Typisierung haben Sie echte automatische Refactorings und Autocomplete, aber Smalltalk mit seinem gesamten Quellcode in einer Datenbank und jeder Methode, die separat kompiliert wurde, war die erste Sprache, die wirklich ernsthafte automatisierte Refactorings hatte, und es hat großartig funktioniert. Letztendlich sind moderne dynamische und statische Sprachen heutzutage typsicher, was der wichtigste Aspekt Ihres Typsystems ist.
quelle
Es ist jetzt 2015, was dem Gespräch einige interessante Ausschnitte hinzufügt:
Die Backend-Leute haben also die unnötige Zwangsjacke des strengen Tippens satt, während die Frontend-Jungs das Chaos des dynamischen Tippens satt haben.
Ganz ironisch: Ich frage mich, ob sie sich in der Mitte treffen oder mit dem Überschallknall einer Frist aneinander vorbeirasen ...? ;)
quelle