Welche Faktoren deuten darauf hin, dass die Lösung eines Projekts nicht in einer dynamischen Sprache codiert werden sollte?Unter welchen Umständen sind dynamische Sprachen nicht geeignet?
Antwort
Geschwindigkeit ist normalerweise die primäre Antwort. Obwohl dies heutzutage weniger ein Problem ist.
wenn Geschwindigkeit entscheidend ist. Dynamische Sprachen werden zwar schneller, sind aber immer noch nicht so leistungsfähig wie eine kompilierte Sprache.
Vertrautheit und Bereitschaft der Programmierer, mit der Sprache zu arbeiten.
Ihre dynamische Sprache ist wahrscheinlich meine statische Sprache.
Die Entwicklung auf Systemebene ist eine Schlüsselgruppe von Software, die normalerweise nicht in dynamischen Sprachen enthalten sein sollte. (Treiber, Kernel-Level-Zeug, usw.).
Im Grunde sollte alles, was jede Unze von Leistung oder niedrigen Hardwarezugriff haben muss, in einer niedrigeren Sprache sein.
Ein weiterer Indikator ist, wenn es in hohem Maße Zahlen knirscht, wie wissenschaftliche Datenzahl Knirschen. Das heißt, wenn es schnell laufen und Zahlen knirschen muss.
Ich denke, ein gemeinsames Thema ist prozessorintensive Probleme ... in diesem Fall werden Sie leicht die Leistungsunterschiede sehen, und Sie werden feststellen, dass die dynamische Sprache Ihnen nicht die Macht geben kann, die Hardware effektiv zu verwenden.
Das heißt, wenn Sie Prozessor-intensive Arbeit machen und es Ihnen nichts ausmacht, die Leistung zu schlagen, dann könnten Sie immer noch potenziell eine dynamische Sprache verwenden.
Update:
Beachten Sie, dass für Zahlenverarbeitung, ich meine wirklich lange Reihe läuft in der wissenschaftlichen Arena Knirschen, wo der Prozess für Stunden oder Tage läuft ... in diesem Fall ein 2x Leistungsgewinn ist GINORMOUS ... wenn es in einem viel kleineren Maßstab ist, könnten dynamische Sprachen immer noch nützlich sein.
Nun, Zahlenverarbeitung und dynamische Sprachen sind nicht orthogonal, wenn die richtigen Bibliotheken gegeben sind. Denken Sie an Python und Numpy oder an Star * P usw. – tzot
Wie wäre es mit Interop? Ist es möglich, eine COM-Komponente von Ruby oder Python aufzurufen?
Fast schmerzlos. Ruby und soweit ich mich erinnere haben beide Python Win32Ole-Module für diesen Zweck. .Net Interop ist auch möglich, obwohl ich denke, es funktioniert besser mit den IronRuby/IronPython-Implementierungen. – JasonTrue
Dynamische Sprachen werden oft unter dem Begriff "Leimsprachen" verwendet, daher ist Interoperabilität in der Jobbeschreibung :) – tzot
Interop ist mit dynamischen Sprachen absolut möglich. (Erinnern Sie sich an klassisches Visual Basic, das "Lazy Binding" hat?) Es erfordert jedoch, dass die COM-Komponente mit einigen Extras kompiliert wird, um ihren Anrufern zu helfen, namentlich zu telefonieren.
Ich denke nicht, dass Zahlenverarbeitung statisch kompiliert werden muss, meistens ist es eine Frage, wie Sie lösen. Matlab ist ein gutes Beispiel für Zahlenverarbeitung und hat eine nicht kompilierte Sprache. Matlab hat jedoch eine sehr spezifische Laufzeit für Zahlen und Matrizen.
Ich glaube, Sie sollten immer für statisch typisierte Sprache wählen, wo immer möglich. Ich sage nicht, dass C# oder Java gute statische Systeme haben, aber C# nähert sich. Gute type inference ist der Schlüssel, weil es Ihnen Vorteile in dynamischen Sprachen bietet, während Sie immer noch Sicherheit und Funktionen von statisch getippten geben. Problem gelöst - keine Flamme mehr.
das ist sehr subjektiv ... sogar Typinferenz kann nicht immer Dinge tun, die eine sehr dynamische Sprache zumindest tun kann Nicht ohne viele große Änderungen am Typensystem ... –
(Haskell war eine lustige Sprache mit starken type Inferenz, aber ich bevorzuge immer noch flexiblere, dynamische, objektorientierte Sprachen wie Ruby) –
Natürlich werden dynamische Sprachen immer sein flexibler, aber auf Kosten bestimmter Garantien. Ich denke, die Flexibilität dynamischer Sprachen wird überschätzt. Ruby ist eine großartige Sprache, das ist es wirklich, aber die meisten seiner innovativen Funktionen sind jetzt sogar in C# 3.0 möglich, ohne die statische Überprüfung während der Kompilierung zu verlieren –
Code auf Systemebene für eingebettete Systeme. Ein mögliches Problem besteht darin, dass dynamische Sprachen manchmal die Performance-Implikationen einer einzelnen leicht aussehenden Aussage verbergen.
Wie sagt diese Aussage Perl:
@contents = <FILE>;
Wenn FILE ein paar Megabyte ist, dann ist das eine ressourcenintensive Aussage - Sie könnten Ihren Haufen erschöpfen, oder ein Watchdog-Timeout verursachen, oder generell verlangsamen die Antwort des eingebetteten Systems.
Wenn Sie "näher am Metall programmieren" möchten, möchten Sie wahrscheinlich eine statisch typisierte und "mittlere" Sprache verwenden.
Grafikkarte Gerätetreiber
obwohl ... mit den richtigen Bibliotheken ist das sogar möglich. schauen Sie sich einfach an. –
Zu einem großen Teil ist Programmiersprache eine Art Wahl. Verwenden Sie die Sprache, die Sie verwenden möchten, und Sie werden maximal produktiv und glücklich sein. Wenn das aus irgendeinem Grund nicht möglich ist, dann wird Ihre endgültige Entscheidung hoffentlich auf etwas Sinnvollem basieren, wie eine Plattform, gegen die Sie antreten müssen, oder echte, empirische Leistungszahlen, und nicht die willkürliche Stilwahl eines anderen.
- 1. Unter welchen Umständen sind atomare Eigenschaften nützlich?
- 2. Unter welchen Umständen gibt TextToSpeech.isSpeaking() true zurück?
- 3. Unter welchen Umständen kann ConcurrentBag.TryTake() fehlschlagen?
- 4. Unter welchen Umständen wirft System.Collections.ArrayList.Add IndexOutOfRangeException?
- 5. Unter welchen Umständen ruft TypeBuilder.CreateType AppDomain.OnTypeResolveEvent auf?
- 6. Unter welchen Umständen werden C++ - Destruktoren nicht aufgerufen?
- 7. Unter welchen Umständen können Elternfelder nicht vererbt werden?
- 8. Unter welchen Umständen kann Viewstate nicht beibehalten werden?
- 9. Unter welchen Umständen würden Sie wollen, Rails nicht zu MYSQL
- 10. Unter welchen Umständen würde [[NSScreen mainScreen] visibleFrame] null zurückgeben?
- 11. Unter welchen Umständen wiederholt IE8 Wörter (Text) in Multilinien-Textfeldern?
- 12. Unter welchen Umständen müssen wir GC.Collect zweimal anrufen
- 13. Unter welchen Umständen teilen sich gleiche Zeichenketten die gleiche Referenz?
- 14. Unter welchen Umständen verursacht JSONSerialization.data (withJSONObject :) einen abfangbaren Fehler?
- 15. Unter welchen Umständen würde diese Ressource leckt? 4
- 16. Unter welchen Umständen verhält sich std :: unordered_map sehr langsam?
- 17. Unter welchen Umständen könnte std :: unique_ptr :: operator [] werfen?
- 18. Unter welchen Umständen wird Java field.setAccessible (true) fehlschlagen?
- 19. Unter welchen Umständen kann eine Zuweisung in C# den Wert einer Variablen nicht ändern?
- 20. Dynamische Bindungsimplementierungen in OO-Sprachen
- 21. Unter welchen Umständen kann Internet Explorer ein ActiveX-Steuerelement nicht ordnungsgemäß entladen?
- 22. In welchen Sprachen sind Datum, Uhrzeit und Kalender sehr gut?
- 23. Ist LLVM für parallele Sprachen geeignet?
- 24. Dynamische Sprachen und Variablenzuordnung
- 25. Intellisense für dynamische Sprachen
- 26. Unter welchen Umständen sollte ich dem Befehl git tag das Flag -a hinzufügen?
- 27. Unter welchen Umständen teilen .NET-Prozesse und AppDomains geladene Assemblys im Arbeitsspeicher?
- 28. Verschmelzung von falschem Änderungsset unter bestimmten Umständen
- 29. Wie/unter welchen Umständen funktioniert das Tag <see> in Delphi-XML-Kommentaren?
- 30. Unter welchen Umständen würde ich eruby benötigen, wenn ich nur Ruby Programmierung mache
Geschwindigkeit hängt weitgehend von der Qualität der Implementierung ab und hat sehr wenig damit zu tun, ob die Sprache dynamisch oder statisch typisiert ist. Gute Common-Lisp-Compiler können sicherlich mit C konkurrieren, schlechte C-Compiler können viel langsamer sein als, sagen wir, CPython. –