2008-09-26 5 views

Antwort

0

Geschwindigkeit ist normalerweise die primäre Antwort. Obwohl dies heutzutage weniger ein Problem ist.

+5

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

0

wenn Geschwindigkeit entscheidend ist. Dynamische Sprachen werden zwar schneller, sind aber immer noch nicht so leistungsfähig wie eine kompilierte Sprache.

3

Vertrautheit und Bereitschaft der Programmierer, mit der Sprache zu arbeiten.

Ihre dynamische Sprache ist wahrscheinlich meine statische Sprache.

3

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.

+1

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

-1

Wie wäre es mit Interop? Ist es möglich, eine COM-Komponente von Ruby oder Python aufzurufen?

+0

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

+0

Dynamische Sprachen werden oft unter dem Begriff "Leimsprachen" verwendet, daher ist Interoperabilität in der Jobbeschreibung :) – tzot

0

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.

0

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.

+0

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

+0

(Haskell war eine lustige Sprache mit starken type Inferenz, aber ich bevorzuge immer noch flexiblere, dynamische, objektorientierte Sprachen wie Ruby) –

+0

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 –

0

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.

1

Grafikkarte Gerätetreiber

+0

obwohl ... mit den richtigen Bibliotheken ist das sogar möglich. schauen Sie sich einfach an. –

2

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.

Verwandte Themen