Gibt es wesentliche architektonische Unterschiede beim Entwerfen von Anwendungen, die auf statischen Sprachen (wie C # oder Java) und dynamischen Sprachen (wie Ruby oder Python) basieren?
Welche Gestaltungsmöglichkeiten bieten sich für einen Typ an, der für den anderen schlecht ist? Gibt es nützliche Funktionen, die mit einem Typ erzielt werden können, der nicht mit dem anderen übereinstimmt (natürlich in Bezug auf Design und Architektur)?
Gibt es auch dynamikspezifische Entwurfsmuster?
Antworten:
Lassen Sie uns ein paar Dinge klarstellen:
Abgesehen von all diesen überraschenden Ähnlichkeiten gibt es einige praktische Unterschiede, die den Entwicklungsprozess beeinflussen:
Es gibt auch eine Art von Programm , das könnte nie ohne statische Typisierung vorgenommen wurde: Singularity , ein Betriebssystem ohne Hardware Prozessgrenzen. Es ist in einer kleinen Menge von C, etwas C # und einem Dialekt von C # namens Spec # geschrieben, der Codeverträge unterstützt.
Obwohl die Multitasking- und Interprozesskommunikationsleistung auf diesem Betriebssystem in einer müllsammelbaren Sprache geschrieben ist , ist sie aufgrund der Tatsache, dass alle Prozesse in einem Speicherbereich ausgeführt werden, und der formalen Überprüfungsoptimierungen I besser als alles andere auf dem Markt oben erwähnt. Ohne statische Typisierung wäre dies nicht möglich, da die Kommunikationsobjekte statisch verifizierbar sein müssen, damit Programme den Rest des Systems nicht gefährden können.
Meistens sollten Architekturen jedoch sehr ähnlich aussehen. Statische Sprachen können es in vielen Fällen einfacher machen, über Programme nachzudenken, da die Typen gut definiert sind. Ein gut geschriebenes dynamisches Sprachprogramm würde jedoch auch Typen enthalten, die in den Köpfen der Entwickler zumindest gut definiert sind.
quelle
Es gibt einen signifikanten architektonischen Unterschied. Performance.
Abhängig von Ihrem Hardwarebudget, der erwarteten Auslastung und den Vereinbarungen zum Servicelevel ist es möglicherweise nicht möglich, die Anforderungen mit einer dynamischen Sprache zu erfüllen.
Am häufigsten gleichen die Geschwindigkeit der Entwicklung und die Flexibilität, die dynamische Sprachen bieten, die langsameren Antwortzeiten sowie den höheren CPU- und Speicherverbrauch aus. Bei größeren Systemen mit Budget- oder Leistungsbeschränkungen kann der Aufwand für eine dynamische Sprache jedoch hoch sein.
quelle
Ich habe nie in diese Richtung gedacht. Peter Norvigs Blog war also einer der Top-Hits, als er ein Google- Konto eröffnete . Es heißt, dass einige Entwurfsmuster in dynamischen Sprachen einfacher zu implementieren sind als in traditionellen objektorientierten Sprachen wie C ++. Ich denke, es sollte auch Unterschiede bei Design / Architektur geben, da er feststellt, dass die Implementierung in dynamischen Sprachen einfacher ist. Ich werde versuchen, mehr zur Antwort hinzuzufügen, wenn ich weiter studiere.
quelle
Nein.
Es ist etwas einfacher, ausgefallene Frameworks für dynamische Sprachen zu schreiben. Aber das ist keine Anwendungssache.
Wirklich keine.
Sie können gute Dinge in jeder freundlichen Sprache schreiben.
Nein.
Der Unterschied besteht darin, dass dynamische Sprachen "Schreiben, Ausführen, Reparieren" sind. Sie können schnell experimentieren und reparieren.
Statische Sprachen sind "Schreiben, Kompilieren, Erstellen, Ausführen, Reparieren". Sie können nicht so einfach experimentieren.
Davon abgesehen sind sie in ihren Fähigkeiten nahezu identisch.
Vielleicht. Python
eval()
undexecfile()
Funktionen weisen auf eine dynamische Sprachfunktion hin, die in einer statischen Sprache nur schwer (aber keineswegs unmöglich) zu handhaben ist. Es wären viel mehr Codezeilen, um Code im selben Prozessraum zu kompilieren und auszuführen.Es ist nicht sprachdynamisch. Es ist einfach einfacher.
quelle